PageRenderTime 54ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/wrfv2_fire/phys/module_physics_init.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 2890 lines | 2027 code | 331 blank | 532 comment | 29 complexity | d714e1d2e2743694f30eb848ea228815 MD5 | raw file
Possible License(s): AGPL-1.0

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

  1. !WRF:MODEL_LAYER:INITIALIZATION
  2. !
  3. ! This MODULE holds the routines which are used to perform model start-up operations
  4. ! for the individual domains. This is the stage after inputting wrfinput and before
  5. ! calling 'integrate'.
  6. ! This MODULE CONTAINS the following routines:
  7. MODULE module_physics_init
  8. USE module_state_description
  9. USE module_model_constants
  10. USE module_configure, ONLY : grid_config_rec_type
  11. ! USE module_ssib_veg , ONLY : init_module_ssib_veg !fds (SSiB constants)
  12. CONTAINS
  13. !=================================================================
  14. SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, &
  15. p_top, TSK,RADT,BLDT,CUDT,MPDT, &
  16. RUCUTEN, RVCUTEN, &
  17. RTHCUTEN, RQVCUTEN, RQRCUTEN, &
  18. RQCCUTEN, RQSCUTEN, RQICUTEN, &
  19. RUSHTEN, RVSHTEN, RTHSHTEN, &
  20. RQVSHTEN, RQRSHTEN, RQCSHTEN, &
  21. RQSSHTEN, RQISHTEN, RQGSHTEN, &
  22. RUBLTEN,RVBLTEN,RTHBLTEN, &
  23. RQVBLTEN,RQCBLTEN,RQIBLTEN, &
  24. RTHRATEN,RTHRATENLW,RTHRATENSW, &
  25. STEPBL,STEPRA,STEPCU, &
  26. W0AVG, RAINNC, RAINC, RAINCV, RAINNCV, &
  27. SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV, &
  28. NCA,swrad_scat, &
  29. CLDEFI,LOWLYR, &
  30. MASS_FLUX, &
  31. RTHFTEN, RQVFTEN, &
  32. CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK, & !EMBCK new
  33. LU_INDEX, &
  34. landuse_ISICE, landuse_LUCATS, &
  35. landuse_LUSEAS, landuse_ISN, &
  36. lu_state, &
  37. XLAT,XLONG,ALBEDO,ALBBCK,GMT,JULYR,JULDAY,&
  38. levsiz, n_ozmixm, n_aerosolc, paerlev, &
  39. TMN,XLAND,ZNT,Z0,UST,MOL,PBLH,TKE_PBL, &
  40. EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL, &
  41. TSLB,ZS,DZS,num_soil_layers,warm_rain, &
  42. adv_moist_cond, &
  43. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  44. APR_CAPMA,APR_CAPME,APR_CAPMI, &
  45. XICE,XICEM,VEGFRA,SNOW,CANWAT,SMSTAV, &
  46. SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,&
  47. ACSNOM,IVGTYP,ISLTYP, SFCEVP, SMOIS, &
  48. SH2O, SNOWH, SMFR3D, & ! temporary
  49. SNOALB, &
  50. DX,DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
  51. mp_restart_state,tbpvs_state,tbpvs0_state,&
  52. allowed_to_read, moved, start_of_simulation,&
  53. LAGDAY, &
  54. ids, ide, jds, jde, kds, kde, &
  55. ims, ime, jms, jme, kms, kme, &
  56. its, ite, jts, jte, kts, kte, &
  57. NUM_URBAN_LAYERS, &
  58. raincv_a,raincv_b, &
  59. gd_cloud,gd_cloud2, & ! Optional
  60. gd_cloud_a,gd_cloud2_a, & ! Optional
  61. gd_cloud_b,gd_cloud2_b, & ! Optional
  62. ozmixm,pin, & ! Optional
  63. m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,& ! Optional
  64. RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN, & ! Optional
  65. RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, & ! Optional
  66. FGDT,STEPFG, & ! Optional
  67. cugd_tten,cugd_ttens,cugd_qvten, & ! Optional
  68. cugd_qvtens,cugd_qcten, & ! Optional
  69. ISNOWXY, ZSNSOXY, TSNOXY, & ! Optional Noah-MP
  70. SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY, & ! Optional Noah-MP
  71. CANLIQXY, EAHXY, TAHXY, CMXY, & ! Optional Noah-MP
  72. CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY, & ! Optional Noah-MP
  73. WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY, & ! Optional Noah-MP
  74. STMASSXY, WOODXY, STBLCPXY, FASTCPXY, & ! Optional Noah-MP
  75. XSAIXY, & ! Optional Noah-MP
  76. T2MVXY, T2MBXY, CHSTARXY , & ! Optional Noah-MP
  77. ! num_roof_layers,num_wall_layers, & !Optional urban
  78. ! num_road_layers, & !Optional urban
  79. DZR, DZB, DZG, & !Optional urban
  80. TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D, & !Optional urban
  81. QC_URB2D, XXXR_URB2D,XXXB_URB2D, & !Optional urban
  82. XXXG_URB2D, XXXC_URB2D, & !Optional urban
  83. TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
  84. SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
  85. TS_URB2D, FRC_URB2D, UTYPE_URB2D, & !Optional urban
  86. TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
  87. TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
  88. TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
  89. TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
  90. SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
  91. SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
  92. SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
  93. SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
  94. SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
  95. A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
  96. A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
  97. B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
  98. DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
  99. TML,T0ML,HML,H0ML,HUML,HVML,TMOML, & !Optional oml
  100. itimestep, & !Optional obs fdda
  101. #if ( EM_CORE == 1 )
  102. fdob, & !Optional obs fdda
  103. #endif
  104. t00, p00, tlp, & !for obs-nudging
  105. TYR,TYRA,TDLY,TLAG,NYEAR,NDAY,tmn_update, &
  106. ACHFX,ACLHF,ACGRDFLX &
  107. ! OPTIONAL
  108. ,te_temf & ! WA 12/21/09
  109. ,cf3d_temf & ! WA 9/27/10
  110. ,wm_temf & ! WA 2/22/11
  111. ,massflux_EDKF, entr_EDKF, detr_EDKF & ! Optional for qnse
  112. ,thl_up, thv_up, rt_up & ! Optional for qnse
  113. ,rv_up, rc_up, u_up, v_up, frac_up & ! Optional for qnse
  114. )
  115. !-----------------------------------------------------------------
  116. USE module_domain
  117. USE module_wrf_error
  118. USE module_wind_generic
  119. USE module_wind_fitch
  120. IMPLICIT NONE
  121. !-----------------------------------------------------------------
  122. TYPE (grid_config_rec_type) :: config_flags
  123. INTEGER , INTENT(IN) :: id
  124. INTEGER , INTENT(IN) ,OPTIONAL :: tmn_update
  125. LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
  126. ! LOGICAL , INTENT (IN) :: FNDSOILW, FNDSNOWH
  127. LOGICAL, PARAMETER :: FNDSOILW=.true., FNDSNOWH=.true.
  128. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  129. ims, ime, jms, jme, kms, kme, &
  130. its, ite, jts, jte, kts, kte
  131. INTEGER , INTENT(IN) :: num_soil_layers
  132. INTEGER , INTENT(IN) :: lagday
  133. INTEGER , INTENT(OUT) ,OPTIONAL :: nyear
  134. REAL , INTENT(OUT) ,OPTIONAL :: nday
  135. LOGICAL, INTENT(IN) :: start_of_simulation
  136. REAL, INTENT(IN) :: DT, p_top, DX, DY
  137. LOGICAL, INTENT(IN) :: restart
  138. REAL, INTENT(IN) :: RADT,BLDT,CUDT,MPDT
  139. REAL, INTENT(IN) :: swrad_scat
  140. REAL, DIMENSION( kms:kme ) , INTENT(IN) :: zfull, zhalf
  141. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK, XLAT, XLONG
  142. INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
  143. INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
  144. REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
  145. INTENT(INOUT) :: OZMIXM
  146. REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
  147. REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
  148. REAL, DIMENSION(paerlev), OPTIONAL,INTENT(INOUT) :: m_hybi
  149. REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
  150. INTENT(INOUT) :: aerosolc_1, aerosolc_2
  151. REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
  152. INTENT(INOUT) :: SMOIS, SH2O,TSLB
  153. REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), INTENT(OUT) :: SMFR3D
  154. REAL, DIMENSION( ims:ime, jms:jme ) , &
  155. INTENT(INOUT) :: SNOW, &
  156. SNOWC, &
  157. SNOWH, &
  158. CANWAT, &
  159. SMSTAV, &
  160. SMSTOT, &
  161. SFCRUNOFF, &
  162. UDRUNOFF, &
  163. SFCEVP, &
  164. GRDFLX, &
  165. ACSNOW, &
  166. XICE, &
  167. XICEM, &
  168. VEGFRA, &
  169. ACSNOM
  170. REAL, DIMENSION( ims:ime, jms:jme ) , &
  171. OPTIONAL, INTENT(INOUT) :: ACHFX, &
  172. ACLHF, &
  173. ACGRDFLX
  174. INTEGER, DIMENSION( ims:ime, jms:jme ) , &
  175. INTENT(INOUT) :: IVGTYP, &
  176. ISLTYP
  177. ! rad
  178. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  179. RTHRATEN, RTHRATENLW, RTHRATENSW, CLDFRA
  180. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
  181. CLDFRA_OLD
  182. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
  183. GSW,ALBEDO,ALBBCK,GLW,EMISS,EMBCK !EMBCK new
  184. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: SNOALB
  185. REAL, INTENT(IN) :: GMT
  186. INTEGER , INTENT(OUT) :: STEPRA, STEPBL, STEPCU
  187. INTEGER , INTENT(IN) :: JULYR, JULDAY
  188. ! cps
  189. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  190. RUCUTEN, RVCUTEN, RTHCUTEN, RQVCUTEN, RQRCUTEN, RQCCUTEN, &
  191. RQSCUTEN, RQICUTEN, &
  192. RUSHTEN, RVSHTEN, RTHSHTEN, RQVSHTEN, RQRSHTEN, RQCSHTEN, &
  193. RQSSHTEN, RQISHTEN, RQGSHTEN
  194. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
  195. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: MASS_FLUX, &
  196. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  197. APR_CAPMA,APR_CAPME,APR_CAPMI
  198. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  199. RTHFTEN, RQVFTEN
  200. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: &
  201. RAINNC, RAINC, RAINCV, RAINNCV, &
  202. SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV
  203. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: CLDEFI, NCA
  204. INTEGER, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR
  205. !pbl
  206. ! soil layer
  207. REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
  208. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  209. RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN,RQIBLTEN,EXCH_H,TKE_PBL
  210. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT), OPTIONAL :: &
  211. massflux_EDKF, entr_EDKF, detr_EDKF &
  212. ,thl_up, thv_up, rt_up &
  213. ,rv_up, rc_up, u_up, v_up &
  214. ,frac_up
  215. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
  216. cugd_tten,cugd_ttens,cugd_qvten, &
  217. cugd_qvtens,cugd_qcten
  218. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
  219. XLAND,ZNT,Z0,UST,MOL,LU_INDEX, &
  220. PBLH,THC,MAVAIL,HFX,QFX,RAINBL
  221. INTEGER , INTENT(INOUT) :: landuse_ISICE, landuse_LUCATS
  222. INTEGER , INTENT(INOUT) :: landuse_LUSEAS, landuse_ISN
  223. REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
  224. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
  225. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYR
  226. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYRA
  227. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TDLY
  228. REAL, DIMENSION( ims:ime , 1:lagday , jms:jme ) , INTENT(INOUT),OPTIONAL :: TLAG
  229. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
  230. OPTIONAL, &
  231. INTENT(INOUT ) :: &
  232. gd_cloud, gd_cloud2, &
  233. gd_cloud_a, gd_cloud2_a, &
  234. gd_cloud_b, gd_cloud2_b
  235. REAL, DIMENSION( ims:ime , jms:jme ) , &
  236. INTENT(INOUT ) :: &
  237. raincv_a,raincv_b
  238. !Noah-MP
  239. INTEGER, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ISNOWXY
  240. REAL, OPTIONAL, DIMENSION(ims:ime,-2:num_soil_layers, jms:jme) :: ZSNSOXY
  241. REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: TSNOXY
  242. REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNICEXY
  243. REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNLIQXY
  244. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TVXY
  245. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TGXY
  246. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANICEXY
  247. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANLIQXY
  248. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: EAHXY
  249. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TAHXY
  250. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CMXY
  251. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHXY
  252. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FWETXY
  253. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: SNEQVOXY
  254. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ALBOLDXY
  255. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: QSNOWXY
  256. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WSLAKEXY
  257. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ZWTXY
  258. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WAXY
  259. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WTXY
  260. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: LFMASSXY
  261. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: RTMASSXY
  262. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STMASSXY
  263. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WOODXY
  264. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STBLCPXY
  265. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FASTCPXY
  266. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: XSAIXY
  267. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MVXY
  268. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MBXY
  269. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHSTARXY
  270. !mp
  271. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  272. F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
  273. REAL, DIMENSION(:), INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
  274. LOGICAL, INTENT(IN) :: allowed_to_read, moved
  275. ! ocean mixed layer
  276. REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
  277. TML,T0ML,HML,H0ML,HUML,HVML,TMOML
  278. !fdda
  279. REAL, OPTIONAL, INTENT(IN) :: FGDT
  280. INTEGER , OPTIONAL, INTENT(OUT) :: STEPFG
  281. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
  282. RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN, RPHNDGDTEN, RQVNDGDTEN
  283. REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
  284. RMUNDGDTEN
  285. !URBAN
  286. ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !urban
  287. ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !urban
  288. ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !urban
  289. REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !urban
  290. REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !urban
  291. REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !urban
  292. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !urban
  293. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !urban
  294. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !urban
  295. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !urban
  296. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !urban
  297. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !urban
  298. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !urban
  299. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !urban
  300. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !urban
  301. ! REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
  302. ! REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
  303. ! REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
  304. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
  305. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
  306. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
  307. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !urban
  308. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !urban
  309. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !urban
  310. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !urban
  311. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !urban
  312. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !urban
  313. INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !urban
  314. INTEGER , INTENT(IN) :: num_urban_layers
  315. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TRB_URB4D ! multi-layer UCM
  316. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW1_URB4D ! multi-layer UCM
  317. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW2_URB4D ! multi-layer UCM
  318. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TGB_URB4D ! multi-layer UCM
  319. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TLEV_URB3D ! multi-layer UCM
  320. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: QLEV_URB3D ! multi-layer UCM
  321. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
  322. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
  323. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
  324. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
  325. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
  326. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
  327. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
  328. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
  329. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
  330. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
  331. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
  332. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFG_URB3D ! multi-layer UCM
  333. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFR_URB3D ! multi-layer UCM
  334. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW1_URB3D ! multi-layer UCM
  335. REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW2_URB3D ! multi-layer UCM
  336. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
  337. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
  338. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
  339. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
  340. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
  341. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
  342. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
  343. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
  344. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
  345. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
  346. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
  347. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
  348. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme), INTENT(INOUT) :: SF_BEP
  349. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
  350. !obs fdda
  351. INTEGER, OPTIONAL, INTENT(IN) :: itimestep
  352. #if ( EM_CORE == 1 )
  353. TYPE(fdob_type), OPTIONAL, INTENT(INOUT) :: fdob
  354. #endif
  355. REAL, OPTIONAL, INTENT(IN) :: p00, t00, tlp ! for obs-nudging base-state calcn
  356. ! WA 12/21/09
  357. REAL,OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
  358. INTENT(OUT) :: te_temf, cf3d_temf
  359. ! WA 2/22/11
  360. REAL,OPTIONAL, DIMENSION( ims:ime , jms:jme ) , &
  361. INTENT(OUT) :: wm_temf
  362. ! Local data
  363. REAL :: ALBLND,ZZLND,ZZWTR,THINLD,XMAVA,CEN_LAT,pptop
  364. REAL, DIMENSION( kms:kme ) :: sfull, shalf
  365. REAL :: obs_twindo_cg, obs_twindo
  366. CHARACTER*256 :: MMINLU_loc
  367. CHARACTER*80 :: message
  368. INTEGER :: ISWATER
  369. INTEGER :: ISICE
  370. INTEGER :: ISURBAN
  371. INTEGER :: sf_urban_physics
  372. INTEGER :: omlcall
  373. REAL :: oml_hml0
  374. LOGICAL :: usemonalb
  375. LOGICAL :: rdmaxalb
  376. INTEGER :: mfshconv
  377. INTEGER :: i, j, k, itf, jtf, ktf, n
  378. integer myproc
  379. !-----------------------------------------------------------------
  380. sf_urban_physics=config_flags%sf_urban_physics
  381. usemonalb=config_flags%usemonalb
  382. rdmaxalb=config_flags%rdmaxalb
  383. mfshconv=config_flags%mfshconv
  384. #if ( EM_CORE == 1 )
  385. obs_twindo_cg=model_config_rec%obs_twindo(1)
  386. obs_twindo=config_flags%obs_twindo
  387. oml_hml0=config_flags%oml_hml0
  388. omlcall=config_flags%omlcall
  389. #endif
  390. !-- should be from the namelist
  391. sfull = 0.
  392. shalf = 0.
  393. CALL wrf_debug(100,'top of phy_init')
  394. WRITE(wrf_err_message,*) 'phy_init: start_of_simulation = ',start_of_simulation
  395. CALL wrf_debug ( 100, TRIM(wrf_err_message) )
  396. itf=min0(ite,ide-1)
  397. jtf=min0(jte,jde-1)
  398. ktf=min0(kte,kde-1)
  399. ZZLND=0.1
  400. ZZWTR=0.0001
  401. THINLD=0.04
  402. ALBLND=0.2
  403. XMAVA=0.3
  404. #if (NMM_CORE == 1)
  405. if (.not.usemonalb) CALL wrf_error_fatal('usemonalb should always be true for NMM')
  406. #endif
  407. CALL nl_get_cen_lat(id,cen_lat)
  408. CALL wrf_debug(100,'calling nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
  409. CALL nl_get_iswater(id,iswater)
  410. CALL nl_get_isice(id,isice)
  411. CALL nl_get_isurban(id,isurban)
  412. CALL nl_get_mminlu( 1, mminlu_loc )
  413. CALL wrf_debug(100,'after nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
  414. !-- temporary fix by ww
  415. landuse_ISICE = isice
  416. ! Added for Wind Turbine parameterization code -- This will only read in an optional
  417. ! configuration file with information that will be used by inividual turbine init routines
  418. ! as each domain is initialized.
  419. IF ( id .EQ. 1 ) THEN
  420. CALL init_module_wind_generic
  421. CALL init_module_wind_fitch
  422. ENDIF
  423. !
  424. IF(.not.restart)THEN
  425. !-- initialize common variables
  426. IF ( .NOT. moved ) THEN
  427. DO j=jts,jtf
  428. DO i=its,itf
  429. XLAND(i,j)=1.
  430. GSW(i,j)=0.
  431. GLW(i,j)=0.
  432. !-- initialize ust to a small value
  433. UST(i,j)=0.0001
  434. MOL(i,j)=0.0
  435. PBLH(i,j)=0.0
  436. HFX(i,j)=0.
  437. QFX(i,j)=0.
  438. RAINBL(i,j)=0.
  439. RAINNCV(i,j)=0.
  440. SNOWNCV(i,j)=0.
  441. GRAUPELNCV(i,j)=0.
  442. ACSNOW(i,j)=0.
  443. DO k=kms,kme !wig, 17-May-2006: Added for idealized chem. runs
  444. EXCH_H(i,k,j) = 0.
  445. END DO
  446. ENDDO
  447. ENDDO
  448. ENDIF
  449. !
  450. IF(PRESENT(TMN_UPDATE))THEN
  451. if(tmn_update.eq.1) then
  452. nyear=1
  453. nday=0.
  454. DO j=jts,jtf
  455. DO i=its,itf
  456. TYR(i,j)=TMN(i,j)
  457. TYRA(i,j)=0.0
  458. TDLY(i,j)=0.0
  459. DO n=1,lagday
  460. TLAG(i,n,j)=TMN(i,j)
  461. ENDDO
  462. ENDDO
  463. ENDDO
  464. endif
  465. ENDIF
  466. !
  467. !
  468. DO j=jts,jtf
  469. DO i=its,itf
  470. IF(XLAND(i,j) .LT. 1.5)THEN
  471. IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=ALBLND
  472. EMBCK(i,j)=0.85
  473. ALBEDO(i,j)=ALBBCK(i,j)
  474. EMISS(i,j)=EMBCK(i,j)
  475. THC(i,j)=THINLD
  476. ZNT(i,j)=ZZLND
  477. #if ! ( NMM_CORE == 1 )
  478. Z0(i,j)=ZZLND
  479. #endif
  480. MAVAIL(i,j)=XMAVA
  481. ELSE
  482. IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=0.08
  483. ALBEDO(i,j)=ALBBCK(i,j)
  484. EMBCK(i,j)=0.98
  485. EMISS(i,j)=EMBCK(i,j)
  486. THC(i,j)=THINLD
  487. ZNT(i,j)=ZZWTR
  488. #if ! ( NMM_CORE == 1 )
  489. Z0(i,j)=ZZWTR
  490. #endif
  491. MAVAIL(i,j)=1.0
  492. ENDIF
  493. ENDDO
  494. ENDDO
  495. if (config_flags%cu_diag == 1 )then
  496. do j=jts,jtf
  497. do k=kts,ktf
  498. do i=its,itf
  499. gd_cloud(i,k,j) = 0.
  500. gd_cloud2(i,k,j) = 0.
  501. gd_cloud_a(i,k,j) = 0.
  502. gd_cloud2_a(i,k,j) = 0.
  503. gd_cloud_b(i,k,j) = 0.
  504. gd_cloud2_b(i,k,j) = 0.
  505. end do
  506. end do
  507. end do
  508. endif
  509. do j=jts,jtf
  510. do i=its,itf
  511. raincv_a(i,j)=0.
  512. raincv_b(i,j)=0.
  513. end do
  514. end do
  515. CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to landuse_init' )
  516. IF(mminlu_loc .ne. ' ')THEN
  517. !-- initialize surface properties
  518. CALL landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
  519. znt, Z0, thc, xland, xice, xicem, julday, cen_lat, iswater, &
  520. TRIM ( mminlu_loc ) , &
  521. landuse_ISICE, landuse_LUCATS, &
  522. landuse_LUSEAS, landuse_ISN, &
  523. config_flags%fractional_seaice, &
  524. lu_state, &
  525. allowed_to_read , usemonalb , &
  526. ids, ide, jds, jde, kds, kde, &
  527. ims, ime, jms, jme, kms, kme, &
  528. its, ite, jts, jte, kts, kte )
  529. ENDIF
  530. ENDIF
  531. !-- convert zfull and zhalf to sigma values for ra_init (Eta CO2 needs these)
  532. !-- zfull/zhalf may be either zeta or eta
  533. !-- what is done here depends on coordinate (check this code if adding new coordinates)
  534. CALL z2sigma(zfull,zhalf,sfull,shalf,p_top,pptop,config_flags, &
  535. allowed_to_read, &
  536. kds,kde,kms,kme,kts,kte)
  537. !-- initialize physics
  538. !-- ra: radiation
  539. !-- bl: pbl
  540. !-- cu: cumulus
  541. !-- mp: microphysics
  542. CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to ra_init' )
  543. CALL ra_init(id=id,STEPRA=STEPRA,RADT=RADT,DT=DT,RTHRATEN=RTHRATEN,RTHRATENLW=RTHRATENLW, &
  544. RTHRATENSW=RTHRATENSW,CLDFRA=CLDFRA,EMISS=EMISS,cen_lat=cen_lat,JULYR=JULYR,JULDAY=JULDAY,GMT=GMT, &
  545. levsiz=levsiz,XLAT=XLAT,n_ozmixm=n_ozmixm, &
  546. cldfra_old=cldfra_old, & ! Optional
  547. ozmixm=ozmixm,pin=pin, & ! Optional
  548. m_ps_1=m_ps_1,m_ps_2=m_ps_2,m_hybi=m_hybi,aerosolc_1=aerosolc_1,aerosolc_2=aerosolc_2, & ! Optional
  549. paerlev=paerlev,n_aerosolc=n_aerosolc, &
  550. sfull=sfull,shalf=shalf,pptop=pptop,swrad_scat=swrad_scat,p_top=p_top, &
  551. config_flags=config_flags,restart=restart, &
  552. allowed_to_read=allowed_to_read, start_of_simulation=start_of_simulation, &
  553. ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, &
  554. ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, &
  555. its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte )
  556. CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to bl_init' )
  557. CALL bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
  558. RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
  559. config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
  560. num_soil_layers,TKE_PBL,mfshconv, &
  561. massflux_EDKF, entr_EDKF, detr_EDKF, &
  562. thl_up, thv_up, rt_up, &
  563. rv_up, rc_up, u_up, v_up, &
  564. frac_up, &
  565. EXCH_H,VEGFRA, &
  566. SNOW,SNOWC, CANWAT,SMSTAV, &
  567. SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
  568. IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,MAVAIL, &
  569. SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
  570. #if (NMM_CORE == 1)
  571. Z0,XLAND,XICE, &
  572. #else
  573. ZNT,XLAND,XICE, &
  574. #endif
  575. SFCEVP,GRDFLX, &
  576. TRIM (MMINLU_LOC), &
  577. ISNOWXY, ZSNSOXY, TSNOXY, &
  578. SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY, &
  579. CANLIQXY, EAHXY, TAHXY, CMXY, &
  580. CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY, &
  581. WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY,&
  582. STMASSXY, WOODXY, STBLCPXY, FASTCPXY, &
  583. XSAIXY, &
  584. T2MVXY,T2MBXY,CHSTARXY , &
  585. allowed_to_read , &
  586. start_of_simulation , &
  587. te_temf,cf3d_temf,wm_temf, & ! WA
  588. DZR, DZB, DZG, & !Optional urban
  589. TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
  590. XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
  591. TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
  592. SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
  593. TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
  594. SF_URBAN_PHYSICS, & !Optional urban
  595. NUM_URBAN_LAYERS, & !Optional multi-layer urban
  596. TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
  597. TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
  598. TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
  599. TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
  600. SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
  601. SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
  602. SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
  603. SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
  604. SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
  605. A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
  606. A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
  607. B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
  608. DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
  609. ids, ide, jds, jde, kds, kde, &
  610. ims, ime, jms, jme, kms, kme, &
  611. its, ite, jts, jte, kts, kte, &
  612. ACHFX,ACLHF,ACGRDFLX, &
  613. oml_hml0, omlcall, & !Optional oml
  614. TML,T0ML,HML,H0ML,HUML,HVML,TMOML ) !Optional oml
  615. CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to cu_init' )
  616. CALL cu_init(STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, &
  617. RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN, &
  618. NCA,RAINC,RAINCV,W0AVG,config_flags,restart, &
  619. CLDEFI,LOWLYR,MASS_FLUX, &
  620. RTHFTEN, RQVFTEN, &
  621. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  622. APR_CAPMA,APR_CAPME,APR_CAPMI, &
  623. cugd_tten,cugd_ttens,cugd_qvten, &
  624. cugd_qvtens,cugd_qcten, &
  625. allowed_to_read, start_of_simulation, &
  626. ids, ide, jds, jde, kds, kde, &
  627. ims, ime, jms, jme, kms, kme, &
  628. its, ite, jts, jte, kts, kte )
  629. CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to shcu_init' )
  630. CALL shcu_init(STEPCU,CUDT,DT,RUSHTEN,RVSHTEN,RTHSHTEN, &
  631. RQVSHTEN,RQRSHTEN,RQCSHTEN, &
  632. RQSSHTEN,RQISHTEN,RQGSHTEN, &
  633. NCA,RAINC,RAINCV,config_flags,restart, &
  634. allowed_to_read, start_of_simulation, &
  635. ids, ide, jds, jde, kds, kde, &
  636. ims, ime, jms, jme, kms, kme, &
  637. its, ite, jts, jte, kts, kte )
  638. CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to mp_init' )
  639. CALL mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, &
  640. adv_moist_cond, &
  641. MPDT, DT, DX, DY, LOWLYR, &
  642. F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
  643. mp_restart_state,tbpvs_state,tbpvs0_state, &
  644. allowed_to_read, start_of_simulation, &
  645. ids, ide, jds, jde, kds, kde, &
  646. ims, ime, jms, jme, kms, kme, &
  647. its, ite, jts, jte, kts, kte )
  648. #if ( EM_CORE == 1 )
  649. CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fg_init' )
  650. CALL fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
  651. RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
  652. config_flags,restart, &
  653. allowed_to_read , &
  654. ids, ide, jds, jde, kds, kde, &
  655. ims, ime, jms, jme, kms, kme, &
  656. its, ite, jts, jte, kts, kte )
  657. CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fdob_init' )
  658. CALL fdob_init(model_config_rec%obs_nudge_opt, &
  659. model_config_rec%max_dom, &
  660. id, &
  661. model_config_rec%parent_id, &
  662. model_config_rec%obs_idynin, &
  663. model_config_rec%obs_dtramp, &
  664. model_config_rec%fdda_end, &
  665. model_config_rec%restart, &
  666. obs_twindo_cg, obs_twindo, &
  667. itimestep, &
  668. model_config_rec%obs_no_pbl_nudge_uv, &
  669. model_config_rec%obs_no_pbl_nudge_t, &
  670. model_config_rec%obs_no_pbl_nudge_q, &
  671. model_config_rec%obs_sfc_scheme_horiz, &
  672. model_config_rec%obs_sfc_scheme_vert, &
  673. model_config_rec%obs_max_sndng_gap, &
  674. model_config_rec%obs_sfcfact, &
  675. model_config_rec%obs_sfcfacr, &
  676. model_config_rec%obs_dpsmx, &
  677. model_config_rec%obs_nudge_wind, &
  678. model_config_rec%obs_nudge_temp, &
  679. model_config_rec%obs_nudge_mois, &
  680. model_config_rec%obs_nudgezfullr1_uv, &
  681. model_config_rec%obs_nudgezrampr1_uv, &
  682. model_config_rec%obs_nudgezfullr2_uv, &
  683. model_config_rec%obs_nudgezrampr2_uv, &
  684. model_config_rec%obs_nudgezfullr4_uv, &
  685. model_config_rec%obs_nudgezrampr4_uv, &
  686. model_config_rec%obs_nudgezfullr1_t, &
  687. model_config_rec%obs_nudgezrampr1_t, &
  688. model_config_rec%obs_nudgezfullr2_t, &
  689. model_config_rec%obs_nudgezrampr2_t, &
  690. model_config_rec%obs_nudgezfullr4_t, &
  691. model_config_rec%obs_nudgezrampr4_t, &
  692. model_config_rec%obs_nudgezfullr1_q, &
  693. model_config_rec%obs_nudgezrampr1_q, &
  694. model_config_rec%obs_nudgezfullr2_q, &
  695. model_config_rec%obs_nudgezrampr2_q, &
  696. model_config_rec%obs_nudgezfullr4_q, &
  697. model_config_rec%obs_nudgezrampr4_q, &
  698. model_config_rec%obs_nudgezfullmin, &
  699. model_config_rec%obs_nudgezrampmin, &
  700. model_config_rec%obs_nudgezmax, &
  701. xlat, &
  702. xlong, &
  703. model_config_rec%start_year(id), &
  704. model_config_rec%start_month(id), &
  705. model_config_rec%start_day(id), &
  706. model_config_rec%start_hour(id), &
  707. model_config_rec%start_minute(id), &
  708. model_config_rec%start_second(id), &
  709. p00, t00, tlp, &
  710. zhalf, p_top, &
  711. fdob, &
  712. model_config_rec%obs_ipf_init, &
  713. ids, ide, jds, jde, kds, kde, &
  714. ims, ime, jms, jme, kms, kme, &
  715. its, ite, jts, jte, kts, kte )
  716. #endif
  717. END SUBROUTINE phy_init
  718. !=====================================================================
  719. SUBROUTINE landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
  720. znt,Z0,thc,xland, xice, xicem, julday, cen_lat, iswater, mminlu, &
  721. ISICE, LUCATS, LUSEAS, ISN, &
  722. fractional_seaice, &
  723. lu_state, &
  724. allowed_to_read , usemonalb , &
  725. ids, ide, jds, jde, kds, kde, &
  726. ims, ime, jms, jme, kms, kme, &
  727. its, ite, jts, jte, kts, kte )
  728. USE module_wrf_error
  729. IMPLICIT NONE
  730. !---------------------------------------------------------------------
  731. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  732. ims, ime, jms, jme, kms, kme, &
  733. its, ite, jts, jte, kts, kte
  734. INTEGER , INTENT(IN) :: iswater, julday
  735. REAL , INTENT(IN) :: cen_lat
  736. CHARACTER(LEN=*), INTENT(IN) :: mminlu
  737. LOGICAL, INTENT(IN) :: allowed_to_read , usemonalb
  738. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: lu_index, snowc, xice, snoalb
  739. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT ) :: albedo, albbck, mavail, emiss, &
  740. embck, &
  741. znt, Z0, thc, xland, xicem
  742. INTEGER , INTENT(INOUT) :: ISICE, LUCATS, LUSEAS, ISN, fractional_seaice
  743. REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
  744. REAL :: xice_threshold
  745. !---------------------------------------------------------------------
  746. ! Local
  747. CHARACTER*256 LUTYPE
  748. CHARACTER*80 :: message
  749. INTEGER :: landuse_unit, LS, LC, LI, LUN, NSN
  750. INTEGER :: i, j, itf, jtf, is, cats, seas, curs
  751. INTEGER , PARAMETER :: OPEN_OK = 0
  752. INTEGER :: ierr
  753. INTEGER , PARAMETER :: max_cats = 100 , max_seas = 12
  754. REAL , DIMENSION( max_cats, max_seas ) :: ALBD, SLMO, SFEM, SFZ0, THERIN, SFHC
  755. REAL , DIMENSION( max_cats ) :: SCFX
  756. ! save these fields in case nest moves or has to be reinitialized
  757. ! and this routine is called with allowed_to_read set to false
  758. ! note that by saving these, we're locking in the same landuse for
  759. ! the duration of a run; possible implications for long climate runs
  760. LOGICAL :: found_lu, end_of_file
  761. LOGICAL, EXTERNAL :: wrf_dm_on_monitor
  762. !---------------------------------------------------------------------
  763. CALL wrf_debug( 100 , 'top of landuse_init' )
  764. NSN=-1 ! set this to suppress uninitalized data messages from tools
  765. if ( fractional_seaice == 0 ) then
  766. xice_threshold = 0.5
  767. else if ( fractional_seaice == 1 ) then
  768. xice_threshold = 0.02
  769. endif
  770. ! recover LU variables from state
  771. IF ( 6*(max_cats*max_seas)+1*max_cats .GT. 7501 ) THEN
  772. WRITE(message,*)'landuse_init: lu_state overflow. Make Registry dimspec p > ',6*(max_cats*max_seas)+1*max_cats
  773. ENDIF
  774. curs = 1
  775. DO cats = 1, max_cats
  776. SCFX(cats) = lu_state(curs) ; curs = curs + 1
  777. DO seas = 1, max_seas
  778. ALBD(cats,seas) = lu_state(curs) ; curs = curs + 1
  779. SLMO(cats,seas) = lu_state(curs) ; curs = curs + 1
  780. SFEM(cats,seas) = lu_state(curs) ; curs = curs + 1
  781. SFZ0(cats,seas) = lu_state(curs) ; curs = curs + 1
  782. SFHC(cats,seas) = lu_state(curs) ; curs = curs + 1
  783. THERIN(cats,seas) = lu_state(curs) ; curs = curs + 1
  784. ENDDO
  785. ENDDO
  786. ! Determine season (summer=1, winter=2)
  787. ISN=1
  788. IF(JULDAY.LT.105.OR.JULDAY.GT.288)ISN=2
  789. IF(CEN_LAT.LT.0.0)ISN=3-ISN
  790. FOUND_LU = .TRUE.
  791. IF ( allowed_to_read ) THEN
  792. landuse_unit = 29
  793. IF ( wrf_dm_on_monitor() ) THEN
  794. OPEN(landuse_unit, FILE='LANDUSE.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
  795. IF ( ierr .NE. OPEN_OK ) THEN
  796. WRITE(message,FMT='(A)') &
  797. 'module_physics_init.F: LANDUSE_INIT: open failure for LANDUSE.TBL'
  798. CALL wrf_error_fatal ( message )
  799. END IF
  800. ENDIF
  801. ! Read info from file LANDUSE.TBL
  802. ! IF(MMINLU.EQ.'OLD ')THEN
  803. ! ISWATER=7
  804. ! ISICE=11
  805. ! ELSE IF(MMINLU.EQ.'USGS')THEN
  806. ! ISWATER=16
  807. ! ISICE=24
  808. ! ELSE IF(MMINLU.EQ.'SiB ')THEN
  809. ! ISWATER=15
  810. ! ISICE=16
  811. ! ELSE IF(MMINLU.EQ.'LW12')THEN
  812. ! ISWATER=15
  813. ! ISICE=3
  814. ! ELSE IF (MMINLU .EQ. 'MODIFIED_IGBP_MODIS_NOAH') THEN
  815. ! ISICE = 15
  816. ! ELSE
  817. ! call wrf_error_fatal ("INPUT LandUse not found: "//TRIM(MMINLU))
  818. ! ENDIF
  819. call wrf_message ( 'INPUT LandUse = "' // TRIM(MMINLU) // '"' )
  820. FOUND_LU = .FALSE.
  821. end_of_file = .FALSE.
  822. !!! BEGINNING OF 1999 LOOP
  823. 1999 CONTINUE
  824. IF ( wrf_dm_on_monitor() ) THEN
  825. READ (landuse_unit,*,END=2002)LUTYPE
  826. GOTO 2003
  827. 2002 CONTINUE
  828. CALL wrf_message( 'INPUT FILE FOR LANDUSE REACHED END OF FILE' )
  829. end_of_file = .TRUE.
  830. 2003 CONTINUE
  831. IF ( .NOT. end_of_file ) READ (landuse_unit,*)LUCATS,LUSEAS
  832. FOUND_LU = LUTYPE.EQ.MMINLU
  833. ENDIF
  834. CALL wrf_dm_bcast_bytes (end_of_file, LWORDSIZE )
  835. IF ( .NOT. end_of_file ) THEN
  836. CALL wrf_dm_bcast_string(lutype, 256)
  837. CALL wrf_dm_bcast_bytes (lucats, IWORDSIZE )
  838. CALL wrf_dm_bcast_bytes (luseas, IWORDSIZE )
  839. CALL wrf_dm_bcast_bytes (found_lu, LWORDSIZE )
  840. IF(FOUND_LU)THEN
  841. LUN=LUCATS
  842. NSN=LUSEAS
  843. IF(LUTYPE.NE.'SSIB') THEN !this is not really true for ssib lsm (fds)
  844. PRINT *, 'LANDUSE TYPE = "' // TRIM (LUTYPE) // '" FOUND', &
  845. LUCATS,' CATEGORIES',LUSEAS,' SEASONS', &
  846. ' WATER CATEGORY = ',ISWATER, &
  847. ' SNOW CATEGORY = ',ISICE
  848. ENDIF
  849. ENDIF
  850. DO ls=1,luseas
  851. if ( wrf_dm_on_monitor() ) then
  852. READ (landuse_unit,*)
  853. endif
  854. DO LC=1,LUCATS
  855. IF(found_lu)THEN
  856. IF ( wrf_dm_on_monitor() ) THEN
  857. READ (landuse_unit,*)LI,ALBD(LC,LS),SLMO(LC,LS),SFEM(LC,LS), &
  858. SFZ0(LC,LS),THERIN(LC,LS),SCFX(LC),SFHC(LC,LS)
  859. ENDIF
  860. CALL wrf_dm_bcast_bytes (LI, IWORDSIZE )
  861. IF(LC.NE.LI)CALL wrf_error_fatal ( 'module_start: MISSING LANDUSE UNIT ' )
  862. ELSE
  863. IF ( wrf_dm_on_monitor() ) THEN
  864. READ (landuse_unit,*)
  865. ENDIF
  866. ENDIF
  867. ENDDO
  868. ENDDO
  869. IF(NSN.EQ.1.AND.FOUND_LU) THEN
  870. ISN = 1
  871. END IF
  872. CALL wrf_dm_bcast_bytes (albd, max_cats * max_seas * RWORDSIZE )
  873. CALL wrf_dm_bcast_bytes (slmo, max_cats * max_seas * RWORDSIZE )
  874. CALL wrf_dm_bcast_bytes (sfem, max_cats * max_seas * RWORDSIZE )
  875. CALL wrf_dm_bcast_bytes (sfz0, max_cats * max_seas * RWORDSIZE )
  876. CALL wrf_dm_bcast_bytes (therin, max_cats * max_seas * RWORDSIZE )
  877. CALL wrf_dm_bcast_bytes (sfhc, max_cats * max_seas * RWORDSIZE )
  878. CALL wrf_dm_bcast_bytes (scfx, max_cats * RWORDSIZE )
  879. ENDIF
  880. IF(.NOT. found_lu .AND. .NOT. end_of_file ) GOTO 1999
  881. !!! END OF 1999 LOOP
  882. IF(.NOT. found_lu .OR. end_of_file )THEN
  883. CALL wrf_message ( 'LANDUSE IN INPUT FILE DOES NOT MATCH LUTABLE: TABLE NOT USED' )
  884. ENDIF
  885. E

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