PageRenderTime 74ms CodeModel.GetById 17ms 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
  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. ENDIF ! allowed_to_read
  886. IF(FOUND_LU)THEN
  887. ! Set arrays according to lu_index
  888. itf = min0(ite, ide-1)
  889. jtf = min0(jte, jde-1)
  890. IF(usemonalb)CALL wrf_message ( 'Climatological albedo is used instead of table values' )
  891. DO j = jts, jtf
  892. DO i = its, itf
  893. IS=nint(lu_index(i,j))
  894. ! only do this check on read-in data
  895. IF(allowed_to_read)THEN
  896. IF(IS.LT.0.OR.IS.GT.LUN)THEN
  897. WRITE ( wrf_err_message , * ) 'ERROR: LANDUSE OUTSIDE RANGE =',IS,' AT ',I,J,' LUN= ',LUN
  898. CALL wrf_error_fatal ( TRIM ( wrf_err_message ) )
  899. ENDIF
  900. ENDIF
  901. ! SET NO-DATA POINTS (IS=0) TO WATER
  902. IF(IS.EQ.0)THEN
  903. IS=ISWATER
  904. ENDIF
  905. IF(.NOT.usemonalb)ALBBCK(I,J)=ALBD(IS,ISN)/100.
  906. ALBEDO(I,J)=ALBBCK(I,J)
  907. IF(SNOWC(I,J) .GT. 0.5) THEN
  908. IF (usemonalb) THEN
  909. ALBEDO(I,J)=SNOALB(I,J)
  910. ELSE
  911. ALBEDO(I,J)=ALBBCK(I,J)*(1.+SCFX(IS))
  912. ENDIF
  913. ENDIF
  914. THC(I,J)=THERIN(IS,ISN)/100.
  915. Z0(I,J)=SFZ0(IS,ISN)/100.
  916. ZNT(I,J)=Z0(I,J)
  917. EMBCK(I,J)=SFEM(IS,ISN)
  918. EMISS(I,J)=EMBCK(I,J)
  919. MAVAIL(I,J)=SLMO(IS,ISN)
  920. IF(IS.NE.ISWATER)THEN
  921. XLAND(I,J)=1.0
  922. ELSE
  923. XLAND(I,J)=2.0
  924. ENDIF
  925. ! SET SEA-ICE POINTS TO LAND WITH ICE/SNOW SURFACE PROPERTIES
  926. XICEM(I,J)=XICE(I,J)
  927. IF(XICE(I,J).GE.xice_threshold)THEN
  928. XLAND(I,J)=1.0
  929. ALBBCK(I,J)=ALBD(ISICE,ISN)/100.
  930. EMBCK(I,J)=SFEM(ISICE,ISN)
  931. IF (FRACTIONAL_SEAICE == 1) THEN
  932. ! The 0.08 value is the albedo over open water.
  933. ! The 0.98 value is the emissivity over open water.
  934. ALBEDO(I,J) = ( XICE(I,J) * ALBBCK(I,J) ) + ( (1.0-XICE(I,J)) * 0.08 )
  935. EMISS(I,J) = ( XICE(I,J) * EMBCK(I,J) ) + ( (1.0-XICE(I,J)) * 0.98 )
  936. ELSE
  937. ALBEDO(I,J)=ALBBCK(I,J)
  938. EMISS(I,J)=EMBCK(I,J)
  939. ENDIF
  940. THC(I,J)=THERIN(ISICE,ISN)/100.
  941. Z0(I,J)=SFZ0(ISICE,ISN)/100.
  942. ZNT(I,J)=Z0(I,J)
  943. MAVAIL(I,J)=SLMO(ISICE,ISN)
  944. ENDIF
  945. ENDDO
  946. ENDDO
  947. ENDIF
  948. if ( wrf_dm_on_monitor() .and. allowed_to_read ) then
  949. CLOSE (landuse_unit)
  950. endif
  951. CALL wrf_debug( 100 , 'returning from of landuse_init' )
  952. ! restore LU variables from state
  953. curs = 1
  954. DO cats = 1, max_cats
  955. lu_state(curs) = SCFX(cats) ; curs = curs + 1
  956. DO seas = 1, max_seas
  957. lu_state(curs) = ALBD(cats,seas) ; curs = curs + 1
  958. lu_state(curs) = SLMO(cats,seas) ; curs = curs + 1
  959. lu_state(curs) = SFEM(cats,seas) ; curs = curs + 1
  960. lu_state(curs) = SFZ0(cats,seas) ; curs = curs + 1
  961. lu_state(curs) = SFHC(cats,seas) ; curs = curs + 1
  962. lu_state(curs) = THERIN(cats,seas) ; curs = curs + 1
  963. ENDDO
  964. ENDDO
  965. !
  966. !-- fds (07/2010)
  967. !-- SSIB's 12-category vegetation parameters are defined in module_ssib_veg
  968. !-- Data in LANDUSE.TBL is only used temporarily until the first
  969. !-- call to SSIB, and also to set water/ice points properties
  970. ! IF(MMINLU.EQ.'SSIB')THEN
  971. ! CALL init_module_ssib_veg
  972. ! CALL wrf_message ( 'READING SSIB VEGETATION PARAMETERS' )
  973. ! ENDIF
  974. !
  975. END SUBROUTINE landuse_init
  976. !=====================================================================
  977. SUBROUTINE ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW, &
  978. RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT, &
  979. levsiz,XLAT,n_ozmixm, &
  980. cldfra_old, & ! Optional
  981. ozmixm,pin, & ! Optional
  982. m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2, & ! Optional
  983. paerlev,n_aerosolc, &
  984. sfull,shalf,pptop,swrad_scat,p_top, &
  985. config_flags,restart, &
  986. allowed_to_read, start_of_simulation, &
  987. ids, ide, jds, jde, kds, kde, &
  988. ims, ime, jms, jme, kms, kme, &
  989. its, ite, jts, jte, kts, kte )
  990. !---------------------------------------------------------------------
  991. USE module_ra_rrtm , ONLY : rrtminit
  992. USE module_ra_rrtmg_lw , ONLY : rrtmg_lwinit
  993. USE module_ra_rrtmg_sw , ONLY : rrtmg_swinit
  994. USE module_ra_cam , ONLY : camradinit
  995. USE module_ra_sw , ONLY : swinit
  996. USE module_ra_gsfcsw , ONLY : gsfc_swinit
  997. USE module_ra_gfdleta , ONLY : gfdletainit
  998. #if(NMM_CORE==1)
  999. USE module_ra_hwrf , ONLY : hwrfrainit
  1000. #endif
  1001. USE module_ra_hs , ONLY : hsinit
  1002. USE module_domain
  1003. !---------------------------------------------------------------------
  1004. IMPLICIT NONE
  1005. !---------------------------------------------------------------------
  1006. INTEGER, INTENT(IN) :: id
  1007. TYPE (grid_config_rec_type) :: config_flags
  1008. LOGICAL , INTENT(IN) :: restart
  1009. LOGICAL, INTENT(IN) :: allowed_to_read
  1010. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  1011. ims, ime, jms, jme, kms, kme, &
  1012. its, ite, jts, jte, kts, kte
  1013. INTEGER , INTENT(IN) :: JULDAY,JULYR
  1014. REAL , INTENT(IN) :: DT, RADT, cen_lat, GMT, pptop, &
  1015. swrad_scat, p_top
  1016. LOGICAL, INTENT(IN) :: start_of_simulation
  1017. INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
  1018. INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
  1019. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: XLAT
  1020. REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
  1021. INTENT(INOUT) :: OZMIXM
  1022. REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
  1023. REAL, DIMENSION(paerlev), OPTIONAL, INTENT(INOUT) :: m_hybi
  1024. REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
  1025. INTENT(INOUT) :: aerosolc_1, aerosolc_2
  1026. REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
  1027. INTEGER , INTENT(INOUT) :: STEPRA
  1028. INTEGER :: isn
  1029. REAL , DIMENSION( kms:kme ) , INTENT(IN) :: sfull, shalf
  1030. REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  1031. RTHRATEN, &
  1032. RTHRATENLW, &
  1033. RTHRATENSW, &
  1034. CLDFRA
  1035. REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
  1036. CLDFRA_OLD
  1037. REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: EMISS
  1038. LOGICAL :: etalw = .false.
  1039. LOGICAL :: hwrflw= .false.
  1040. LOGICAL :: camlw = .false.
  1041. ! LOGICAL :: etamp = .false.
  1042. LOGICAL :: acswalloc = .false.
  1043. LOGICAL :: aclwalloc = .false.
  1044. integer :: month,iday
  1045. INTEGER :: i, j, k, itf, jtf, ktf
  1046. !---------------------------------------------------------------------
  1047. jtf=min0(jte,jde-1)
  1048. ktf=min0(kte,kde-1)
  1049. itf=min0(ite,ide-1)
  1050. !---------------------------------------------------------------------
  1051. !-- calculate radiation time step
  1052. STEPRA = nint(RADT*60./DT)
  1053. STEPRA = max(STEPRA,1)
  1054. !-- initialization
  1055. IF(start_of_simulation)THEN
  1056. DO j=jts,jtf
  1057. DO k=kts,ktf
  1058. DO i=its,itf
  1059. RTHRATEN(i,k,j)=0.
  1060. RTHRATENLW(i,k,j)=0.
  1061. RTHRATENSW(i,k,j)=0.
  1062. CLDFRA(i,k,j)=0.
  1063. ENDDO
  1064. ENDDO
  1065. ENDDO
  1066. if( present(cldfra_old) ) then
  1067. DO j=jts,jtf
  1068. DO k=kts,ktf
  1069. DO i=its,itf
  1070. cldfra_old(i,k,j) = 0.
  1071. ENDDO
  1072. ENDDO
  1073. ENDDO
  1074. end if
  1075. ENDIF
  1076. !-- find out which microphysics option is used first
  1077. ! mp_select: SELECT CASE(config_flags%mp_physics)
  1078. !
  1079. ! CASE (ETAMPNEW)
  1080. ! etamp = .true.
  1081. !
  1082. ! END SELECT mp_select
  1083. !-- chose long wave radiation scheme
  1084. lwrad_select: SELECT CASE(config_flags%ra_lw_physics)
  1085. CASE (RRTMSCHEME)
  1086. CALL rrtminit( &
  1087. p_top, allowed_to_read , &
  1088. ids, ide, jds, jde, kds, kde, &
  1089. ims, ime, jms, jme, kms, kme, &
  1090. its, ite, jts, jte, kts, kte )
  1091. CASE (CAMLWSCHEME)
  1092. #ifdef MAC_KLUDGE
  1093. CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
  1094. #endif
  1095. IF ( PRESENT( OZMIXM ) .AND. PRESENT( PIN ) .AND. &
  1096. PRESENT(M_PS_1) .AND. PRESENT(M_PS_2) .AND. &
  1097. PRESENT(M_HYBI) .AND. PRESENT(AEROSOLC_1) &
  1098. .AND. PRESENT(AEROSOLC_2)) THEN
  1099. CALL camradinit( &
  1100. R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
  1101. ozmixm,pin,levsiz,XLAT,n_ozmixm, &
  1102. m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
  1103. paerlev, n_aerosolc, &
  1104. ids, ide, jds, jde, kds, kde, &
  1105. ims, ime, jms, jme, kms, kme, &
  1106. its, ite, jts, jte, kts, kte )
  1107. ELSE
  1108. CALL wrf_error_fatal ( 'arguments not present for calling cam radiation' )
  1109. ENDIF
  1110. camlw = .true.
  1111. aclwalloc = .true.
  1112. CASE (RRTMG_LWSCHEME)
  1113. CALL rrtmg_lwinit( &
  1114. p_top, allowed_to_read , &
  1115. ids, ide, jds, jde, kds, kde, &
  1116. ims, ime, jms, jme, kms, kme, &
  1117. its, ite, jts, jte, kts, kte )
  1118. aclwalloc = .true.
  1119. CASE (GFDLLWSCHEME)
  1120. CALL nl_get_start_month(id,month)
  1121. CALL nl_get_start_day(id,iday)
  1122. CALL gfdletainit(emiss,sfull,shalf,pptop, &
  1123. julyr,month,iday,gmt, &
  1124. config_flags,allowed_to_read, &
  1125. ids, ide, jds, jde, kds, kde, &
  1126. ims, ime, jms, jme, kms, kme, &
  1127. its, ite, jts, jte, kts, kte )
  1128. etalw = .true.
  1129. #if(NMM_CORE==1)
  1130. CASE (HWRFLWSCHEME)
  1131. CALL nl_get_start_month(id,month)
  1132. CALL nl_get_start_day(id,iday)
  1133. ! test this with standard jul-day calls
  1134. ! CALL nl_get_start_year(id,start_year)
  1135. ! CALL nl_get_start_month(id,start_month)
  1136. ! CALL nl_get_start_day(id,start_day)
  1137. ! CALL nl_get_start_hour(id,start_hour)
  1138. ! CALL nl_get_start_minute(id,start_minute)
  1139. ! CALL nl_get_start_second(id,start_second)
  1140. ! CALL jdn_sec(day_in_sec,start_year,start_month,start_day,0,0,0)
  1141. ! CALL jdn_sec(day_in_sec_ref,start_year,1,1,0,0,0)
  1142. ! julyr_start=start_year
  1143. ! julday_start=(day_in_sec-day_in_sec_ref)/(3600.*24.)+1
  1144. ! gmt_start=start_hour+real(start_minute)/60.+real(start_second)/3600.
  1145. CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
  1146. ! CALL hwrfrainit(sfull,shalf,pptop,JULYR_start,MONTH,IDAY,GMT_start,&
  1147. config_flags,allowed_to_read , &
  1148. kds, kde, kms, kme, kts, kte )
  1149. hwrflw = .true.
  1150. #endif
  1151. CASE (HELDSUAREZ)
  1152. CALL hsinit(RTHRATEN,restart, &
  1153. ids, ide, jds, jde, kds, kde, &
  1154. ims, ime, jms, jme, kms, kme, &
  1155. its, ite, jts, jte, kts, kte )
  1156. CASE (FLGLWSCHEME)
  1157. CASE DEFAULT
  1158. END SELECT lwrad_select
  1159. !-- initialize short wave radiation scheme
  1160. swrad_select: SELECT CASE(config_flags%ra_sw_physics)
  1161. CASE (SWRADSCHEME)
  1162. CALL swinit( &
  1163. swrad_scat, &
  1164. allowed_to_read , &
  1165. ids, ide, jds, jde, kds, kde, &
  1166. ims, ime, jms, jme, kms, kme, &
  1167. its, ite, jts, jte, kts, kte )
  1168. CASE (CAMSWSCHEME)
  1169. #ifdef MAC_KLUDGE
  1170. CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
  1171. #endif
  1172. IF(.not.camlw)THEN
  1173. CALL camradinit( &
  1174. R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
  1175. ozmixm,pin,levsiz,XLAT,n_ozmixm, &
  1176. m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
  1177. paerlev, n_aerosolc, &
  1178. ids, ide, jds, jde, kds, kde, &
  1179. ims, ime, jms, jme, kms, kme, &
  1180. its, ite, jts, jte, kts, kte )
  1181. ENDIF
  1182. acswalloc = .true.
  1183. CASE (GSFCSWSCHEME)
  1184. CALL gsfc_swinit(cen_lat, allowed_to_read )
  1185. CASE (RRTMG_SWSCHEME)
  1186. CALL rrtmg_swinit( &
  1187. allowed_to_read , &
  1188. ids, ide, jds, jde, kds, kde, &
  1189. ims, ime, jms, jme, kms, kme, &
  1190. its, ite, jts, jte, kts, kte )
  1191. acswalloc = .true.
  1192. CASE (GFDLSWSCHEME)
  1193. IF(.not.etalw)THEN
  1194. CALL nl_get_start_month(id,month)
  1195. CALL nl_get_start_day(id,iday)
  1196. CALL gfdletainit(emiss,sfull,shalf,pptop, &
  1197. julyr,month,iday,gmt, &
  1198. config_flags,allowed_to_read, &
  1199. ids, ide, jds, jde, kds, kde, &
  1200. ims, ime, jms, jme, kms, kme, &
  1201. its, ite, jts, jte, kts, kte )
  1202. ENDIF
  1203. #if(NMM_CORE==1)
  1204. CASE (HWRFSWSCHEME)
  1205. IF(.not.hwrflw)THEN
  1206. CALL nl_get_start_month(id,month)
  1207. CALL nl_get_start_day(id,iday)
  1208. CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
  1209. config_flags,allowed_to_read, &
  1210. kds, kde, kms, kme, kts, kte )
  1211. ENDIF
  1212. #endif
  1213. CASE (FLGSWSCHEME)
  1214. CASE DEFAULT
  1215. END SELECT swrad_select
  1216. #if ( EM_CORE == 1 )
  1217. ! test for conditionally allocated arrays when using bucket_J
  1218. IF(config_flags%bucket_J .gt. 0.0)THEN
  1219. IF(.not. (acswalloc .and. aclwalloc))THEN
  1220. CALL wrf_error_fatal ( 'Need CAM or RRTMG radiation for bucket_J option')
  1221. ENDIF
  1222. ENDIF
  1223. #endif
  1224. END SUBROUTINE ra_init
  1225. SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
  1226. RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
  1227. config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
  1228. num_soil_layers,TKE_PBL,mfshconv, &
  1229. massflux_EDKF, entr_EDKF, detr_EDKF, &
  1230. thl_up, thv_up, rt_up, &
  1231. rv_up, rc_up, u_up, v_up, &
  1232. frac_up, &
  1233. EXCH_H,VEGFRA, &
  1234. SNOW,SNOWC, CANWAT,SMSTAV, &
  1235. SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
  1236. IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,mavail, &
  1237. SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
  1238. #if ( NMM_CORE == 1 )
  1239. Z0,XLAND,XICE, &
  1240. #else
  1241. ZNT,XLAND,XICE, &
  1242. #endif
  1243. SFCEVP,GRDFLX, &
  1244. MMINLU, &
  1245. ISNOWXY, ZSNSOXY, TSNOXY, &
  1246. SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY, &
  1247. CANLIQXY, EAHXY, TAHXY, CMXY, &
  1248. CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY, &
  1249. WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY,&
  1250. STMASSXY, WOODXY, STBLCPXY, FASTCPXY, &
  1251. XSAIXY, &
  1252. T2MVXY, T2MBXY ,CHSTARXY, &
  1253. allowed_to_read, &
  1254. start_of_simulation, &
  1255. te_temf,cf3d_temf,wm_temf, & ! WA
  1256. ! num_roof_layers,num_wall_layers,num_road_layers,& !Optional urban
  1257. DZR, DZB, DZG, & !Optional urban
  1258. TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
  1259. XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
  1260. TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
  1261. SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, & !Optional urban
  1262. TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
  1263. SF_URBAN_PHYSICS, & !Optional urban
  1264. NUM_URBAN_LAYERS, & !Optional multi-layer urban
  1265. TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
  1266. TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
  1267. TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
  1268. TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
  1269. SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
  1270. SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
  1271. SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
  1272. SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
  1273. SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
  1274. A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
  1275. A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
  1276. B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
  1277. DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
  1278. ids, ide, jds, jde, kds, kde, &
  1279. ims, ime, jms, jme, kms, kme, &
  1280. its, ite, jts, jte, kts, kte, &
  1281. ACHFX,ACLHF,ACGRDFLX, &
  1282. oml_hml0, omlcall, & !Optional oml
  1283. TML,T0ML,HML,H0ML,HUML,HVML,TMOML ) !Optional oml
  1284. !--------------------------------------------------------------------
  1285. USE module_sf_sfclay
  1286. USE module_sf_sfclayrev
  1287. USE module_sf_slab
  1288. USE module_sf_pxsfclay
  1289. USE module_bl_ysu
  1290. USE module_bl_mrf
  1291. USE module_bl_gfs
  1292. USE module_bl_gfs2011, only : gfs2011init
  1293. USE module_bl_acm
  1294. USE module_sf_myjsfc
  1295. USE module_sf_qnsesfc
  1296. USE module_sf_noahdrv
  1297. USE module_sf_noahmpdrv
  1298. USE module_sf_urban
  1299. USE module_sf_bep !BEP
  1300. USE module_sf_bep_bem
  1301. USE module_sf_ruclsm
  1302. USE module_sf_pxlsm
  1303. USE module_sf_oml
  1304. USE module_bl_myjpbl
  1305. USE module_bl_myjurb
  1306. USE module_bl_boulac
  1307. USE module_bl_camuwpbl_driver, ONLY : camuwpblinit
  1308. USE module_bl_qnsepbl
  1309. USE module_bl_qnsepbl09
  1310. USE module_bl_mfshconvpbl
  1311. #if ( EM_CORE == 1 )
  1312. USE module_bl_mynn
  1313. USE module_bl_temf
  1314. USE module_sf_temfsfclay
  1315. USE module_sf_mynn
  1316. #endif
  1317. #if (NMM_CORE == 1)
  1318. USE module_sf_gfdl
  1319. #endif
  1320. !--------------------------------------------------------------------
  1321. IMPLICIT NONE
  1322. !--------------------------------------------------------------------
  1323. TYPE (grid_config_rec_type) :: config_flags
  1324. LOGICAL , INTENT(IN) :: restart
  1325. LOGICAL, INTENT(IN) :: FNDSOILW, FNDSNOWH
  1326. LOGICAL, INTENT(IN) :: RDMAXALB
  1327. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  1328. ims, ime, jms, jme, kms, kme, &
  1329. its, ite, jts, jte, kts, kte
  1330. INTEGER , INTENT(IN) :: num_soil_layers
  1331. INTEGER , INTENT(IN) :: SF_URBAN_PHYSICS
  1332. REAL , INTENT(IN) :: DT, BLDT
  1333. INTEGER , INTENT(INOUT) :: STEPBL
  1334. REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), &
  1335. INTENT(OUT) :: SMFR3D
  1336. REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
  1337. INTENT(INOUT) :: SMOIS,SH2O,TSLB
  1338. REAL, DIMENSION( ims:ime, jms:jme ) , &
  1339. INTENT(INOUT) :: SNOW, &
  1340. SNOWH, &
  1341. SNOWC, &
  1342. SNOALB, &
  1343. CANWAT, &
  1344. MAVAIL, &
  1345. SMSTAV, &
  1346. SMSTOT, &
  1347. SFCRUNOFF, &
  1348. UDRUNOFF, &
  1349. ACSNOW, &
  1350. VEGFRA, &
  1351. ACSNOM, &
  1352. SFCEVP, &
  1353. GRDFLX, &
  1354. UST, &
  1355. #if ( NMM_CORE == 1 )
  1356. Z0, &
  1357. #else
  1358. ZNT, &
  1359. #endif
  1360. XLAND, &
  1361. XICE
  1362. INTEGER, DIMENSION( ims:ime, jms:jme ) , &
  1363. INTENT(INOUT) :: IVGTYP, &
  1364. ISLTYP, &
  1365. LOWLYR
  1366. REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
  1367. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  1368. RUBLTEN, &
  1369. RVBLTEN, &
  1370. EXCH_H, &
  1371. RTHBLTEN, &
  1372. RQVBLTEN, &
  1373. RQCBLTEN, &
  1374. RQIBLTEN, &
  1375. TKE_PBL
  1376. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT), OPTIONAL :: &
  1377. massflux_EDKF, entr_EDKF, detr_EDKF &
  1378. ,thl_up, thv_up, rt_up &
  1379. ,rv_up, rc_up, u_up, v_up &
  1380. ,frac_up
  1381. INTEGER, INTENT(IN) :: mfshconv ! WRF JP
  1382. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK
  1383. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
  1384. CHARACTER(LEN=*), INTENT(IN) :: MMINLU
  1385. LOGICAL, INTENT(IN) :: allowed_to_read
  1386. INTEGER, INTENT(IN) :: ISURBAN
  1387. INTEGER :: isn, isfc
  1388. INTEGER :: k
  1389. REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
  1390. INTENT(OUT) :: te_temf, cf3d_temf !WA
  1391. REAL, OPTIONAL, DIMENSION( ims:ime , jms:jme ) , &
  1392. INTENT(OUT) :: wm_temf
  1393. !Noah-MP
  1394. INTEGER, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ISNOWXY
  1395. REAL, OPTIONAL, DIMENSION(ims:ime,-2:num_soil_layers, jms:jme) :: ZSNSOXY
  1396. REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: TSNOXY
  1397. REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNICEXY
  1398. REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNLIQXY
  1399. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TVXY
  1400. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TGXY
  1401. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANICEXY
  1402. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANLIQXY
  1403. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: EAHXY
  1404. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TAHXY
  1405. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CMXY
  1406. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHXY
  1407. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FWETXY
  1408. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: SNEQVOXY
  1409. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ALBOLDXY
  1410. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: QSNOWXY
  1411. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WSLAKEXY
  1412. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ZWTXY
  1413. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WAXY
  1414. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WTXY
  1415. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: LFMASSXY
  1416. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: RTMASSXY
  1417. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STMASSXY
  1418. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WOODXY
  1419. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STBLCPXY
  1420. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FASTCPXY
  1421. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: XSAIXY
  1422. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MVXY
  1423. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MBXY
  1424. REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHSTARXY
  1425. !URBAN
  1426. ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !Optional urban
  1427. ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !Optional urban
  1428. ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !Optional urban
  1429. REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !Optional urban
  1430. REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !Optional urban
  1431. REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !Optional urban
  1432. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !Optional urban
  1433. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !Optional urban
  1434. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !Optional urban
  1435. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !Optional urban
  1436. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !Optional urban
  1437. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !Optional urban
  1438. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !Optional urban
  1439. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !Optional urban
  1440. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !Optional urban
  1441. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !Optional urban
  1442. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !Optional urban
  1443. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !Optional urban
  1444. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !Optional urban
  1445. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !Optional urban
  1446. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !Optional urban
  1447. INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !Optional urban
  1448. ! REAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
  1449. ! REAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
  1450. ! REAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
  1451. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
  1452. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
  1453. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
  1454. INTEGER , INTENT(IN) :: num_urban_layers
  1455. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TRB_URB4D !Optional UCM
  1456. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1_URB4D !Optional UCM
  1457. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2_URB4D !Optional UCM
  1458. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGB_URB4D !Optional UCM
  1459. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TLEV_URB3D !Optional UCM
  1460. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: QLEV_URB3D !Optional UCM
  1461. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
  1462. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
  1463. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
  1464. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
  1465. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
  1466. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
  1467. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
  1468. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
  1469. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
  1470. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
  1471. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
  1472. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW1_URB3D !Optional UCM
  1473. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW2_URB3D !Optional UCM
  1474. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFR_URB3D !Optional UCM
  1475. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFG_URB3D !Optional UCM
  1476. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
  1477. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
  1478. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
  1479. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
  1480. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
  1481. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
  1482. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
  1483. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
  1484. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
  1485. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
  1486. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
  1487. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
  1488. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme),INTENT(INOUT) :: SF_BEP
  1489. REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
  1490. REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
  1491. ACHFX,ACLHF,ACGRDFLX
  1492. ! Optional OML variables
  1493. REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
  1494. TML,T0ML,HML,H0ML,HUML,HVML,TMOML
  1495. INTEGER, OPTIONAL, INTENT(IN) :: omlcall
  1496. REAL, OPTIONAL, INTENT(IN) :: oml_hml0
  1497. LOGICAL, INTENT(IN) :: start_of_simulation
  1498. INTEGER :: i,j
  1499. #if ( EM_CORE == 1 )
  1500. !local mynn
  1501. INTEGER :: mynn_closure_level
  1502. #endif
  1503. !-- calculate pbl time step
  1504. STEPBL = nint(BLDT*60./DT)
  1505. STEPBL = max(STEPBL,1)
  1506. !-- initialization
  1507. IF(PRESENT(ACHFX))THEN
  1508. IF(.not.restart)THEN
  1509. DO j=jts,jte
  1510. DO i=its,ite
  1511. ACHFX(i,j)=0.
  1512. ACLHF(i,j)=0.
  1513. ACGRDFLX(i,j)=0.
  1514. SFCEVP(i,j)=0.
  1515. ENDDO
  1516. ENDDO
  1517. ENDIF
  1518. ENDIF
  1519. !-- initialize surface layer scheme
  1520. sfclay_select: SELECT CASE(config_flags%sf_sfclay_physics)
  1521. CASE (SFCLAYSCHEME)
  1522. CALL sfclayinit( allowed_to_read )
  1523. isfc = 1
  1524. CASE (SFCLAYREVSCHEME)
  1525. ! CALL sfclayinit( allowed_to_read )
  1526. isfc = 1
  1527. CASE (PXSFCSCHEME)
  1528. CALL pxsfclayinit( allowed_to_read )
  1529. isfc = 7
  1530. CASE (MYJSFCSCHEME)
  1531. CALL myjsfcinit(LOWLYR,UST, &
  1532. #if ( NMM_CORE == 1 )
  1533. Z0, &
  1534. #else
  1535. ZNT, &
  1536. #endif
  1537. XLAND,XICE, &
  1538. IVGTYP,restart, &
  1539. allowed_to_read , &
  1540. ids, ide, jds, jde, kds, kde, &
  1541. ims, ime, jms, jme, kms, kme, &
  1542. its, ite, jts, jte, kts, kte )
  1543. isfc = 2
  1544. CASE (QNSESFCSCHEME)
  1545. CALL qnsesfcinit(LOWLYR,UST, &
  1546. #if ( NMM_CORE == 1 )
  1547. Z0, &
  1548. #else
  1549. ZNT, &
  1550. #endif
  1551. XLAND,XICE, &
  1552. IVGTYP,restart, &
  1553. allowed_to_read , &
  1554. ids, ide, jds, jde, kds, kde, &
  1555. ims, ime, jms, jme, kms, kme, &
  1556. its, ite, jts, jte, kts, kte )
  1557. isfc = 4
  1558. CASE (GFSSFCSCHEME)
  1559. CALL myjsfcinit(LOWLYR,UST, &
  1560. #if ( NMM_CORE == 1 )
  1561. Z0, &
  1562. #else
  1563. ZNT, &
  1564. #endif
  1565. XLAND,XICE, &
  1566. IVGTYP,restart, &
  1567. allowed_to_read , &
  1568. ids, ide, jds, jde, kds, kde, &
  1569. ims, ime, jms, jme, kms, kme, &
  1570. its, ite, jts, jte, kts, kte )
  1571. isfc = 2
  1572. #if (NMM_CORE==1)
  1573. CASE (GFDLSFCSCHEME)
  1574. CALL myjsfcinit(LOWLYR,UST, &
  1575. Z0, &
  1576. XLAND,XICE, &
  1577. IVGTYP,restart, &
  1578. allowed_to_read , &
  1579. ids, ide, jds, jde, kds, kde, &
  1580. ims, ime, jms, jme, kms, kme, &
  1581. its, ite, jts, jte, kts, kte )
  1582. isfc = 2
  1583. #endif
  1584. #if ( EM_CORE == 1 )
  1585. !mynn
  1586. CASE (MYNNSFCSCHEME)
  1587. CALL mynn_sf_init_driver(allowed_to_read)
  1588. isfc=5
  1589. ! isfc=3
  1590. CASE (TEMFSFCSCHEME)
  1591. CALL wrf_debug( 100, 'calling temfsfclayinit' )
  1592. CALL temfsfclayinit( restart, allowed_to_read , &
  1593. wm_temf, &
  1594. ids, ide, jds, jde, kds, kde, &
  1595. ims, ime, jms, jme, kms, kme, &
  1596. its, ite, jts, jte, kts, kte )
  1597. #endif
  1598. CASE DEFAULT
  1599. END SELECT sfclay_select
  1600. !-- initialize surface scheme
  1601. sfc_select: SELECT CASE(config_flags%sf_surface_physics)
  1602. CASE (SLABSCHEME)
  1603. CALL slabinit(TSK,TMN, &
  1604. TSLB,ZS,DZS,num_soil_layers, &
  1605. allowed_to_read ,start_of_simulation ,&
  1606. ids, ide, jds, jde, kds, kde, &
  1607. ims, ime, jms, jme, kms, kme, &
  1608. its, ite, jts, jte, kts, kte )
  1609. #if (NMM_CORE == 1)
  1610. CASE (GFDLSLAB)
  1611. CALL hwrfsfcinit(isn,XICE,VEGFRA,SNOW,SNOWC, CANWAT,SMSTAV, &
  1612. SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW, &
  1613. ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,DZS,SFCEVP, &
  1614. TMN, &
  1615. num_soil_layers, &
  1616. allowed_to_read , &
  1617. ids,ide, jds,jde, kds,kde, &
  1618. ims,ime, jms,jme, kms,kme, &
  1619. its,ite, jts,jte, kts,kte )
  1620. #endif
  1621. CASE (LSMSCHEME)
  1622. CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV, &
  1623. SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW, &
  1624. ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
  1625. MMINLU, &
  1626. SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB, &
  1627. num_soil_layers, restart, &
  1628. allowed_to_read , &
  1629. ids,ide, jds,jde, kds,kde, &
  1630. ims,ime, jms,jme, kms,kme, &
  1631. its,ite, jts,jte, kts,kte )
  1632. !URBAN
  1633. IF ((SF_URBAN_PHYSICS.eq.1).OR.(SF_URBAN_PHYSICS.EQ.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
  1634. IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN
  1635. CALL urban_param_init(DZR,DZB,DZG,num_soil_layers, & !urban
  1636. sf_urban_physics)
  1637. ! num_roof_layers,num_wall_layers,road_soil_layers) !urban
  1638. CALL urban_var_init(ISURBAN,TSK,TSLB,TMN,IVGTYP, & !urban
  1639. ims,ime,jms,jme,kms,kme,num_soil_layers, & !urban
  1640. ! num_roof_layers,num_wall_layers,num_road_layers, & !urban
  1641. restart,sf_urban_physics, & !urban
  1642. XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !urban
  1643. TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !urban
  1644. TRL_URB3D,TBL_URB3D,TGL_URB3D, & !urban
  1645. SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, TS_URB2D, & !urban
  1646. num_urban_layers, & !urban
  1647. TRB_URB4D,TW1_URB4D,TW2_URB4D,TGB_URB4D, & !urban
  1648. TLEV_URB3D,QLEV_URB3D, & !urban
  1649. TW1LEV_URB3D,TW2LEV_URB3D, & !urban
  1650. TGLEV_URB3D,TFLEV_URB3D, & !urban
  1651. SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !urban
  1652. SFVENT_URB3D,LFVENT_URB3D, & !urban
  1653. SFWIN1_URB3D,SFWIN2_URB3D, & !urban
  1654. SFW1_URB3D,SFW2_URB3D,SFR_URB3D,SFG_URB3D, & !urban
  1655. A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !multi-layer urban
  1656. A_E_BEP,B_U_BEP,B_V_BEP, & !multi-layer urban
  1657. B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !multi-layer urban
  1658. DL_U_BEP,SF_BEP,VL_BEP, & !multi-layer urban
  1659. FRC_URB2D, UTYPE_URB2D) !urban
  1660. ELSE
  1661. CALL wrf_error_fatal ( 'arguments not present for calling urban model' )
  1662. ENDIF
  1663. ENDIF
  1664. !
  1665. CASE (NOAHMPSCHEME)
  1666. CALL NOAHMP_INIT(MMINLU, SNOW,SNOWH,CANWAT,ISLTYP, &
  1667. TSLB,SMOIS,SH2O,DZS, FNDSOILW, FNDSNOWH, &
  1668. TSK,isnowxy ,tvxy ,tgxy ,canicexy , &
  1669. canliqxy ,eahxy ,tahxy ,cmxy ,chxy , &
  1670. fwetxy ,sneqvoxy ,alboldxy ,qsnowxy ,wslakexy ,zwtxy ,waxy , &
  1671. wtxy ,tsnoxy ,zsnsoxy ,snicexy ,snliqxy ,lfmassxy ,rtmassxy , &
  1672. stmassxy ,woodxy ,stblcpxy ,fastcpxy ,xsaixy , &
  1673. t2mvxy ,t2mbxy ,chstarxy , &
  1674. num_soil_layers, restart, &
  1675. allowed_to_read , &
  1676. ids,ide, jds,jde, kds,kde, &
  1677. ims,ime, jms,jme, kms,kme, &
  1678. its,ite, jts,jte, kts,kte )
  1679. CASE (RUCLSMSCHEME)
  1680. ! if(isfc .ne. 2)CALL wrf_error_fatal &
  1681. ! ( 'module_physics_init: use myjsfc and myjpbl scheme for this lsm option' )
  1682. CALL ruclsminit( SH2O,SMFR3D,TSLB,SMOIS,ISLTYP,IVGTYP,MMINLU,XICE, &
  1683. mavail,num_soil_layers, config_flags%iswater, &
  1684. #if (NMM_CORE == 1)
  1685. config_flags%isice, z0, restart, &
  1686. #else
  1687. config_flags%isice, znt, restart, &
  1688. #endif
  1689. allowed_to_read , &
  1690. ids,ide, jds,jde, kds,kde, &
  1691. ims,ime, jms,jme, kms,kme, &
  1692. its,ite, jts,jte, kts,kte )
  1693. CASE (PXLSMSCHEME)
  1694. if(config_flags%num_land_cat .ne. 24) CALL wrf_error_fatal &
  1695. ( 'module_physics_init: 24 cat USGS must be used with PX LSM option' )
  1696. CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV, &
  1697. SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW, &
  1698. ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
  1699. MMINLU, &
  1700. SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB, &
  1701. num_soil_layers, restart, &
  1702. allowed_to_read , &
  1703. ids,ide, jds,jde, kds,kde, &
  1704. ims,ime, jms,jme, kms,kme, &
  1705. its,ite, jts,jte, kts,kte )
  1706. !--------------fds (06/2010)-----------------------------------
  1707. CASE (SSIBSCHEME)
  1708. !SSiB only works with sfclay and YSU schemes. Check this here!
  1709. if(isfc .ne. 1)CALL wrf_error_fatal &
  1710. ( 'module_physics_init: use sfclay scheme with SSiB' )
  1711. if(config_flags%bl_pbl_physics .ne. 1)CALL wrf_error_fatal &
  1712. ( 'module_physics_init: use ysu scheme with SSiB' )
  1713. ! Add radiation scheme 4 (RRTMg) for SSiB, By Zhenxin 2011-06-20 ************************
  1714. if(config_flags%ra_lw_physics .eq. 2 .or. config_flags%ra_lw_physics .gt. 4)CALL wrf_error_fatal &
  1715. ( 'module_physics_init: SSiB only works with rrtm, cam scheme or rrtmg scheme (lw_phys=1,3,4)' )
  1716. if(config_flags%ra_sw_physics .eq. 2 .or. config_flags%ra_sw_physics .gt. 4)CALL wrf_error_fatal &
  1717. ( 'module_physics_init: SSiB only works with rrtm, cam scheme or rrtmg scheme (sw_phys=1,3,4)' )
  1718. ! End of Adding radiation scheme 4 (RRTMg) for SSiB, By Zhenxin 2011-06-20 **************
  1719. !--------------------------------------------------------------
  1720. CASE DEFAULT
  1721. END SELECT sfc_select
  1722. IF(PRESENT(OMLCALL))THEN
  1723. IF (omlcall .EQ. 1) THEN
  1724. CALL omlinit(oml_hml0, tsk, &
  1725. tml,t0ml,hml,h0ml,huml,hvml,tmoml, &
  1726. allowed_to_read, start_of_simulation, &
  1727. ids,ide, jds,jde, kds,kde, &
  1728. ims,ime, jms,jme, kms,kme, &
  1729. its,ite, jts,jte, kts,kte )
  1730. ENDIF
  1731. ENDIF
  1732. !-- initialize pbl scheme
  1733. pbl_select: SELECT CASE(config_flags%bl_pbl_physics)
  1734. CASE (YSUSCHEME)
  1735. if(isfc .ne. 1)CALL wrf_error_fatal &
  1736. ( 'module_physics_init: use sfclay scheme for this pbl option' )
  1737. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
  1738. ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
  1739. CALL ysuinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1740. RQCBLTEN,RQIBLTEN,P_QI, &
  1741. PARAM_FIRST_SCALAR, &
  1742. restart, &
  1743. allowed_to_read , &
  1744. ids, ide, jds, jde, kds, kde, &
  1745. ims, ime, jms, jme, kms, kme, &
  1746. its, ite, jts, jte, kts, kte )
  1747. CASE (MRFSCHEME)
  1748. if(isfc .ne. 1)CALL wrf_error_fatal &
  1749. ( 'module_physics_init: use sfclay scheme for this pbl option' )
  1750. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
  1751. ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
  1752. CALL mrfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1753. RQCBLTEN,RQIBLTEN,P_QI, &
  1754. PARAM_FIRST_SCALAR, &
  1755. restart, &
  1756. allowed_to_read , &
  1757. ids, ide, jds, jde, kds, kde, &
  1758. ims, ime, jms, jme, kms, kme, &
  1759. its, ite, jts, jte, kts, kte )
  1760. CASE (ACMPBLSCHEME)
  1761. if(isfc .ne. 1 .and. isfc .ne. 7)CALL wrf_error_fatal &
  1762. ( 'module_physics_init: use sfclay or pxsfc scheme for this pbl option' )
  1763. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
  1764. ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
  1765. CALL acminit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1766. RQCBLTEN,RQIBLTEN,P_QI, &
  1767. PARAM_FIRST_SCALAR, &
  1768. restart, &
  1769. allowed_to_read , &
  1770. ids, ide, jds, jde, kds, kde, &
  1771. ims, ime, jms, jme, kms, kme, &
  1772. its, ite, jts, jte, kts, kte )
  1773. CASE (GFSSCHEME)
  1774. if(isfc .ne. 2)CALL wrf_error_fatal &
  1775. ( 'module_physics_init: use myjsfc scheme for this pbl option' )
  1776. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
  1777. ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
  1778. CALL gfsinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1779. RQCBLTEN,RQIBLTEN,P_QI, &
  1780. PARAM_FIRST_SCALAR, &
  1781. restart, &
  1782. allowed_to_read , &
  1783. ids, ide, jds, jde, kds, kde, &
  1784. ims, ime, jms, jme, kms, kme, &
  1785. its, ite, jts, jte, kts, kte )
  1786. #if (NMM_CORE == 1)
  1787. CASE (GFS2011SCHEME)
  1788. if(isfc .ne. 2)CALL wrf_error_fatal &
  1789. ( 'module_physics_init: use myjsfc scheme for this pbl option' )
  1790. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
  1791. ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
  1792. CALL gfs2011init(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,&
  1793. RQCBLTEN,RQIBLTEN,P_QI, &
  1794. PARAM_FIRST_SCALAR, &
  1795. restart, &
  1796. allowed_to_read , &
  1797. ids, ide, jds, jde, kds, kde, &
  1798. ims, ime, jms, jme, kms, kme, &
  1799. its, ite, jts, jte, kts, kte )
  1800. #endif
  1801. CASE (MYJPBLSCHEME)
  1802. if(isfc .ne. 2)CALL wrf_error_fatal &
  1803. ( 'module_physics_init: use myjsfc scheme for this pbl option' )
  1804. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
  1805. CALL myjurbinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1806. TKE_PBL,EXCH_H,restart, &
  1807. allowed_to_read , &
  1808. ids, ide, jds, jde, kds, kde, &
  1809. ims, ime, jms, jme, kms, kme, &
  1810. its, ite, jts, jte, kts, kte )
  1811. ELSE
  1812. CALL myjpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1813. TKE_PBL,EXCH_H,restart, &
  1814. allowed_to_read , &
  1815. ids, ide, jds, jde, kds, kde, &
  1816. ims, ime, jms, jme, kms, kme, &
  1817. its, ite, jts, jte, kts, kte )
  1818. END IF
  1819. CASE (QNSEPBLSCHEME)
  1820. if(isfc .ne. 4)CALL wrf_error_fatal &
  1821. ( 'module_physics_init: use qnsesfc scheme for this pbl option' )
  1822. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
  1823. ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
  1824. CALL qnsepblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1825. TKE_PBL,EXCH_H,restart, &
  1826. allowed_to_read , &
  1827. ids, ide, jds, jde, kds, kde, &
  1828. ims, ime, jms, jme, kms, kme, &
  1829. its, ite, jts, jte, kts, kte )
  1830. ! IF ( PRESENT (mfshconv) ) THEN
  1831. if (mfshconv.EQ.1) &
  1832. CALL mfshconvpblinit( massflux_EDKF, entr_EDKF, detr_EDKF &
  1833. ,thl_up, thv_up, rt_up &
  1834. ,rv_up, rc_up, u_up, v_up &
  1835. ,frac_up, restart, &
  1836. allowed_to_read , &
  1837. ids, ide, jds, jde, kds, kde, &
  1838. ims, ime, jms, jme, kms, kme, &
  1839. its, ite, jts, jte, kts, kte )
  1840. ! ENDIF
  1841. CASE (QNSEPBL09SCHEME)
  1842. if(isfc .ne. 4)CALL wrf_error_fatal &
  1843. ( 'module_physics_init: use qnsesfc scheme for this pbl option' )
  1844. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
  1845. ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
  1846. CALL qnsepblinit09(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1847. TKE_PBL,EXCH_H,restart, &
  1848. allowed_to_read , &
  1849. ids, ide, jds, jde, kds, kde, &
  1850. ims, ime, jms, jme, kms, kme, &
  1851. its, ite, jts, jte, kts, kte )
  1852. #if (NMM_CORE != 1)
  1853. CASE (BOULACSCHEME)
  1854. if(isfc .ne. 1 .and. isfc .ne. 2)CALL wrf_error_fatal &
  1855. ( 'module_physics_init: use sfclay or myjsfc scheme for this pbl option' )
  1856. CALL boulacinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1857. TKE_PBL,EXCH_H,restart, &
  1858. allowed_to_read , &
  1859. ids, ide, jds, jde, kds, kde, &
  1860. ims, ime, jms, jme, kms, kme, &
  1861. its, ite, jts, jte, kts, kte )
  1862. CASE (CAMUWPBLSCHEME)
  1863. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
  1864. ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
  1865. CALL camuwpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1866. restart,TKE_PBL,config_flags%grid_id, &
  1867. ids, ide, jds, jde, kds, kde, &
  1868. ims, ime, jms, jme, kms, kme, &
  1869. its, ite, jts, jte, kts, kte )
  1870. #endif
  1871. #if ( EM_CORE == 1 )
  1872. !mynn
  1873. CASE (MYNNPBLSCHEME2, MYNNPBLSCHEME3)
  1874. IF(isfc .NE. 5 .AND. isfc .NE. 1 .AND. isfc .NE. 2) CALL wrf_error_fatal &
  1875. ( 'module_physics_init: use mynnsfc or sfclay or myjsfc scheme for this pbl option')
  1876. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
  1877. ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
  1878. SELECT CASE(config_flags%bl_pbl_physics)
  1879. CASE(MYNNPBLSCHEME2)
  1880. mynn_closure_level=2
  1881. CASE(MYNNPBLSCHEME3)
  1882. mynn_closure_level=3
  1883. CASE DEFAULT
  1884. END SELECT
  1885. CALL mynn_bl_init_driver(&
  1886. &RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN&
  1887. &,restart,allowed_to_read,mynn_closure_level &
  1888. &,IDS,IDE,JDS,JDE,KDS,KDE &
  1889. &,IMS,IME,JMS,JME,KMS,KME &
  1890. &,ITS,ITE,JTS,JTE,KTS,KTE)
  1891. CASE (TEMFPBLSCHEME)
  1892. ! if(isfc .ne. 0)CALL wrf_error_fatal &
  1893. ! ( 'module_physics_init: use sfclay scheme = 0 for this pbl option' )
  1894. IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
  1895. ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
  1896. IF ( PRESENT( te_temf ) .AND. PRESENT( cf3d_temf )) THEN
  1897. CALL temfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
  1898. RQCBLTEN,RQIBLTEN,P_QI, &
  1899. PARAM_FIRST_SCALAR, &
  1900. restart, &
  1901. allowed_to_read , &
  1902. te_temf,cf3d_temf, & ! WA
  1903. ids, ide, jds, jde, kds, kde, &
  1904. ims, ime, jms, jme, kms, kme, &
  1905. its, ite, jts, jte, kts, kte )
  1906. ELSE
  1907. CALL wrf_error_fatal ( 'arguments not present for calling TEMF scheme' )
  1908. ENDIF
  1909. #endif
  1910. CASE DEFAULT
  1911. END SELECT pbl_select
  1912. END SUBROUTINE bl_init
  1913. !==================================================================
  1914. SUBROUTINE cu_init(STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, &
  1915. RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN,&
  1916. NCA,RAINC,RAINCV,W0AVG,config_flags,restart, &
  1917. CLDEFI,LOWLYR,MASS_FLUX, &
  1918. RTHFTEN, RQVFTEN, &
  1919. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  1920. APR_CAPMA,APR_CAPME,APR_CAPMI, &
  1921. cugd_tten,cugd_ttens,cugd_qvten, &
  1922. cugd_qvtens,cugd_qcten, &
  1923. allowed_to_read, start_of_simulation, &
  1924. ids, ide, jds, jde, kds, kde, &
  1925. ims, ime, jms, jme, kms, kme, &
  1926. its, ite, jts, jte, kts, kte )
  1927. !------------------------------------------------------------------
  1928. USE module_cu_kf
  1929. USE module_cu_kfeta
  1930. USE MODULE_CU_BMJ
  1931. USE module_cu_gd, ONLY : GDINIT
  1932. USE module_cu_g3, ONLY : G3INIT
  1933. USE module_cu_sas
  1934. USE module_cu_osas
  1935. USE module_cu_camzm_driver, ONLY : zm_conv_init
  1936. USE module_cu_nsas
  1937. USE module_cu_tiedtke
  1938. !------------------------------------------------------------------
  1939. IMPLICIT NONE
  1940. !------------------------------------------------------------------
  1941. TYPE (grid_config_rec_type) :: config_flags
  1942. LOGICAL , INTENT(IN) :: restart
  1943. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  1944. ims, ime, jms, jme, kms, kme, &
  1945. its, ite, jts, jte, kts, kte
  1946. REAL , INTENT(IN) :: DT, CUDT
  1947. LOGICAL , INTENT(IN) :: start_of_simulation
  1948. LOGICAL , INTENT(IN) :: allowed_to_read
  1949. INTEGER , INTENT(INOUT) :: STEPCU
  1950. REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
  1951. RUCUTEN, RVCUTEN, RTHCUTEN, &
  1952. RQVCUTEN, RQCCUTEN, RQRCUTEN, RQICUTEN, RQSCUTEN
  1953. REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
  1954. cugd_tten,cugd_ttens,cugd_qvten, &
  1955. cugd_qvtens,cugd_qcten
  1956. REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
  1957. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  1958. RTHFTEN, RQVFTEN
  1959. REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
  1960. REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI
  1961. REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
  1962. REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: MASS_FLUX, &
  1963. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  1964. APR_CAPMA,APR_CAPME,APR_CAPMI
  1965. INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: LOWLYR
  1966. ! LOCAL VAR
  1967. INTEGER :: i,j,itf,jtf
  1968. !--------------------------------------------------------------------
  1969. !-- calculate cumulus parameterization time step
  1970. itf=min0(ite,ide-1)
  1971. jtf=min0(jte,jde-1)
  1972. !
  1973. STEPCU = nint(CUDT*60./DT)
  1974. STEPCU = max(STEPCU,1)
  1975. !-- initialization
  1976. IF(start_of_simulation)THEN
  1977. DO j=jts,jtf
  1978. DO i=its,itf
  1979. RAINC(i,j)=0.
  1980. RAINCV(i,j)=0.
  1981. ENDDO
  1982. ENDDO
  1983. ENDIF
  1984. !-- deep convection and hybrid deep-shallow convection schemes
  1985. cps_select: SELECT CASE(config_flags%cu_physics)
  1986. CASE (KFSCHEME)
  1987. CALL kfinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
  1988. RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
  1989. PARAM_FIRST_SCALAR,restart, &
  1990. allowed_to_read , &
  1991. ids, ide, jds, jde, kds, kde, &
  1992. ims, ime, jms, jme, kms, kme, &
  1993. its, ite, jts, jte, kts, kte )
  1994. CASE (BMJSCHEME)
  1995. CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
  1996. CLDEFI,LOWLYR,cp,r_d,restart, &
  1997. allowed_to_read , &
  1998. ids, ide, jds, jde, kds, kde, &
  1999. ims, ime, jms, jme, kms, kme, &
  2000. its, ite, jts, jte, kts, kte )
  2001. CASE (KFETASCHEME)
  2002. CALL kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
  2003. RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
  2004. SVP1,SVP2,SVP3,SVPT0, &
  2005. PARAM_FIRST_SCALAR,restart, &
  2006. allowed_to_read , &
  2007. ids, ide, jds, jde, kds, kde, &
  2008. ims, ime, jms, jme, kms, kme, &
  2009. its, ite, jts, jte, kts, kte )
  2010. CASE (GDSCHEME)
  2011. CALL gdinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
  2012. MASS_FLUX,cp,restart, &
  2013. P_QC,P_QI,PARAM_FIRST_SCALAR, &
  2014. RTHFTEN, RQVFTEN, &
  2015. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  2016. APR_CAPMA,APR_CAPME,APR_CAPMI, &
  2017. allowed_to_read , &
  2018. ids, ide, jds, jde, kds, kde, &
  2019. ims, ime, jms, jme, kms, kme, &
  2020. its, ite, jts, jte, kts, kte )
  2021. CASE (NSASSCHEME)
  2022. CALL nsasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
  2023. RUCUTEN,RVCUTEN, &
  2024. restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
  2025. allowed_to_read , &
  2026. ids, ide, jds, jde, kds, kde, &
  2027. ims, ime, jms, jme, kms, kme, &
  2028. its, ite, jts, jte, kts, kte )
  2029. #if ( EM_CORE == 1 )
  2030. CASE (G3SCHEME)
  2031. CALL g3init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
  2032. MASS_FLUX,cp,restart, &
  2033. P_QC,P_QI,PARAM_FIRST_SCALAR, &
  2034. RTHFTEN, RQVFTEN, &
  2035. APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
  2036. APR_CAPMA,APR_CAPME,APR_CAPMI, &
  2037. cugd_tten,cugd_ttens,cugd_qvten, &
  2038. cugd_qvtens,cugd_qcten, &
  2039. allowed_to_read , &
  2040. ids, ide, jds, jde, kds, kde, &
  2041. ims, ime, jms, jme, kms, kme, &
  2042. its, ite, jts, jte, kts, kte )
  2043. #endif
  2044. CASE (SASSCHEME)
  2045. CALL sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
  2046. RUCUTEN,RVCUTEN, & ! gopal's doing for SAS
  2047. restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
  2048. allowed_to_read , &
  2049. ids, ide, jds, jde, kds, kde, &
  2050. ims, ime, jms, jme, kms, kme, &
  2051. its, ite, jts, jte, kts, kte )
  2052. CASE (OSASSCHEME)
  2053. CALL osasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
  2054. RUCUTEN,RVCUTEN, & ! gopal's doing for SAS
  2055. restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
  2056. allowed_to_read , &
  2057. ids, ide, jds, jde, kds, kde, &
  2058. ims, ime, jms, jme, kms, kme, &
  2059. its, ite, jts, jte, kts, kte )
  2060. CASE (CAMZMSCHEME)
  2061. CALL zm_conv_init(rucuten, rvcuten, rthcuten, rqvcuten, &
  2062. rqccuten, rqicuten, &
  2063. p_qc, p_qi, param_first_scalar, &
  2064. restart, &
  2065. ids, ide, jds, jde, kds, kde, &
  2066. ims, ime, jms, jme, kms, kme, &
  2067. its, ite, jts, jte, kts, kte )
  2068. ! Tiedtke Scheme - ZCX&YQW
  2069. CASE (TIEDTKESCHEME)
  2070. CALL tiedtkeinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
  2071. RUCUTEN,RVCUTEN, &
  2072. restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
  2073. allowed_to_read , &
  2074. ids, ide, jds, jde, kds, kde, &
  2075. ims, ime, jms, jme, kms, kme, &
  2076. its, ite, jts, jte, kts, kte )
  2077. CASE DEFAULT
  2078. END SELECT cps_select
  2079. END SUBROUTINE cu_init
  2080. !==================================================================
  2081. SUBROUTINE shcu_init(STEPCU,CUDT,DT,RUSHTEN,RVSHTEN,RTHSHTEN, &
  2082. RQVSHTEN,RQRSHTEN,RQCSHTEN, &
  2083. RQSSHTEN,RQISHTEN,RQGSHTEN, &
  2084. NCA,RAINC,RAINCV,config_flags,restart, &
  2085. allowed_to_read, start_of_simulation, &
  2086. ids, ide, jds, jde, kds, kde, &
  2087. ims, ime, jms, jme, kms, kme, &
  2088. its, ite, jts, jte, kts, kte )
  2089. !------------------------------------------------------------------
  2090. USE uwshcu, ONLY: init_uwshcu
  2091. USE physconst, ONLY: cpair, gravit, latice, latvap, mwdry, mwh2o, &
  2092. rair, zvir
  2093. USE shr_kind_mod, ONLY: r8 => shr_kind_r8
  2094. !------------------------------------------------------------------
  2095. IMPLICIT NONE
  2096. !------------------------------------------------------------------
  2097. TYPE (grid_config_rec_type) :: config_flags
  2098. LOGICAL , INTENT(IN) :: restart
  2099. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  2100. ims, ime, jms, jme, kms, kme, &
  2101. its, ite, jts, jte, kts, kte
  2102. REAL , INTENT(IN) :: DT, CUDT
  2103. LOGICAL , INTENT(IN) :: start_of_simulation
  2104. LOGICAL , INTENT(IN) :: allowed_to_read
  2105. INTEGER , INTENT(INOUT) :: STEPCU
  2106. REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
  2107. RUSHTEN, RVSHTEN, RTHSHTEN, &
  2108. RQVSHTEN, RQCSHTEN, RQRSHTEN, RQISHTEN, RQSSHTEN, RQGSHTEN
  2109. REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
  2110. REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
  2111. ! LOCAL VAR
  2112. INTEGER :: i,j,itf,jtf
  2113. !--------------------------------------------------------------------
  2114. ! Some of this stuff is redundant with deep convection, but redo it
  2115. ! in case deep is turned off...
  2116. !-- calculate cumulus parameterization time step
  2117. itf=min0(ite,ide-1)
  2118. jtf=min0(jte,jde-1)
  2119. !
  2120. STEPCU = nint(CUDT*60./DT)
  2121. STEPCU = max(STEPCU,1)
  2122. !-- initialization
  2123. IF(start_of_simulation)THEN
  2124. DO j=jts,jtf
  2125. DO i=its,itf
  2126. RAINC(i,j)=0.
  2127. RAINCV(i,j)=0.
  2128. ENDDO
  2129. ENDDO
  2130. ENDIF
  2131. !-- independent shallow convection schemes
  2132. shcu_select: SELECT CASE(config_flags%shcu_physics)
  2133. CASE (CAMUWSHCUSCHEME)
  2134. CALL init_uwshcu(r8,latvap,cpair,latice,zvir,rair,gravit, &
  2135. mwh2o/mwdry, &
  2136. rushten, rvshten, rthshten, rqvshten, &
  2137. rqcshten, rqrshten, rqishten, rqsshten, rqgshten, &
  2138. p_qc, p_qr, p_qi, p_qs, p_qg, &
  2139. config_flags%bl_pbl_physics, param_first_scalar, restart, &
  2140. config_flags%grid_id, &
  2141. ids, ide, jds, jde, kds, kde, &
  2142. ims, ime, jms, jme, kms, kme, &
  2143. its, ite, jts, jte, kts, kte )
  2144. CASE DEFAULT
  2145. END SELECT shcu_select
  2146. END SUBROUTINE shcu_init
  2147. !==================================================================
  2148. SUBROUTINE mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, &
  2149. adv_moist_cond, &
  2150. MPDT, DT, DX, DY, LOWLYR, & ! for eta mp
  2151. F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, & ! for eta mp
  2152. mp_restart_state,tbpvs_state,tbpvs0_state, & ! eta mp
  2153. allowed_to_read, start_of_simulation, &
  2154. ids, ide, jds, jde, kds, kde, &
  2155. ims, ime, jms, jme, kms, kme, &
  2156. its, ite, jts, jte, kts, kte )
  2157. !------------------------------------------------------------------
  2158. USE module_mp_wsm3
  2159. USE module_mp_wsm5
  2160. USE module_mp_wsm6
  2161. USE module_mp_etanew
  2162. USE module_mp_etaold
  2163. #if (NMM_CORE == 1)
  2164. USE module_mp_HWRF
  2165. #endif
  2166. USE module_mp_thompson
  2167. USE module_mp_morr_two_moment
  2168. USE module_mp_milbrandt2mom
  2169. ! USE module_mp_milbrandt3mom
  2170. USE module_mp_wdm5
  2171. USE module_mp_wdm6
  2172. #if (EM_CORE==1)
  2173. USE module_mp_nssl_2mom
  2174. #endif
  2175. !------------------------------------------------------------------
  2176. IMPLICIT NONE
  2177. !------------------------------------------------------------------
  2178. ! Arguments
  2179. TYPE (grid_config_rec_type) :: config_flags
  2180. LOGICAL , INTENT(IN) :: restart
  2181. LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
  2182. REAL , INTENT(IN) :: MPDT, DT, DX, DY
  2183. LOGICAL , INTENT(IN) :: start_of_simulation
  2184. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  2185. ims, ime, jms, jme, kms, kme, &
  2186. its, ite, jts, jte, kts, kte
  2187. INTEGER , DIMENSION( ims:ime , jms:jme ) ,INTENT(INOUT) :: LOWLYR
  2188. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: RAINNC,SNOWNC,GRAUPELNC
  2189. REAL, DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: &
  2190. F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
  2191. REAL , DIMENSION(:) ,INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
  2192. LOGICAL , INTENT(IN) :: allowed_to_read
  2193. ! Local
  2194. INTEGER :: i, j, itf, jtf
  2195. warm_rain = .false.
  2196. adv_moist_cond = .true.
  2197. itf=min0(ite,ide-1)
  2198. jtf=min0(jte,jde-1)
  2199. IF(start_of_simulation)THEN
  2200. DO j=jts,jtf
  2201. DO i=its,itf
  2202. RAINNC(i,j) = 0.
  2203. SNOWNC(i,j) = 0.
  2204. GRAUPELNC(i,j) = 0.
  2205. ENDDO
  2206. ENDDO
  2207. ENDIF
  2208. mp_select: SELECT CASE(config_flags%mp_physics)
  2209. CASE (KESSLERSCHEME)
  2210. warm_rain = .true.
  2211. CASE (WSM3SCHEME)
  2212. CALL wsm3init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
  2213. CASE (WSM5SCHEME)
  2214. CALL wsm5init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
  2215. CASE (WSM6SCHEME)
  2216. CALL wsm6init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
  2217. CASE (ETAMPNEW)
  2218. adv_moist_cond = .false.
  2219. CALL etanewinit (MPDT,DT,DX,DY,LOWLYR,restart, &
  2220. F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
  2221. mp_restart_state,tbpvs_state,tbpvs0_state,&
  2222. allowed_to_read, &
  2223. ids, ide, jds, jde, kds, kde, &
  2224. ims, ime, jms, jme, kms, kme, &
  2225. its, ite, jts, jte, kts, kte )
  2226. #if(NMM_CORE==1)
  2227. CASE (etamp_HWRF)
  2228. CALL etanewinit_HWRF (MPDT,DT,DX,DY,LOWLYR,restart, &
  2229. F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
  2230. allowed_to_read, &
  2231. ids, ide, jds, jde, kds, kde, &
  2232. ims, ime, jms, jme, kms, kme, &
  2233. its, ite, jts, jte, kts, kte )
  2234. #endif
  2235. CASE (THOMPSON)
  2236. ! Cycling the WRF forecast with moving nests will cause this initialization to be
  2237. ! called for each nest move. This is potentially very computationally expensive.
  2238. IF(start_of_simulation.or.restart.or.config_flags%cycling)CALL thompson_init
  2239. CASE (MORR_TWO_MOMENT)
  2240. CALL morr_two_moment_init
  2241. CASE (MILBRANDT2MOM)
  2242. CALL milbrandt2mom_init
  2243. ! CASE (MILBRANDT3MOM)
  2244. ! CALL milbrandt3mom_init
  2245. CASE (WDM5SCHEME)
  2246. CALL wdm5init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
  2247. CASE (WDM6SCHEME)
  2248. CALL wdm6init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
  2249. #if (EM_CORE==1)
  2250. CASE (NSSL_2MOM)
  2251. CALL nssl_2mom_init(ims,ime, jms,jme, kms,kme)
  2252. CASE (NSSL_2MOMCCN)
  2253. CALL nssl_2mom_init(ims,ime, jms,jme, kms,kme)
  2254. #endif
  2255. CASE (ETAMPOLD)
  2256. adv_moist_cond = .false.
  2257. CALL etaoldinit (MPDT,DT,DX,DY,LOWLYR,restart, &
  2258. F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
  2259. mp_restart_state,tbpvs_state,tbpvs0_state,&
  2260. allowed_to_read, &
  2261. ids, ide, jds, jde, kds, kde, &
  2262. ims, ime, jms, jme, kms, kme, &
  2263. its, ite, jts, jte, kts, kte )
  2264. CASE DEFAULT
  2265. END SELECT mp_select
  2266. END SUBROUTINE mp_init
  2267. #if ( EM_CORE == 1 )
  2268. !==========================================================
  2269. SUBROUTINE fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
  2270. RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
  2271. config_flags,restart, &
  2272. allowed_to_read , &
  2273. ids, ide, jds, jde, kds, kde, &
  2274. ims, ime, jms, jme, kms, kme, &
  2275. its, ite, jts, jte, kts, kte )
  2276. !--------------------------------------------------------------------
  2277. USE module_fdda_psufddagd
  2278. USE module_fdda_spnudging, ONLY : fddaspnudginginit
  2279. !--------------------------------------------------------------------
  2280. IMPLICIT NONE
  2281. !--------------------------------------------------------------------
  2282. TYPE (grid_config_rec_type) :: config_flags
  2283. LOGICAL , INTENT(IN) :: restart
  2284. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  2285. ims, ime, jms, jme, kms, kme, &
  2286. its, ite, jts, jte, kts, kte
  2287. REAL , INTENT(IN) :: DT, FGDT
  2288. INTEGER , INTENT(IN) :: id
  2289. INTEGER , INTENT(INOUT) :: STEPFG
  2290. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  2291. RUNDGDTEN, &
  2292. RVNDGDTEN, &
  2293. RTHNDGDTEN, &
  2294. RPHNDGDTEN, &
  2295. RQVNDGDTEN
  2296. REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: RMUNDGDTEN
  2297. LOGICAL, INTENT(IN) :: allowed_to_read
  2298. !--------------------------------------------------------------------
  2299. !-- calculate pbl time step
  2300. STEPFG = nint(FGDT*60./DT)
  2301. STEPFG = max(STEPFG,1)
  2302. !-- initialize fdda scheme
  2303. fdda_select: SELECT CASE(config_flags%grid_fdda)
  2304. CASE (PSUFDDAGD)
  2305. CALL fddagdinit(id,rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten,&
  2306. config_flags%run_hours, &
  2307. config_flags%if_no_pbl_nudging_uv, &
  2308. config_flags%if_no_pbl_nudging_t, &
  2309. config_flags%if_no_pbl_nudging_q, &
  2310. config_flags%if_zfac_uv, &
  2311. config_flags%k_zfac_uv, &
  2312. config_flags%if_zfac_t, &
  2313. config_flags%k_zfac_t, &
  2314. config_flags%if_zfac_q, &
  2315. config_flags%k_zfac_q, &
  2316. config_flags%guv, &
  2317. config_flags%gt, config_flags%gq, &
  2318. config_flags%if_ramping, config_flags%dtramp_min, &
  2319. config_flags%auxinput10_end_h, &
  2320. config_flags%grid_sfdda, &
  2321. config_flags%guv_sfc, &
  2322. config_flags%gt_sfc, &
  2323. config_flags%gq_sfc, &
  2324. restart, allowed_to_read, &
  2325. ids, ide, jds, jde, kds, kde, &
  2326. ims, ime, jms, jme, kms, kme, &
  2327. its, ite, jts, jte, kts, kte )
  2328. CASE (SPNUDGING)
  2329. CALL fddaspnudginginit(id,rundgdten,rvndgdten,rthndgdten,rphndgdten,&
  2330. config_flags%run_hours, &
  2331. config_flags%if_no_pbl_nudging_uv, &
  2332. config_flags%if_no_pbl_nudging_t, &
  2333. config_flags%if_no_pbl_nudging_ph, &
  2334. config_flags%if_zfac_uv, &
  2335. config_flags%k_zfac_uv, &
  2336. config_flags%dk_zfac_uv, &
  2337. config_flags%if_zfac_t, &
  2338. config_flags%k_zfac_t, &
  2339. config_flags%dk_zfac_t, &
  2340. config_flags%if_zfac_ph, &
  2341. config_flags%k_zfac_ph, &
  2342. config_flags%dk_zfac_ph, &
  2343. config_flags%guv, &
  2344. config_flags%gt, config_flags%gph, &
  2345. config_flags%if_ramping, config_flags%dtramp_min, &
  2346. config_flags%auxinput9_end_h, &
  2347. config_flags%xwavenum,config_flags%ywavenum, &
  2348. restart, allowed_to_read, &
  2349. ids, ide, jds, jde, kds, kde, &
  2350. ims, ime, jms, jme, kms, kme, &
  2351. its, ite, jts, jte, kts, kte )
  2352. CASE DEFAULT
  2353. END SELECT fdda_select
  2354. END SUBROUTINE fg_init
  2355. !-------------------------------------------------------------------
  2356. SUBROUTINE fdob_init(obs_nudge_opt, maxdom, inest, parid, &
  2357. idynin, dtramp, fdaend, restart, &
  2358. obs_twindo_cg, obs_twindo, itimestep, &
  2359. no_pbl_nudge_uv, &
  2360. no_pbl_nudge_t, &
  2361. no_pbl_nudge_q, &
  2362. sfc_scheme_horiz, sfc_scheme_vert, &
  2363. maxsnd_gap, &
  2364. sfcfact, sfcfacr, dpsmx, &
  2365. nudge_wind, nudge_temp, nudge_mois, &
  2366. nudgezfullr1_uv, nudgezrampr1_uv, &
  2367. nudgezfullr2_uv, nudgezrampr2_uv, &
  2368. nudgezfullr4_uv, nudgezrampr4_uv, &
  2369. nudgezfullr1_t, nudgezrampr1_t, &
  2370. nudgezfullr2_t, nudgezrampr2_t, &
  2371. nudgezfullr4_t, nudgezrampr4_t, &
  2372. nudgezfullr1_q, nudgezrampr1_q, &
  2373. nudgezfullr2_q, nudgezrampr2_q, &
  2374. nudgezfullr4_q, nudgezrampr4_q, &
  2375. nudgezfullmin, nudgezrampmin, nudgezmax, &
  2376. xlat, xlong, &
  2377. start_year, start_month, start_day, &
  2378. start_hour, start_minute, start_second, &
  2379. p00, t00, tlp, &
  2380. znu, p_top, &
  2381. fdob, ipf_init, &
  2382. ids, ide, jds, jde, kds, kde, &
  2383. ims, ime, jms, jme, kms, kme, &
  2384. its, ite, jts, jte, kts, kte )
  2385. !--------------------------------------------------------------------
  2386. USE module_domain
  2387. USE module_fddaobs_rtfdda
  2388. USE module_llxy
  2389. !--------------------------------------------------------------------
  2390. IMPLICIT NONE
  2391. !--------------------------------------------------------------------
  2392. INTEGER , INTENT(IN) :: maxdom
  2393. INTEGER , INTENT(IN) :: obs_nudge_opt(maxdom)
  2394. INTEGER , INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
  2395. ims,ime, jms,jme, kms,kme, &
  2396. its,ite, jts,jte, kts,kte
  2397. INTEGER , INTENT(IN) :: inest
  2398. INTEGER , INTENT(IN) :: parid(maxdom)
  2399. INTEGER , INTENT(IN) :: idynin ! flag for dynamic initialization
  2400. REAL , INTENT(IN) :: dtramp ! time period for ramping (idynin)
  2401. REAL , INTENT(IN) :: fdaend(maxdom) ! nudging end time for domain (min)
  2402. LOGICAL , INTENT(IN) :: restart
  2403. REAL , INTENT(IN) :: obs_twindo_cg ! twindo on course grid
  2404. REAL , INTENT(IN) :: obs_twindo
  2405. INTEGER , INTENT(IN) :: itimestep
  2406. INTEGER , INTENT(IN) :: no_pbl_nudge_uv(maxdom) ! flags for no wind nudging in pbl
  2407. INTEGER , INTENT(IN) :: no_pbl_nudge_t(maxdom) ! flags for no temperature nudging in pbl
  2408. INTEGER , INTENT(IN) :: no_pbl_nudge_q(maxdom) ! flags for no moisture nudging in pbl
  2409. INTEGER , INTENT(IN) :: sfc_scheme_horiz ! horizontal spreading scheme for surf obs (wrf or orig mm5)
  2410. INTEGER , INTENT(IN) :: sfc_scheme_vert ! vertical spreading scheme for surf obs (orig or regime vif)
  2411. REAL , INTENT(IN) :: maxsnd_gap ! max allowed pressure gap in soundings for interp (centibars)
  2412. REAL , INTENT(IN) :: sfcfact ! scale factor applied to time window for surface obs
  2413. REAL , INTENT(IN) :: sfcfacr ! scale fac applied to horiz rad of infl for sfc obs
  2414. REAL , INTENT(IN) :: dpsmx ! max pressure change allowed within horiz. infl. range
  2415. INTEGER , INTENT(IN) :: nudge_wind(maxdom) ! wind-nudging flag
  2416. INTEGER , INTENT(IN) :: nudge_temp(maxdom) ! temperature-nudging flag
  2417. INTEGER , INTENT(IN) :: nudge_mois(maxdom) ! moisture-nudging flag
  2418. REAL , INTENT(IN) :: nudgezfullr1_uv ! vert infl fcn, regime=1 full-wt hght, winds
  2419. REAL , INTENT(IN) :: nudgezrampr1_uv ! vert infl fcn, regime=1 ramp down hght, winds
  2420. REAL , INTENT(IN) :: nudgezfullr2_uv ! vert infl fcn, regime=2 full-wt hght, winds
  2421. REAL , INTENT(IN) :: nudgezrampr2_uv ! vert infl fcn, regime=2 ramp down hght, winds
  2422. REAL , INTENT(IN) :: nudgezfullr4_uv ! vert infl fcn, regime=4 full-wt hght, winds
  2423. REAL , INTENT(IN) :: nudgezrampr4_uv ! vert infl fcn, regime=4 ramp down hght, winds
  2424. REAL , INTENT(IN) :: nudgezfullr1_t ! vert infl fcn, regime=1 full-wt hght, temp
  2425. REAL , INTENT(IN) :: nudgezrampr1_t ! vert infl fcn, regime=1 ramp down hght, temp
  2426. REAL , INTENT(IN) :: nudgezfullr2_t ! vert infl fcn, regime=2 full-wt hght, temp
  2427. REAL , INTENT(IN) :: nudgezrampr2_t ! vert infl fcn, regime=2 ramp down hght, temp
  2428. REAL , INTENT(IN) :: nudgezfullr4_t ! vert infl fcn, regime=4 full-wt hght, temp
  2429. REAL , INTENT(IN) :: nudgezrampr4_t ! vert infl fcn, regime=4 ramp down hght, temp
  2430. REAL , INTENT(IN) :: nudgezfullr1_q ! vert infl fcn, regime=1 full-wt hght, mois
  2431. REAL , INTENT(IN) :: nudgezrampr1_q ! vert infl fcn, regime=1 ramp down hght, mois
  2432. REAL , INTENT(IN) :: nudgezfullr2_q ! vert infl fcn, regime=2 full-wt hght, mois
  2433. REAL , INTENT(IN) :: nudgezrampr2_q ! vert infl fcn, regime=2 ramp down hght, mois
  2434. REAL , INTENT(IN) :: nudgezfullr4_q ! vert infl fcn, regime=4 full-wt hght, mois
  2435. REAL , INTENT(IN) :: nudgezrampr4_q ! vert infl fcn, regime=4 ramp down hght, mois
  2436. REAL , INTENT(IN) :: nudgezfullmin ! min dpth thru which vert infl fcn remains 1.0 (m)
  2437. REAL , INTENT(IN) :: nudgezrampmin ! min dpth thru which vif decreases 1.0 to 0.0 (m)
  2438. REAL , INTENT(IN) :: nudgezmax ! max dpth in which vif is nonzero (m)
  2439. REAL , INTENT(IN) :: xlat ( ims:ime, jms:jme ) ! latitudes on mass-point grid
  2440. REAL , INTENT(IN) :: xlong( ims:ime, jms:jme ) ! longitudes on mass-point grid
  2441. INTEGER , INTENT(INOUT) :: start_year
  2442. INTEGER , INTENT(INOUT) :: start_month
  2443. INTEGER , INTENT(INOUT) :: start_day
  2444. INTEGER , INTENT(INOUT) :: start_hour
  2445. INTEGER , INTENT(INOUT) :: start_minute
  2446. INTEGER , INTENT(INOUT) :: start_second
  2447. REAL , INTENT(IN) :: p00 ! base state pressure
  2448. REAL , INTENT(IN) :: t00 ! base state temperature
  2449. REAL , INTENT(IN) :: tlp ! base state lapse rate
  2450. REAL , INTENT(IN) :: znu( kms:kme ) ! eta values on half (mass) levels
  2451. REAL , INTENT(IN) :: p_top ! pressure at top of model
  2452. TYPE(fdob_type), INTENT(INOUT) :: fdob
  2453. INTEGER :: e_sn ! ending north-south grid index
  2454. LOGICAL :: ipf_init ! print warnings detected at initialzn
  2455. !--------------------------------------------------------------------
  2456. !-- initialize fdda obs-nudging scheme
  2457. IF ( obs_nudge_opt(inest) .eq. 0 ) RETURN
  2458. e_sn = jde
  2459. CALL fddaobs_init(obs_nudge_opt, maxdom, inest, parid, &
  2460. idynin, dtramp, fdaend, restart, &
  2461. obs_twindo_cg, &
  2462. obs_twindo, itimestep, &
  2463. no_pbl_nudge_uv, &
  2464. no_pbl_nudge_t, &
  2465. no_pbl_nudge_q, &
  2466. sfc_scheme_horiz, sfc_scheme_vert, &
  2467. maxsnd_gap, &
  2468. sfcfact, sfcfacr, dpsmx, &
  2469. nudge_wind, nudge_temp, nudge_mois, &
  2470. nudgezfullr1_uv, nudgezrampr1_uv, &
  2471. nudgezfullr2_uv, nudgezrampr2_uv, &
  2472. nudgezfullr4_uv, nudgezrampr4_uv, &
  2473. nudgezfullr1_t, nudgezrampr1_t, &
  2474. nudgezfullr2_t, nudgezrampr2_t, &
  2475. nudgezfullr4_t, nudgezrampr4_t, &
  2476. nudgezfullr1_q, nudgezrampr1_q, &
  2477. nudgezfullr2_q, nudgezrampr2_q, &
  2478. nudgezfullr4_q, nudgezrampr4_q, &
  2479. nudgezfullmin, nudgezrampmin, nudgezmax, &
  2480. xlat, xlong, &
  2481. start_year, start_month, start_day, &
  2482. start_hour, start_minute, start_second, &
  2483. p00, t00, tlp, &
  2484. znu, p_top, &
  2485. fdob, ipf_init, &
  2486. ids,ide, jds,jde, kds,kde, &
  2487. ims,ime, jms,jme, kms,kme, &
  2488. its,ite, jts,jte, kts,kte)
  2489. END SUBROUTINE fdob_init
  2490. #endif
  2491. !--------------------------------------------------------------------
  2492. SUBROUTINE z2sigma(zf,zh,sf,sh,p_top,pptop,config_flags, &
  2493. allowed_to_read , &
  2494. kds,kde,kms,kme,kts,kte)
  2495. IMPLICIT NONE
  2496. ! Arguments
  2497. INTEGER, INTENT(IN) :: kds,kde,kms,kme,kts,kte
  2498. REAL , DIMENSION( kms:kme ), INTENT(IN) :: zf,zh
  2499. REAL , DIMENSION( kms:kme ), INTENT(OUT):: sf,sh
  2500. REAL , INTENT(IN) :: p_top
  2501. REAL , INTENT(OUT) :: pptop
  2502. TYPE (grid_config_rec_type) :: config_flags
  2503. LOGICAL , INTENT(IN) :: allowed_to_read
  2504. ! Local
  2505. REAL R, G, TS, GAMMA, PS, ZTROP, TSTRAT, PTROP, Z, T, P, ZTOP, PTOP
  2506. INTEGER K
  2507. IF(zf(kde/2) .GT. 1.0)THEN
  2508. ! Height levels assumed (zeta coordinate)
  2509. ! Convert to sigma using standard atmosphere for pressure-height relation
  2510. ! constants for standard atmosphere definition
  2511. r=287.05
  2512. g=9.80665
  2513. ts=288.15
  2514. gamma=-6.5/1000.
  2515. ps=1013.25
  2516. ztrop=11000.
  2517. tstrat=ts+gamma*ztrop
  2518. ptrop=ps*(tstrat/ts)**(-g/(gamma*r))
  2519. do k=kde,kds,-1
  2520. ! full levels
  2521. z=zf(k)
  2522. if(z.le.ztrop)then
  2523. t=ts+gamma*z
  2524. p=ps*(t/ts)**(-g/(gamma*r))
  2525. else
  2526. t=tstrat
  2527. p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
  2528. endif
  2529. if(k.eq.kde)then
  2530. ztop=zf(k)
  2531. ptop=p
  2532. endif
  2533. sf(k)=(p-ptop)/(ps-ptop)
  2534. ! half levels
  2535. if(k.ne.kds)then
  2536. z=0.5*(zf(k)+zf(k-1))
  2537. if(z.le.ztrop)then
  2538. t=ts+gamma*z
  2539. p=ps*(t/ts)**(-g/(gamma*r))
  2540. else
  2541. t=tstrat
  2542. p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
  2543. endif
  2544. sh(k-1)=(p-ptop)/(ps-ptop)
  2545. endif
  2546. enddo
  2547. pptop=ptop/10.
  2548. ELSE
  2549. ! Levels are already sigma/eta
  2550. do k=kde,kds,-1
  2551. ! sf(k)=zf(kde-k+kds)
  2552. ! if(k .ne. kde)sh(k)=zh(kde-1-k+kds)
  2553. sf(k)=zf(k)
  2554. if(k .ne. kde)sh(k)=zh(k)
  2555. enddo
  2556. pptop=p_top/1000.
  2557. ENDIF
  2558. END SUBROUTINE z2sigma
  2559. END MODULE module_physics_init