From 3da52e68426c536267c8d2a5ecf1f0f5d7e1100b Mon Sep 17 00:00:00 2001 From: Jonathan Beezley Date: Thu, 20 Oct 2011 11:36:27 -0700 Subject: [PATCH] r5152 | xinzhang | 2011-09-26 21:04:33 -0700 (Mon, 26 Sep 2011) | 3 lines wrf version 3.3.1 from svn --- wrfv2_fire/README | 12 +- wrfv2_fire/README.DA | 11 + wrfv2_fire/README.windturbine | 4 + wrfv2_fire/Registry/Registry.EM | 118 +- wrfv2_fire/Registry/Registry.EM_CHEM | 60 +- wrfv2_fire/Registry/Registry.EM_SST | 91 +- wrfv2_fire/Registry/Registry.NMM | 3 +- wrfv2_fire/Registry/Registry.NMM_CHEM | 3 +- .../{Registry.NMM_NEST => Registry.NMM_HWRF} | 46 +- wrfv2_fire/Registry/Registry.NMM_NEST | 3 +- wrfv2_fire/Registry/Registry.wrfvar | 209 +- wrfv2_fire/Registry/registry.chem | 7 +- wrfv2_fire/Registry/registry.stoch | 19 +- wrfv2_fire/arch/Config_new.pl | 23 +- wrfv2_fire/arch/configure_new.defaults | 10 +- wrfv2_fire/arch/postamble_new | 1 + wrfv2_fire/arch/preamble_new | 3 + wrfv2_fire/compile | 14 +- wrfv2_fire/configure | 18 +- wrfv2_fire/dyn_em/Makefile | 1 - wrfv2_fire/dyn_em/module_big_step_utilities_em.F | 120 +- wrfv2_fire/dyn_em/module_first_rk_step_part1.F | 6 +- wrfv2_fire/dyn_em/module_first_rk_step_part2.F | 44 +- wrfv2_fire/dyn_em/module_initialize_real.F | 173 +- wrfv2_fire/dyn_em/module_stoch.F | 49 +- wrfv2_fire/dyn_em/solve_em.F | 78 +- wrfv2_fire/dyn_em/start_em.F | 161 +- wrfv2_fire/dyn_nmm/module_PHYSICS_CALLS.F | 6 +- wrfv2_fire/dyn_nmm/solve_nmm.F | 13 +- wrfv2_fire/dyn_nmm/start_domain_nmm.F | 6 +- wrfv2_fire/external/RSL_LITE/module_dm.F | 4 +- wrfv2_fire/external/atm_ocn/atm_comm.F | 18 +- wrfv2_fire/external/atm_ocn/atm_comm_pom.F | 16 +- wrfv2_fire/external/esmf_time_f90/ESMF_Stubs.F90 | 8 +- .../external/io_esmf/ext_esmf_open_for_read.F90 | 6 +- .../external/io_esmf/ext_esmf_open_for_write.F90 | 6 +- .../external/io_esmf/ext_esmf_read_field.F90 | 4 +- .../external/io_esmf/ext_esmf_write_field.F90 | 4 +- wrfv2_fire/external/io_esmf/io_esmf.F90 | 116 +- .../external/io_esmf/module_esmf_extensions.F90 | 10 +- .../external/io_esmf/module_symbols_util.F90 | 266 +- wrfv2_fire/external/io_grib1/io_grib1.F | 10 +- wrfv2_fire/frame/module_domain.F | 4 + wrfv2_fire/frame/module_io_quilt.F | 27 +- wrfv2_fire/frame/module_quilt_outbuf_ops.F | 163 +- wrfv2_fire/frame/module_wrf_error.F | 18 +- wrfv2_fire/inc/version_decl | 2 +- wrfv2_fire/main/convert_em.F | 4 +- wrfv2_fire/main/ideal.F | 7 +- wrfv2_fire/main/module_wrf_top.F | 4 +- wrfv2_fire/main/ndown_em.F | 4 +- wrfv2_fire/main/nup_em.F | 4 +- wrfv2_fire/main/real_em.F | 8 +- wrfv2_fire/main/real_nmm.F | 5 +- wrfv2_fire/main/tc_em.F | 9 +- wrfv2_fire/main/wrf_ESMFMod.F | 83 +- wrfv2_fire/main/wrf_SST_ESMF.F | 243 +- wrfv2_fire/phys/Makefile | 7 + wrfv2_fire/phys/module_bl_acm.F | 2 +- wrfv2_fire/phys/module_bl_ysu.F | 3 +- wrfv2_fire/phys/module_cu_bmj.F | 83 +- wrfv2_fire/phys/module_cu_camzm_driver.F | 81 +- wrfv2_fire/phys/module_cu_g3.F | 2 +- wrfv2_fire/phys/module_cu_gd.F | 12 +- wrfv2_fire/phys/module_cu_kf.F | 86 +- wrfv2_fire/phys/module_cu_kfeta.F | 84 +- wrfv2_fire/phys/module_cu_nsas.F | 99 +- .../phys/{module_cu_sas.F => module_cu_osas.F} | 101 +- wrfv2_fire/phys/module_cu_sas.F | 3087 +++++++++++++++++++- wrfv2_fire/phys/module_cu_tiedtke.F | 79 +- wrfv2_fire/phys/module_cumulus_driver.F | 72 +- wrfv2_fire/phys/module_diagnostics.F | 450 +++ wrfv2_fire/phys/module_fdda_spnudging.F | 8 +- wrfv2_fire/phys/module_fddaobs_rtfdda.F | 15 +- wrfv2_fire/phys/module_fr_sfire_core.F | 4 +- wrfv2_fire/phys/module_fr_sfire_util.F | 2 +- wrfv2_fire/phys/module_mp_morr_two_moment.F | 75 +- wrfv2_fire/phys/module_mp_sbu_ylin.F | 11 +- wrfv2_fire/phys/module_mp_thompson.F | 33 +- wrfv2_fire/phys/module_mp_wdm5.F | 5 +- wrfv2_fire/phys/module_mp_wdm6.F | 5 +- wrfv2_fire/phys/module_pbl_driver.F | 102 +- wrfv2_fire/phys/module_physics_addtendc.F | 2 +- wrfv2_fire/phys/module_physics_init.F | 16 +- wrfv2_fire/phys/module_ra_HWRF.F | 40 +- wrfv2_fire/phys/module_radiation_driver.F | 83 +- wrfv2_fire/phys/module_sf_gfdl.F | 21 +- wrfv2_fire/phys/module_sf_idealscmsfclay.F | 11 +- wrfv2_fire/phys/module_sf_oml.F | 11 +- wrfv2_fire/phys/module_sf_ruclsm.F | 1 + wrfv2_fire/phys/module_surface_driver.F | 103 +- wrfv2_fire/phys/module_wind_fitch.F | 4 +- wrfv2_fire/run/README.namelist | 18 +- wrfv2_fire/share/dfi.F | 10 +- wrfv2_fire/share/input_wrf.F | 2 +- wrfv2_fire/share/mediation_integrate.F | 55 +- wrfv2_fire/share/module_bc_time_utilities.F | 2 + wrfv2_fire/share/module_check_a_mundo.F | 15 + wrfv2_fire/share/output_wrf.F | 8 +- .../test/em_esmf_exp/namelist.input.jan00.ESMFSST | 4 +- wrfv2_fire/test/em_real/examples.namelist | 11 + wrfv2_fire/test/em_real/namelist.input | 49 +- wrfv2_fire/test/em_real/namelist.input.jan00 | 21 + wrfv2_fire/tools/gen_streams.c | 4 +- wrfv2_fire/tools/regtest.csh | 1 + wrfv2_fire/tools/regtest_esmf.csh | 61 + wrfv2_fire/tools/regtest_hwrf.csh | 4 +- wrfv2_fire/tools/regtest_nmmnest.csh | 5 +- wrfv2_fire/tools/test4_0_ESMFSST.lsf.csh | 25 + 109 files changed, 6179 insertions(+), 1281 deletions(-) copy wrfv2_fire/Registry/{Registry.NMM_NEST => Registry.NMM_HWRF} (97%) rewrite wrfv2_fire/external/io_esmf/module_symbols_util.F90 (94%) copy wrfv2_fire/phys/{module_cu_sas.F => module_cu_osas.F} (96%) create mode 100755 wrfv2_fire/tools/regtest_esmf.csh create mode 100644 wrfv2_fire/tools/test4_0_ESMFSST.lsf.csh diff --git a/wrfv2_fire/README b/wrfv2_fire/README index 7f7adbe7..7042e65a 100644 --- a/wrfv2_fire/README +++ b/wrfv2_fire/README @@ -1,4 +1,4 @@ -WRF Model Version 3.3 (April 6, 2011) +WRF Model Version 3.3.1 (Sept 16, 2011) http://wrf-model.org/users/users.php ------------------------ @@ -27,6 +27,16 @@ infringement actions. This is the main directory for the WRF Version 3 source code release. ====================================== +V3.3.1 Release Notes (9/16/11) (rev 5130): +------------------- + +This is a bug fix release. The detailed updates for WRF-ARW can be found at +http://www.mmm.ucar.edu/wrf/users/wrfv3.3/updates-3.3.1.html, +and for WRF-NMM at +http://www.dtcenter.org/wrf-nmm/users/model/wrfv3/updates.php + +====================================== + V3.3 Release Notes: ------------------- diff --git a/wrfv2_fire/README.DA b/wrfv2_fire/README.DA index bc81204a..b6071f4a 100644 --- a/wrfv2_fire/README.DA +++ b/wrfv2_fire/README.DA @@ -22,6 +22,17 @@ WRFDA, including infringement actions. This is the main directory for the WRFDA Version 3 source code release. ====================================== +V3.3.1 Release Notes : +------------------- + +Version 3.3.1 is released on September. 27, 2011. + +- WRF 4D-Var has been improved on lateral boundary condition control, analysis scheme for surface observation etc. + +- Lots of bug fixes. + +====================================== + V3.3 Release Notes: ----------------------- diff --git a/wrfv2_fire/README.windturbine b/wrfv2_fire/README.windturbine index 3064a66a..c6e75ad1 100644 --- a/wrfv2_fire/README.windturbine +++ b/wrfv2_fire/README.windturbine @@ -82,4 +82,8 @@ It works with the MYNN PBL and modifies the QKE field representing 2xTKE to include the TKE produced by wind turbines. QKE is advected as a part of the scalar 4D tracer array in WRF. +Reference: Fitch, A.C., Olson, J.B., Lundquist, J.K., Dudhia, J., Gupta, A.K., +Michalakes, J., Barstad, I. Local and Mesoscale Impacts of Wind Farms +as Parameterized in a Mesoscale NWP Model. Manuscript in preparation. + diff --git a/wrfv2_fire/Registry/Registry.EM b/wrfv2_fire/Registry/Registry.EM index 9a6801f0..e9ba750a 100644 --- a/wrfv2_fire/Registry/Registry.EM +++ b/wrfv2_fire/Registry/Registry.EM @@ -20,7 +20,7 @@ # Note that it is all right to more than one dimension name for, say, the # x dimension. However, the Order and Coord-axis relationship must be # consistent throughout. -# +# # Note: these entries do not enforce storage order on a particular field. # That is determined by the dimension strings for each field. But it does # relate the dimspec to the internal data structures that the driver uses @@ -45,20 +45,20 @@ include registry.dimspec ################################################################################ ################################################################################ -#state real floob ikjb dyn_em 1 - -#state real floob_x ikjx dyn_em 1 - -#state real floob_y ikjy dyn_em 1 - +#state real floob ikjb dyn_em 1 - +#state real floob_x ikjx dyn_em 1 - +#state real floob_y ikjy dyn_em 1 - #xpose FLOOB dyn_em floob,floob_x,floob_y #state real xxx ijk misc 2 - h6ud #halo HALO_FLOOB dyn_em 4:xxx_2 -# Lines that start with the word 'state' form a table that is -# used by the script use_registry to generate module_state_descript.F -# and other files. Also see documentation in use_registry. +# Lines that start with the word 'state' form a table that is +# used by the script use_registry to generate module_state_descript.F +# and other files. Also see documentation in use_registry. # -# table entries are of the form -# +# table entries are of the form +#
# # It is required that LU_INDEX appears before any variable that is @@ -354,7 +354,10 @@ state real zetatop - misc - - irh "zet state real cf1 - misc - - irh "cf1" "2nd order extrapolation constant" "" state real cf2 - misc - - irh "cf2" "2nd order extrapolation constant" "" state real cf3 - misc - - irh "cf3" "2nd order extrapolation constant" "" -state integer number_at_same_level - - - - - "number_at_same_level" "" "" +state integer number_at_same_level - - - - - "number_at_same_level" "" "" +state real radtacttime - - - - r "radtacttime" "RADTACTTIME" "LW SW ACTIVATION TIME in s" +state real bldtacttime - - - - r "bldtacttime" "BLDTACTTIME" "PBL ACTIVATION TIME in s" +state real cudtacttime - - - - r "cudtacttime" "CUDTACTTIME" "CPS ACTIVATION TIME in s" # State for derived time quantities. state integer itimestep - - - - rh "itimestep" "" "" @@ -363,11 +366,11 @@ state real julian - - - - - "j # input file descriptor for lbcs on parent domain -state integer lbc_fid - - - - - "lbc_fid" "" "" +state integer lbc_fid - - - - - "lbc_fid" "" "" # indicates if tiling has been computed -state logical tiled - - - - - "tiled" "" "" +state logical tiled - - - - - "tiled" "" "" # indicates if patches have been computed -state logical patched - - - - - "patched" "" "" +state logical patched - - - - - "patched" "" "" # indicates whether to read input from file or generate #state logical input_from_file - - - - - "input_from_file" "" "" # indicates whether to recompute mu @@ -390,7 +393,7 @@ state real vc_j - misc - - r # Moist Scalars # # The first line ensures that there will be identifiers named moist and -# moist_tend even if there are not any moist scalars (so the essentially +# moist_tend even if there are not any moist scalars (so the essentially # dry code will will still link properly) # state real - ikjftb moist 1 - - - @@ -449,7 +452,7 @@ state real tr17_5 ikjftb tracer 1 - irhusdf=(bdy_in state real tr17_6 ikjftb tracer 1 - irhusdf=(bdy_interp:dt) "tr17_6" "tr17_6" - state real tr17_7 ikjftb tracer 1 - irhusdf=(bdy_interp:dt) "tr17_7" "tr17_7" - state real tr17_8 ikjftb tracer 1 - irhusdf=(bdy_interp:dt) "tr17_8" "tr17_8" - + # Other Scalars state real - ikjftb scalar 1 - - - state real qndrop ikjftb scalar 1 - \ @@ -578,7 +581,8 @@ state real soilt020 ij misc 1 - i1 "SOIL state real soilt040 ij misc 1 - i1 "SOILT040" "LAYER SOIL TEMPERATURE" "K" state real soilt160 ij misc 1 - i1 "SOILT160" "LAYER SOIL TEMPERATURE" "K" state real soilt300 ij misc 1 - i1 "SOILT300" "LAYER SOIL TEMPERATURE" "K" -state real landmask ij misc 1 - i012rhd=(interp_fcnm)u=(copy_fcnm) "LANDMASK" "LAND MASK (1 FOR LAND, 0 FOR WATER)" "" +# added to output 5 for ESMF +state real landmask ij misc 1 - i0125rh05d=(interp_fcnm)u=(copy_fcnm) "LANDMASK" "LAND MASK (1 FOR LAND, 0 FOR WATER)" "" state real topostdv ij misc 1 - i12 "TOPOSTDV" "ELEVATION STD DEV" "m" state real toposlpx ij misc 1 - i012rdu "TOPOSLPX" "ELEVATION X SLOPE" "" state real toposlpy ij misc 1 - i012rdu "TOPOSLPY" "ELEVATION Y SLOPE" "" @@ -650,7 +654,8 @@ state real SNOW ij misc 1 - i012rhd=(int state real SNOWH ij misc 1 - i012rhd=(interp_mask_land_field:lu_index)u=(copy_fcnm) "SNOWH" "PHYSICAL SNOW DEPTH" "m" #state real RHOSN ij misc 1 - i02rhd=(interp_mask_land_field:lu_index)u=(copy_fcnm) "RHOSN" " SNOW DENSITY" "kg m-3" state real CANWAT ij misc 1 - i012rhd=(interp_mask_land_field:lu_index)u=(copy_fcnm) "CANWAT" "CANOPY WATER" "kg m-2" -state real SST ij misc 1 - i0124rhd=(interp_mask_water_field:lu_index,iswater) "SST" "SEA SURFACE TEMPERATURE" "K" +# added to output 5 for ESMF +state real SST ij misc 1 - i01245rh05d=(interp_mask_water_field:lu_index,iswater) "SST" "SEA SURFACE TEMPERATURE" "K" state integer IFNDSNOWH - misc 1 - i "FNDSNOWH" "SNOWH_LOGICAL" state integer IFNDSOILW - misc 1 - i "FNDSOILW" "SOILW_LOGICAL" # SKIN SST @@ -812,7 +817,7 @@ state real ch ij misc 1 - - "ch # Additional for gravity wave drag state real DTAUX3D ikj misc 1 - rh "DTAUX3D" "LOCAL U GWDO STRESS" "m s-1" -state real DTAUY3D ikj misc 1 - rh "DTAUY3D" "LOCAL V GWDO STRESS" "m s-1" +state real DTAUY3D ikj misc 1 - rh "DTAUY3D" "LOCAL V GWDO STRESS" "m s-1" state real DUSFCG ij misc 1 - rh "DUSFCG" "COLUMN-INTEGRATED U GWDO STRESS" "Pa m s-1" state real DVSFCG ij misc 1 - rh "DVSFCG" "COLUMN-INTEGRATED V GWDO STRESS" "Pa m s-1" state real VAR2D ij misc 1 - i012rhdus "VAR" "OROGRAPHIC VARIANCE" "" "" @@ -841,10 +846,9 @@ state real dlg_bep ikj misc 1 Z - "dl state real dl_u_bep ikj misc 1 Z - "dl_u_bep" "urban length scale" "m" state real sf_bep ikj misc 1 Z - "sf_bep" "surface grid" "-" state real vl_bep ikj misc 1 Z - "vl_bep" "volume grid" "-" -# BOULAC PBL variables -state real tke_pbl ikj misc 1 - rh "tke_pbl" "TKE FROM Bougeault and Lacarrere" "m2 s-2" -state real el_pbl ikj misc 1 - h "el_pbl" "Length scale FROM Bougeault and Lacarrere" "m" -# Diagnostic PBL variables +state real tke_pbl ikj misc 1 - rh "tke_pbl" "TKE from PBL" "m2 s-2" +state real el_pbl ikj misc 1 - h "el_pbl" "Length scale from PBL" "m" +# Diagnostic BOULAC PBL variables state real wu_tur ikj misc 1 - r "wu_tur" "Turbulent flux of momentum(x)" "m2 s-2" state real wv_tur ikj misc 1 - r "wv_tur" "Turbulent flux of momentum(y)" "m2 s-2" state real wt_tur ikj misc 1 - r "wt_tur" "Turbulent flux of temperature" "K m s-1" @@ -857,7 +861,7 @@ state real HTOPR ij misc 1 - r "H state real HBOTR ij misc 1 - r "HBOTR" "BOT OF CONVECTION LEVEL FOR RADIATION" "" state real CUTOP ij misc 1 - r "CUTOP" "TOP OF CONVECTION LEVEL FROM CUMULUS PAR" "" state real CUBOT ij misc 1 - r "CUBOT" "BOT OF CONVECTION LEVEL FROM CUMULUS PAR" "" -state REAL CUPPT ij misc 1 - r "CUPPT" "ACCUMULATED CONVECTIVE RAIN SINC LAST CALL TO THE RADIATION" "" +state real CUPPT ij misc 1 - r "CUPPT" "ACCUMULATED CONVECTIVE RAIN SINC LAST CALL TO THE RADIATION" "" state real rswtoa ij misc 1 - - state real rlwtoa ij misc 1 - - state real czmean ij misc 1 - - @@ -958,7 +962,7 @@ state real tiso - misc - - i02rh "t state real max_msftx - misc - - rh "max_mstfx" "Max map factor in domain" "" state real max_msfty - misc - - rh "max_mstfy" "Max map factor in domain" "" -# State variables for Goddard LW and SW radiation +# State variables for Goddard LW and SW radiation state real TLWDN ij misc 1 - h "TLWDN" "TOA LW downwelling flux" "W m-2" state real TLWUP ij misc 1 - h "TLWUP" "TOA LW upwelling flux" "W m-2" state real SLWDN ij misc 1 - h "SLWDN" "Surface LW downwelling flux" "W m-2" @@ -969,7 +973,7 @@ state real SSWDN ij misc 1 - h "S state real SSWUP ij misc 1 - h "SSWUP" "Surface SW upwelling flux" "W m-2" # Other physics variables - + state real RUSHTEN ikj misc 1 - r "RUSHTEN" "COUPLED X WIND TENDENCY DUE TO SHALLOW CUMULUS SCHEME" "Pa m s-2" state real RVSHTEN ikj misc 1 - r "RVSHTEN" "COUPLED Y WIND TENDENCY DUE TO SHALLOW CUMULUS SCHEME" "Pa m s-2" state real RTHSHTEN ikj misc 1 - r "RTHSHTEN" "COUPLED THETA TENDENCY DUE TO SHALLOW CUMULUS SCHEME" "Pa K s-1" @@ -990,17 +994,17 @@ state real RQSCUTEN ikj misc 1 - r "R state real RQICUTEN ikj misc 1 - r "RQICUTEN" "COUPLED Q_I TENDENCY DUE TO CUMULUS SCHEME" "Pa kg kg-1 s-1" state real W0AVG ikj misc 1 - r "W0AVG" "AVERAGE VERTICAL VELOCITY FOR KF CUMULUS SCHEME" "m s-1" -state real RAINC ij misc 1 - rhdu "RAINC" "ACCUMULATED TOTAL CUMULUS PRECIPITATION" "mm" +state real RAINC ij misc 1 - rhdu "RAINC" "ACCUMULATED TOTAL CUMULUS PRECIPITATION" "mm" state real RAINSH ij misc 1 - rhdu "RAINSH" "ACCUMULATED SHALLOW CUMULUS PRECIPITATION" "mm" -state real RAINNC ij misc 1 - rhdu "RAINNC" "ACCUMULATED TOTAL GRID SCALE PRECIPITATION" "mm" +state real RAINNC ij misc 1 - rhdu "RAINNC" "ACCUMULATED TOTAL GRID SCALE PRECIPITATION" "mm" state integer I_RAINC ij misc 1 - rhd=(interp_fcni)u=(copy_fcni) "I_RAINC" "BUCKET FOR RAINC" "" state integer I_RAINNC ij misc 1 - rhd=(interp_fcni)u=(copy_fcni) "I_RAINNC" "BUCKET FOR RAINNC" "" state real PRATEC ij misc 1 - r "PRATEC" "PRECIP RATE FROM CUMULUS SCHEME" "mm s-1" state real PRATESH ij misc 1 - r "PRATESH" "PRECIP RATE FROM SHALLOW CUMULUS SCHEME" "mm s-1" -state real RAINCV ij misc 1 - r "RAINCV" "TIME-STEP CUMULUS PRECIPITATION" "mm" +state real RAINCV ij misc 1 - r "RAINCV" "TIME-STEP CUMULUS PRECIPITATION" "mm" state real RAINSHV ij misc 1 - r "RAINSHV" "TIME-STEP SHALLOW CUMULUS PRECIPITATION" "mm" state real RAINNCV ij misc 1 - r "RAINNCV" "TIME-STEP NONCONVECTIVE PRECIPITATION" "mm" -state real RAINBL ij misc 1 - r "RAINBL" "PBL TIME-STEP TOTAL PRECIPITATION" "mm" +state real RAINBL ij misc 1 - r "RAINBL" "PBL TIME-STEP TOTAL PRECIPITATION" "mm" state real SNOWNC ij misc 1 - rhdu "SNOWNC" "ACCUMULATED TOTAL GRID SCALE SNOW AND ICE" "mm" state real GRAUPELNC ij misc 1 - rhdu "GRAUPELNC" "ACCUMULATED TOTAL GRID SCALE GRAUPEL" "mm" state real HAILNC ij misc 1 - rhdu "HAILNC" "ACCUMULATED TOTAL GRID SCALE HAIL" "mm" @@ -1008,7 +1012,7 @@ state real SNOWNCV ij misc 1 - r "S state real GRAUPELNCV ij misc 1 - r "GRAUPELNCV" "TIME-STEP NONCONVECTIVE GRAUPEL" "mm" state real HAILNCV ij misc 1 - r "HAILNCV" "TIME-STEP NONCONVECTIVE HAIL" "mm" state real refl_10cm ikj dyn_em 1 - hdu "refl_10cm" "Radar reflectivity (lamda = 10 cm)" "dBZ" -state real NCA ij misc 1 - r "NCA" "COUNTER OF THE CLOUD RELAXATION TIME IN KF CUMULUS SCHEME" "" +state real NCA ij misc 1 - r "NCA" "COUNTER OF THE CLOUD RELAXATION TIME IN KF CUMULUS SCHEME" "" state integer LOWLYR ij misc 1 - - "LOWLYR" "INDEX OF LOWEST MODEL LAYER ABOVE THE GROUND IN BMJ SCHEME" "" state real MASS_FLUX ij misc 1 - r "MASS_FLUX" "DOWNDRAFT MASS FLUX FOR IN GRELL CUMULUS SCHEME" "mb hour-1" state real apr_gr ij misc 1 - r "APR_GR" "PRECIP FROM CLOSURE OLD_GRELL" "mm hour-1" @@ -1061,6 +1065,44 @@ state real GSW ij misc 1 - rd "G state real GLW ij misc 1 - rhd "GLW" "DOWNWARD LONG WAVE FLUX AT GROUND SURFACE" "W m-2" state real SWNORM ij misc 1 - rhd "SWNORM" "NORMAL SHORT WAVE FLUX AT GROUND SURFACE (SLOPE-DEPENDENT)" "W m-2" +# CLWRF-WRF4G +state real T2MIN ij misc 1 - rh3 "T2MIN" "MINIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "K" +state real T2MAX ij misc 1 - rh3 "T2MAX" "MAXIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "K" +state real TT2MIN ij misc 1 - rh3 "TT2MIN" "TIME OF MINIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real TT2MAX ij misc 1 - rh3 "TT2MAX" "TIME OF MAXIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real T2MEAN ij misc 1 - rh3 "T2MEAN" "MEAN TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "K" +state real T2STD ij misc 1 - rh3 "T2STD" "STANDARD DEV. TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "k" +state real Q2MIN ij misc 1 - rh3 "Q2MIN" "MINIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real Q2MAX ij misc 1 - rh3 "Q2MAX" "MAXIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real TQ2MIN ij misc 1 - rh3 "TQ2MIN" "TIME OF MINIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real TQ2MAX ij misc 1 - rh3 "TQ2MAX" "TIME OF MAXIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real Q2MEAN ij misc 1 - rh3 "Q2MEAN" "MEAN WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real Q2STD ij misc 1 - rh3 "Q2STD" "STANDARD DEV. WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real SKINTEMPMIN ij misc 1 - rh3 "SKINTEMPMIN" "MINIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "K" +state real SKINTEMPMAX ij misc 1 - rh3 "SKINTEMPMAX" "MAXIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "K" +state real TSKINTEMPMIN ij misc 1 - rh3 "TSKINTEMPMIN" "TIME OF MINIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "minute" +state real TSKINTEMPMAX ij misc 1 - rh3 "TSKINTEMPMAX" "TIME OF MAXIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "minute" +state real SKINTEMPMEAN ij misc 1 - rh3 "SKINTEMPMEAN" "MEAN SKIN TEMPERATURE IN CLWRFH HOURS" "K" +state real SKINTEMPSTD ij misc 1 - rh3 "SKINTEMPSTD" "STANDARD DEV. OF SKIN TEMPERATURE IN CLWRF HOURS" "K" +state real U10MAX ij misc 1 - rh3 "U10MAX" "MAXIMUM U AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real V10MAX ij misc 1 - rh3 "V10MAX" "MAXIMUM V AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real SPDUV10MAX ij misc 1 - rh3 "SPDUV10MAX" "MAXIMUM WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real TSPDUV10MAX ij misc 1 - rh3 "TSPDUV10MAX" "TIME OF MAXIMUM WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "minute" +state real U10MEAN ij misc 1 - rh3 "U10MEAN" "MEAN U AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real V10MEAN ij misc 1 - rh3 "V10MEAN" "MEAN V AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real SPDUV10MEAN ij misc 1 - rh3 "SPDUV10MEAN" "MEAN WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real U10STD ij misc 1 - rh3 "U10STD" "STANDARD DEV. U AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real V10STD ij misc 1 - rh3 "V10STD" "STANDARD DEV. V AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real SPDUV10STD ij misc 1 - rh3 "SPDUV10STD" "STANDARD DEV. WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real RAINCVMAX ij misc 1 - rh3 "RAINCVMAX" "MAXIMUM CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINNCVMAX ij misc 1 - rh3 "RAINNCVMAX" "MAXIMUM GRID SCALE PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real TRAINCVMAX ij misc 1 - rh3 "TRAINCVMAX" "TIME OF MAXIMUM CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "minute" +state real TRAINNCVMAX ij misc 1 - rh3 "TRAINNCVMAX" "TIME OF MAXIMUM GRID SCALE PRECIPITATION FLUX IN CLWRFH HOURS" "minute" +state real RAINCVMEAN ij misc 1 - rh3 "RAINCVMEAN" "MEAN CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINNCVMEAN ij misc 1 - rh3 "RAINNCVMEAN" "MEAN GRID SCALE PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINCVSTD ij misc 1 - rh3 "RAINCVSTD" "STANDARD DEV. CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINNCVSTD ij misc 1 - rh3 "RAINNCVSTD" "STANDARD DEV. GRID SCALE PRECIPITATION IN FLUX CLWRFH HOURS" "kg m-2 s-1" + # upward and downward clearsky and total diagnostic fluxes for CAM radiation state real ACSWUPT ij misc 1 - rhdu "ACSWUPT" "ACCUMULATED UPWELLING SHORTWAVE FLUX AT TOP" "J m-2" state real ACSWUPTC ij misc 1 - rhdu "ACSWUPTC" "ACCUMULATED UPWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2" @@ -1157,7 +1199,7 @@ state real lu_state p misc - - r i1 real th_phy ikj misc 1 - i1 real pi_phy ikj misc 1 - i1 real p_phy ikj misc 1 - -state real t_phy ikj misc 1 - r "T_PHY" "Temperature" "K" +state real t_phy ikj misc 1 - r "T_PHY" "Temperature" "K" i1 real u_phy ikj misc 1 - i1 real v_phy ikj misc 1 - i1 real dz8w ikj misc 1 Z @@ -1371,6 +1413,7 @@ rconfig logical adjust_input_times namelist,time_control 1 rconfig integer diag_print namelist,time_control 1 0 - "print out time series of model diagnostics" rconfig logical nocolons namelist,time_control 1 .false. - "nocolons" rconfig logical cycling namelist,time_control 1 .false. - "true for cycling (using wrfout file as input data)" +rconfig integer output_diagnostics namelist,time_control 1 0 # DFI namelist rconfig integer dfi_opt namelist,dfi_control 1 0 rh "dfi_opt" "" "" @@ -1420,10 +1463,12 @@ rconfig integer e_vert namelist,domains max_domains 31 rconfig integer num_metgrid_levels namelist,domains 1 27 irh "num_metgrid_levels" "" "" rconfig integer num_metgrid_soil_levels namelist,domains 1 4 irh "num_metgrid_soil_levels" "number of input levels or layers in 3D sm, st, sw arrays" "" rconfig real p_top_requested namelist,domains 1 5000 irh "p_top_requested" "Pa" "" +rconfig logical interp_theta namelist,domains 1 .true. irh "interp_theta" "inside real, vertically interpolate theta (T) or temperature (F)" "" rconfig integer interp_type namelist,domains 1 2 irh "interp_type" "1=interp in pressure, 2=interp in LOG pressure" "" rconfig integer vert_refine_fact namelist,domains 1 1 irh "vertical refinment factor for ndown" "" rconfig integer extrap_type namelist,domains 1 2 irh "extrap_type" "1= use 2 lowest levels, 2=constant" "" rconfig integer t_extrap_type namelist,domains 1 2 irh "t_extrap_type" "1=isothermal, 2=6.5 K/km, 3=adiabatic" "" +rconfig integer hypsometric_opt namelist,domains 1 1 irh "hypsometric_opt" "Z relates P, 1=linearly, 2=LOG-linearly" "" rconfig logical lowest_lev_from_sfc namelist,domains 1 .false. irh "lowest_lev_from_sfc" "" "" rconfig logical use_levels_below_ground namelist,domains 1 .true. irh "use_levels_below_ground" "T/F: use input data levels below input sfc pres" "" rconfig logical use_tavg_for_tsk namelist,domains 1 .false. irh "use_tavg_for_tsk" "T/F: use diurnal avg sfc temp for tsk" "" @@ -1513,8 +1558,8 @@ rconfig integer sf_sfclay_physics namelist,physics max_domains 0 rconfig integer sf_surface_physics namelist,physics max_domains 0 rh "sf_surface_physics" "" "" rconfig integer bl_pbl_physics namelist,physics max_domains 0 rh "bl_pbl_physics" "" "" rconfig integer sf_urban_physics namelist,physics max_domains 0 rh "sf_urban_physics" "activate urban model 0=no, 1=Noah_UCM 2=BEP_UCM" "" -rconfig real BLDT namelist,physics max_domains 0 h "BLDT" "" "" -rconfig integer cu_physics namelist,physics max_domains 0 rh "cu_physics" "" "" +rconfig real BLDT namelist,physics max_domains 0 h "BLDT" "" "" +rconfig integer cu_physics namelist,physics max_domains 0 rh "cu_physics" "" "" rconfig integer shcu_physics namelist,physics max_domains 0 rh "shcu_physics" "" "" rconfig integer cu_diag namelist,physics max_domains 0 rh "cu_diag" " additional t-averaged stuff for cuphys" "" rconfig integer kfeta_trigger namelist,physics 1 1 rh "KFETA Trigger function" "" "" @@ -1524,7 +1569,7 @@ rconfig integer ISFFLX namelist,physics 1 1 rconfig integer IFSNOW namelist,physics 1 0 irh "IFSNOW" "" "" rconfig integer ICLOUD namelist,physics 1 1 irh "ICLOUD" "" "" rconfig real swrad_scat namelist,physics 1 1 irh "SWRAD_SCAT" "SCATTERING FACTOR IN SWRAD" "" -rconfig integer surface_input_source namelist,physics 1 1 irh "surface_input_source" "1=static (fractional), 2=time dependent (dominant), 3=hybrid (not yet implemented)" "" +rconfig integer surface_input_source namelist,physics 1 1 irh "surface_input_source" "1=static (fractional), 2=time dependent (dominant), 3=dominant cateogry from metgrid" "" rconfig integer num_soil_layers namelist,physics 1 5 irh "num_soil_layers" "" "" rconfig integer num_urban_layers namelist,physics 1 400 irh "num_urban_layers" "" "" rconfig integer num_months namelist,physics 1 12 irh "num_months" "" "" @@ -1720,6 +1765,7 @@ rconfig real smdiv namelist,dynamics max_domains 0.1 rconfig real emdiv namelist,dynamics max_domains 0.01 h "emdiv" "" "" rconfig real epssm namelist,dynamics max_domains .1 h "epssm" "" "" rconfig logical non_hydrostatic namelist,dynamics max_domains .true. irh "non_hydrostatic" "" "" +rconfig logical use_input_w namelist,dynamics 1 .false. irh "use_input_w" "" "" rconfig integer time_step_sound namelist,dynamics max_domains 0 h "time_step_sound" "" "" rconfig integer h_mom_adv_order namelist,dynamics max_domains 5 rh "h_mom_adv_order" "" "" rconfig integer v_mom_adv_order namelist,dynamics max_domains 3 rh "v_mom_adv_order" "" "" @@ -1932,7 +1978,8 @@ package temfpblscheme bl_pbl_physics==10 - state:te_temf package kfetascheme cu_physics==1 - - package bmjscheme cu_physics==2 - - package gdscheme cu_physics==3 - - -package sasscheme cu_physics==4 - - +package sasscheme cu_physics==84 - - +package osasscheme cu_physics==4 - - package g3scheme cu_physics==5 - state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten,xmb_shallow,k22_shallow,kbcon_shallow,ktop_shallow package camzmscheme cu_physics==7 - state:precz,zmdt,zmdq,zmdice,zmdliq,evaptzm,fzsntzm,evsntzm,evapqzm,zmflxprc,zmflxsnw,zmntprpd,zmntsnpd,zmeiheat,cmfmc,cmfmcdzm,preccdzm,pconvb,pconvt,cape,zmmtu,zmmtv,zmmu,zmmd,zmupgu,zmupgd,zmvpgu,zmvpgd,zmicuu,zmicud,zmicvu,zmicvd package g3tave cu_diag==1 - state:GD_CLOUD,GD_CLOUD2,GD_CLDFR,RAINCV_A,RAINCV_B,GD_CLOUD_A,GD_CLOUD_B,GD_CLOUD2_A,GD_CLOUD2_B,kbcon_deep,ktop_deep,k22_deep @@ -1962,6 +2009,7 @@ package original moist_adv_opt==0 - - package positivedef moist_adv_opt==1 - - package monotonic moist_adv_opt==2 - - package tracer_test1 tracer_opt==2 - tracer:tr17_1,tr17_2,tr17_3,tr17_4,tr17_5,tr17_6,tr17_7,tr17_8 +package maxmin_output output_diagnostics==1 - state:t2min,t2max,tt2min,tt2max,t2mean,t2std,q2min,q2max,tq2min,tq2max,q2mean,q2std,skintempmin,skintempmax,tskintempmin,tskintempmax,skintempmean,skintempstd,u10max,v10max,spduv10max,tspduv10max,u10mean,v10mean,spduv10mean,u10std,v10std,spduv10std,raincvmax,rainncvmax,traincvmax,trainncvmax,raincvmean,rainncvmean,raincvstd,rainncvstd package dfi_setup dfi_stage==0 - - package dfi_bck dfi_stage==1 - - diff --git a/wrfv2_fire/Registry/Registry.EM_CHEM b/wrfv2_fire/Registry/Registry.EM_CHEM index c7f084b1..fa0e367c 100644 --- a/wrfv2_fire/Registry/Registry.EM_CHEM +++ b/wrfv2_fire/Registry/Registry.EM_CHEM @@ -353,7 +353,10 @@ state real zetatop - misc - - irh "zet state real cf1 - misc - - irh "cf1" "2nd order extrapolation constant" "" state real cf2 - misc - - irh "cf2" "2nd order extrapolation constant" "" state real cf3 - misc - - irh "cf3" "2nd order extrapolation constant" "" -state integer number_at_same_level - - - - - "number_at_same_level" "" "" +state integer number_at_same_level - - - - - "number_at_same_level" "" "" +state real radtacttime - - - - r "radtacttime" "RADTACTTIME" "LW SW ACTIVATION TIME in s" +state real bldtacttime - - - - r "bldtacttime" "BLDTACTTIME" "PBL ACTIVATION TIME in s" +state real cudtacttime - - - - r "cudtacttime" "CUDTACTTIME" "CPS ACTIVATION TIME in s" # State for derived time quantities. state integer itimestep - - - - rh "itimestep" "" "" @@ -805,10 +808,9 @@ state real dlg_bep ikj misc 1 Z - "dl state real dl_u_bep ikj misc 1 Z - "dl_u_bep" "urban length scale" "m" state real sf_bep ikj misc 1 Z - "sf_bep" "surface grid" "-" state real vl_bep ikj misc 1 Z - "vl_bep" "volume grid" "-" -# BOULAC PBL variables -state real tke_pbl ikj misc 1 - rh "tke_pbl" "TKE FROM Bougeault and Lacarrere" "m2 s-2" -state real el_pbl ikj misc 1 - h "el_pbl" "Length scale FROM Bougeault and Lacarrere" "m" -# Diagnostic PBL variables +state real tke_pbl ikj misc 1 - rh "tke_pbl" "TKE from PBL" "m2 s-2" +state real el_pbl ikj misc 1 - h "el_pbl" "Length scale from PBL" "m" +# Diagnostic BOULAC PBL variables state real wu_tur ikj misc 1 - r "wu_tur" "Turbulent flux of momentum(x)" "m2 s-2" state real wv_tur ikj misc 1 - r "wv_tur" "Turbulent flux of momentum(y)" "m2 s-2" state real wt_tur ikj misc 1 - r "wt_tur" "Turbulent flux of temperature" "K m s-1" @@ -1040,6 +1042,44 @@ state real GSW ij misc 1 - rd "G state real GLW ij misc 1 - rhd "GLW" "DOWNWARD LONG WAVE FLUX AT GROUND SURFACE" "W m-2" state real SWNORM ij misc 1 - rhd "SWNORM" "NORMAL SHORT WAVE FLUX AT GROUND SURFACE (SLOPE-DEPENDENT)" "W m-2" +# CLWRF-WRF4G +state real T2MIN ij misc 1 - rh3 "T2MIN" "MINIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "K" +state real T2MAX ij misc 1 - rh3 "T2MAX" "MAXIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "K" +state real TT2MIN ij misc 1 - rh3 "TT2MIN" "TIME OF MINIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real TT2MAX ij misc 1 - rh3 "TT2MAX" "TIME OF MAXIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real T2MEAN ij misc 1 - rh3 "T2MEAN" "MEAN TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "K" +state real T2STD ij misc 1 - rh3 "T2STD" "STANDARD DEV. TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "k" +state real Q2MIN ij misc 1 - rh3 "Q2MIN" "MINIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real Q2MAX ij misc 1 - rh3 "Q2MAX" "MAXIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real TQ2MIN ij misc 1 - rh3 "TQ2MIN" "TIME OF MINIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real TQ2MAX ij misc 1 - rh3 "TQ2MAX" "TIME OF MAXIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real Q2MEAN ij misc 1 - rh3 "Q2MEAN" "MEAN WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real Q2STD ij misc 1 - rh3 "Q2STD" "STANDARD DEV. WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real SKINTEMPMIN ij misc 1 - rh3 "SKINTEMPMIN" "MINIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "K" +state real SKINTEMPMAX ij misc 1 - rh3 "SKINTEMPMAX" "MAXIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "K" +state real TSKINTEMPMIN ij misc 1 - rh3 "TSKINTEMPMIN" "TIME OF MINIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "minute" +state real TSKINTEMPMAX ij misc 1 - rh3 "TSKINTEMPMAX" "TIME OF MAXIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "minute" +state real SKINTEMPMEAN ij misc 1 - rh3 "SKINTEMPMEAN" "MEAN SKIN TEMPERATURE IN CLWRFH HOURS" "K" +state real SKINTEMPSTD ij misc 1 - rh3 "SKINTEMPSTD" "STANDARD DEV. OF SKIN TEMPERATURE IN CLWRF HOURS" "K" +state real U10MAX ij misc 1 - rh3 "U10MAX" "MAXIMUM U AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real V10MAX ij misc 1 - rh3 "V10MAX" "MAXIMUM V AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real SPDUV10MAX ij misc 1 - rh3 "SPDUV10MAX" "MAXIMUM WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real TSPDUV10MAX ij misc 1 - rh3 "TSPDUV10MAX" "TIME OF MAXIMUM WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "minute" +state real U10MEAN ij misc 1 - rh3 "U10MEAN" "MEAN U AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real V10MEAN ij misc 1 - rh3 "V10MEAN" "MEAN V AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real SPDUV10MEAN ij misc 1 - rh3 "SPDUV10MEAN" "MEAN WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real U10STD ij misc 1 - rh3 "U10STD" "STANDARD DEV. U AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real V10STD ij misc 1 - rh3 "V10STD" "STANDARD DEV. V AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real SPDUV10STD ij misc 1 - rh3 "SPDUV10STD" "STANDARD DEV. WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real RAINCVMAX ij misc 1 - rh3 "RAINCVMAX" "MAXIMUM CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINNCVMAX ij misc 1 - rh3 "RAINNCVMAX" "MAXIMUM GRID SCALE PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real TRAINCVMAX ij misc 1 - rh3 "TRAINCVMAX" "TIME OF MAXIMUM CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "minute" +state real TRAINNCVMAX ij misc 1 - rh3 "TRAINNCVMAX" "TIME OF MAXIMUM GRID SCALE PRECIPITATION FLUX IN CLWRFH HOURS" "minute" +state real RAINCVMEAN ij misc 1 - rh3 "RAINCVMEAN" "MEAN CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINNCVMEAN ij misc 1 - rh3 "RAINNCVMEAN" "MEAN GRID SCALE PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINCVSTD ij misc 1 - rh3 "RAINCVSTD" "STANDARD DEV. CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINNCVSTD ij misc 1 - rh3 "RAINNCVSTD" "STANDARD DEV. GRID SCALE PRECIPITATION IN FLUX CLWRFH HOURS" "kg m-2 s-1" + # upward and downward clearsky and total diagnostic fluxes for CAM radiation state real ACSWUPT ij misc 1 - rhdu "ACSWUPT" "ACCUMULATED UPWELLING SHORTWAVE FLUX AT TOP" "J m-2" state real ACSWUPTC ij misc 1 - rhdu "ACSWUPTC" "ACCUMULATED UPWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2" @@ -1347,6 +1387,7 @@ rconfig logical adjust_input_times namelist,time_control 1 rconfig integer diag_print namelist,time_control 1 0 - "print out time series of model diagnostics" rconfig logical nocolons namelist,time_control 1 .false. - "nocolons" rconfig logical cycling namelist,time_control 1 .false. - "true for cycling (using wrfout file as input data)" +rconfig integer output_diagnostics namelist,time_control 1 0 # DFI namelist rconfig integer dfi_opt namelist,dfi_control 1 0 rh "dfi_opt" "" "" @@ -1395,10 +1436,12 @@ rconfig integer e_vert namelist,domains max_domains 31 rconfig integer num_metgrid_levels namelist,domains 1 27 irh "num_metgrid_levels" "" "" rconfig integer num_metgrid_soil_levels namelist,domains 1 4 irh "num_metgrid_soil_levels" "number of input levels or layers in 3D sm, st, sw arrays" "" rconfig real p_top_requested namelist,domains 1 5000 irh "p_top_requested" "Pa" "" +rconfig logical interp_theta namelist,domains 1 .true. irh "interp_theta" "inside real, vertically interpolate theta (T) or temperature (F)" "" rconfig integer interp_type namelist,domains 1 2 irh "interp_type" "1=interp in pressure, 2=interp in LOG pressure" "" rconfig integer vert_refine_fact namelist,domains 1 1 irh "vertical refinment factor for ndown" "" rconfig integer extrap_type namelist,domains 1 2 irh "extrap_type" "1= use 2 lowest levels, 2=constant" "" rconfig integer t_extrap_type namelist,domains 1 2 irh "t_extrap_type" "1=isothermal, 2=6.5 K/km, 3=adiabatic" "" +rconfig integer hypsometric_opt namelist,domains 1 1 irh "hypsometric_opt" "Z relates P, 1=linearly, 2=LOG-linearly" "" rconfig logical lowest_lev_from_sfc namelist,domains 1 .false. irh "lowest_lev_from_sfc" "" "" rconfig logical use_levels_below_ground namelist,domains 1 .true. irh "use_levels_below_ground" "T/F: use input data levels below input sfc pres" "" rconfig logical use_tavg_for_tsk namelist,domains 1 .false. irh "use_tavg_for_tsk" "T/F: use diurnal avg sfc temp for tsk" "" @@ -1497,7 +1540,7 @@ rconfig integer ISFFLX namelist,physics 1 1 rconfig integer IFSNOW namelist,physics 1 0 irh "IFSNOW" "" "" rconfig integer ICLOUD namelist,physics 1 1 irh "ICLOUD" "" "" rconfig real swrad_scat namelist,physics 1 1 irh "SWRAD_SCAT" "SCATTERING FACTOR IN SWRAD" "" -rconfig integer surface_input_source namelist,physics 1 1 irh "surface_input_source" "1=static (fractional), 2=time dependent (dominant), 3=hybrid (not yet implemented)" "" +rconfig integer surface_input_source namelist,physics 1 1 irh "surface_input_source" "1=static (fractional), 2=time dependent (dominant), 3=dominant cateogry from metgrid" "" rconfig integer num_soil_layers namelist,physics 1 5 irh "num_soil_layers" "" "" rconfig integer num_dust_layers namelist,physics 1 3 irh "num_dust_layers" "" "" rconfig integer num_urban_layers namelist,physics 1 400 irh "num_urban_layers" "" "" @@ -1695,6 +1738,7 @@ rconfig real smdiv namelist,dynamics max_domains 0.1 rconfig real emdiv namelist,dynamics max_domains 0.01 h "emdiv" "" "" rconfig real epssm namelist,dynamics max_domains .1 h "epssm" "" "" rconfig logical non_hydrostatic namelist,dynamics max_domains .true. irh "non_hydrostatic" "" "" +rconfig logical use_input_w namelist,dynamics 1 .false. irh "use_input_w" "" "" rconfig integer time_step_sound namelist,dynamics max_domains 0 h "time_step_sound" "" "" rconfig integer h_mom_adv_order namelist,dynamics max_domains 5 rh "h_mom_adv_order" "" "" rconfig integer v_mom_adv_order namelist,dynamics max_domains 3 rh "v_mom_adv_order" "" "" @@ -1909,7 +1953,8 @@ package temfpblscheme bl_pbl_physics==10 - state:te_temf package kfetascheme cu_physics==1 - - package bmjscheme cu_physics==2 - - package gdscheme cu_physics==3 - - -package sasscheme cu_physics==4 - - +package sasscheme cu_physics==84 - - +package osasscheme cu_physics==4 - - package g3scheme cu_physics==5 - state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten,xmb_shallow,k22_shallow,kbcon_shallow,ktop_shallow package camzmscheme cu_physics==7 - state:precz,zmdt,zmdq,zmdice,zmdliq,evaptzm,fzsntzm,evsntzm,evapqzm,zmflxprc,zmflxsnw,zmntprpd,zmntsnpd,zmeiheat,cmfmc,cmfmcdzm,preccdzm,pconvb,pconvt,cape,zmmtu,zmmtv,zmmu,zmmd,zmupgu,zmupgd,zmvpgu,zmvpgd,zmicuu,zmicud,zmicvu,zmicvd package g3tave cu_diag==1 - state:GD_CLOUD,GD_CLOUD2,GD_CLDFR,RAINCV_A,RAINCV_B,GD_CLOUD_A,GD_CLOUD_B,GD_CLOUD2_A,GD_CLOUD2_B,kbcon_deep,ktop_deep,k22_deep @@ -1938,6 +1983,7 @@ package restofwrf use_wps_input==0 - - package original moist_adv_opt==0 - - package positivedef moist_adv_opt==1 - - package monotonic moist_adv_opt==2 - - +package maxmin_output output_diagnostics==1 - state:t2min,t2max,tt2min,tt2max,t2mean,t2std,q2min,q2max,tq2min,tq2max,q2mean,q2std,skintempmin,skintempmax,tskintempmin,tskintempmax,skintempmean,skintempstd,u10max,v10max,spduv10max,tspduv10max,u10mean,v10mean,spduv10mean,u10std,v10std,spduv10std,raincvmax,rainncvmax,traincvmax,trainncvmax,raincvmean,rainncvmean,raincvstd,rainncvstd package dfi_setup dfi_stage==0 - - package dfi_bck dfi_stage==1 - - diff --git a/wrfv2_fire/Registry/Registry.EM_SST b/wrfv2_fire/Registry/Registry.EM_SST index 4fd40c4c..e9ba750a 100644 --- a/wrfv2_fire/Registry/Registry.EM_SST +++ b/wrfv2_fire/Registry/Registry.EM_SST @@ -208,6 +208,7 @@ state real v_upstream_x | dyn_em 1 - i3rh "V_ state real v_upstream_x_tend | dyn_em 1 - i3rh "V_UPSTREAM_X_TEND" "tendency upstream v x-advection" "m s-3" state real v_upstream_y | dyn_em 1 - i3rh "V_UPSTREAM_Y" "upstream v y-advection" "m s-2" state real v_upstream_y_tend | dyn_em 1 - i3rh "V_UPSTREAM_Y_TEND" "tendency upstream v y-advection" "m s-3" + state real th_largescale | dyn_em 1 - i3rh "TH_LARGESCALE" "SCM largescale theta" "K" state real th_largescale_tend | dyn_em 1 - i3rh "TH_LARGESCALE_TEND" "SCM tendency largescale theta" "K s-1" @@ -353,7 +354,10 @@ state real zetatop - misc - - irh "zet state real cf1 - misc - - irh "cf1" "2nd order extrapolation constant" "" state real cf2 - misc - - irh "cf2" "2nd order extrapolation constant" "" state real cf3 - misc - - irh "cf3" "2nd order extrapolation constant" "" -state integer number_at_same_level - - - - - "number_at_same_level" "" "" +state integer number_at_same_level - - - - - "number_at_same_level" "" "" +state real radtacttime - - - - r "radtacttime" "RADTACTTIME" "LW SW ACTIVATION TIME in s" +state real bldtacttime - - - - r "bldtacttime" "BLDTACTTIME" "PBL ACTIVATION TIME in s" +state real cudtacttime - - - - r "cudtacttime" "CUDTACTTIME" "CPS ACTIVATION TIME in s" # State for derived time quantities. state integer itimestep - - - - rh "itimestep" "" "" @@ -436,9 +440,6 @@ include registry.cam # Chem Scalars state real - ikjftb chem 1 - - - -# Tracer Scalars -state real - ikjftb tracer 1 - - - - # # Tracer Scalars: If you want full resolved and non-resolved dispersion, compile WRF-Chem # @@ -845,10 +846,9 @@ state real dlg_bep ikj misc 1 Z - "dl state real dl_u_bep ikj misc 1 Z - "dl_u_bep" "urban length scale" "m" state real sf_bep ikj misc 1 Z - "sf_bep" "surface grid" "-" state real vl_bep ikj misc 1 Z - "vl_bep" "volume grid" "-" -# BOULAC PBL variables -state real tke_pbl ikj misc 1 - rh "tke_pbl" "TKE FROM Bougeault and Lacarrere" "m2 s-2" -state real el_pbl ikj misc 1 - h "el_pbl" "Length scale FROM Bougeault and Lacarrere" "m" -# Diagnostic PBL variables +state real tke_pbl ikj misc 1 - rh "tke_pbl" "TKE from PBL" "m2 s-2" +state real el_pbl ikj misc 1 - h "el_pbl" "Length scale from PBL" "m" +# Diagnostic BOULAC PBL variables state real wu_tur ikj misc 1 - r "wu_tur" "Turbulent flux of momentum(x)" "m2 s-2" state real wv_tur ikj misc 1 - r "wv_tur" "Turbulent flux of momentum(y)" "m2 s-2" state real wt_tur ikj misc 1 - r "wt_tur" "Turbulent flux of temperature" "K m s-1" @@ -911,7 +911,7 @@ state real F_RIMEF_PHY ikj misc 1 - rhdu "F state real qndropsource ikj misc 1 - - "qndropsource" "Droplet number source" "#/kg/s" # Other Misc State Variables -state real h_diabatic ikj misc 1 - rdu "h_diabatic" "MICROPHYSICS LATENT HEATING" "K s-1" +state real h_diabatic ikj misc 1 - rhdu "h_diabatic" "MICROPHYSICS LATENT HEATING" "K s-1" state real msft ij misc 1 - i012rhdu=(copy_fcnm) "MAPFAC_M" "Map scale factor on mass grid" "" state real msfu ij misc 1 X i012rhdu=(copy_fcnm) "MAPFAC_U" "Map scale factor on u-grid" "" state real msfv ij misc 1 Y i012rhdu=(copy_fcnm) "MAPFAC_V" "Map scale factor on v-grid" "" @@ -1028,6 +1028,9 @@ state real xmb_shallow ij misc 1 - rh "X state integer k22_shallow ij misc 1 - rh "K22_SHALLOW" "K22 LEVEL FROM SHALLOW CONVECTION (G3 only)" "" state integer kbcon_shallow ij misc 1 - rh "KBCON_SHALLOW" "KBCON LEVEL FROM SHALLOW CONVECTION (G3 only)" "" state integer ktop_shallow ij misc 1 - rh "KTOP_SHALLOW" "KTOP LEVEL FROM SHALLOW CONVECTION (G3 only)" "" +state integer k22_deep ij misc 1 - h "K22_DEEP" "K22 LEVEL FROM DEEPCONVECTION (G3 only)" "" +state integer kbcon_deep ij misc 1 - h "KBCON_DEEP" "KBCON LEVEL FROM DEEP CONVECTION (G3 only)" "" +state integer ktop_deep ij misc 1 - h "KTOP_DEEP" "KTOP LEVEL FROM DEEP CONVECTION (G3 only)" "" state real xf_ens ije misc 1 Z r "XF_ENS" "MASS FLUX PDF IN GRELL CUMULUS SCHEME" "mb hour-1" state real pr_ens ije misc 1 Z r "PR_ENS" "PRECIP RATE PDF IN GRELL CUMULUS SCHEME" "mb hour-1" state real cugd_tten ikj misc 1 - r "CUGD_TTEN" "INITIAL TTENDENCY OUT OFF GRELL CUMULUS SCHEME" "K s-1" @@ -1035,6 +1038,16 @@ state real cugd_qvten ikj misc 1 - r "C state real cugd_ttens ikj misc 1 - r "CUGD_TTENS" "INITIAL SUBSIDENCE TTENDENCY OUT OFF GRELL CUMULUS SCHEME" "K s-1" state real cugd_qvtens ikj misc 1 - r "CUGD_QVTENS" "INITIAL SUBSIDNCE QTENDENCY OUT OFF GRELL CUMULUS SCHEME" "K s-1" state real cugd_qcten ikj misc 1 - r "CUGD_QCTEN" "INITIAL TEMPERATURE TENDENCY OUT OFF GRELL CUMULUS SCHEME" "K s-1" +state real GD_CLOUD ikj misc 1 - rh "GD_CLOUD" "CLOUD WATER/ICE MIXING RAIO IN GD CLOUD" "kg kg-1" +state real GD_CLOUD2 ikj misc 1 - rh "GD_CLOUD2" "TEST for GD CLOUD" "kg kg-1" +state real GD_CLDFR ikj misc 1 - rh "GD_CLDFR" "GD CLOUD Fraction" " ? " +state real RAINCV_A ij misc 1 - r "RAINCV_A" "taveragd TIME-STEP CUMULUS PRECIPITATION" "mm" +state real RAINCV_B ij misc 1 - rh "RAINCV_B" "taveragd TIME-STEP CUMULUS PRECIPITATION" "mm" +state real GD_CLOUD_A ikj misc 1 - r "GD_CLOUD_A" "taveragd CLOUD WATER MIXING RAIO IN GD CLOUD" "kg kg-1" +state real GD_CLOUD2_A ikj misc 1 - r "GD_CLOUD2_A" "taveragd cloud ice mix ratio in GD" "kg kg-1" +state real GD_CLOUD_B ikj misc 1 - rh "GD_CLOUD_B" "taveragd CLOUD WATER MIXING RAIO IN GD CLOUD" "kg kg-1" +state real GD_CLOUD2_B ikj misc 1 - rh "GD_CLOUD2_B" "taveragd cloud ice mix ratio in GD" "kg kg-1" +state integer STEPAVE_COUNT - misc 1 - rh "STEPAVE_COUNT" "time steps contained in averages for convective transport" "" state real RTHFTEN ikj misc 1 - r "RTHFTEN" "TEMPERATURE TENDENCY USED IN GRELL CUMULUS SCHEME" "K s-1" state real RQVFTEN ikj misc 1 - r "RQVFTEN" "MOISTURE TENDENCY USED IN GRELL CUMULUS SCHEME" "kg s-1" @@ -1043,7 +1056,7 @@ state integer STEPCU - misc 1 - r "S state real RTHRATEN ikj misc 1 - rd "RTHRATEN" "COUPLED THETA TENDENCY DUE TO RADIATION" "Pa K s-1" state real RTHRATENLW ikj misc 1 - r "RTHRATLW" "UNCOUPLED THETA TENDENCY DUE TO LONG WAVE RADIATION" "K s-1" state real RTHRATENSW ikj misc 1 - r "RTHRATSW" "UNCOUPLED THETA TENDENCY DUE TO SHORT WAVE RADIATION" "K s-1" -state real CLDFRA ikj misc 1 - r "CLDFRA" "CLOUD FRACTION" "" +state real CLDFRA ikj misc 1 - rh "CLDFRA" "CLOUD FRACTION" "" state real CLDFRA_OLD ikj misc 1 - r "CLDFRA_OLD" "previous time level cldfra" "" state real SWDOWN ij misc 1 - rhd "SWDOWN" "DOWNWARD SHORT WAVE FLUX AT GROUND SURFACE" "W m-2" @@ -1052,6 +1065,44 @@ state real GSW ij misc 1 - rd "G state real GLW ij misc 1 - rhd "GLW" "DOWNWARD LONG WAVE FLUX AT GROUND SURFACE" "W m-2" state real SWNORM ij misc 1 - rhd "SWNORM" "NORMAL SHORT WAVE FLUX AT GROUND SURFACE (SLOPE-DEPENDENT)" "W m-2" +# CLWRF-WRF4G +state real T2MIN ij misc 1 - rh3 "T2MIN" "MINIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "K" +state real T2MAX ij misc 1 - rh3 "T2MAX" "MAXIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "K" +state real TT2MIN ij misc 1 - rh3 "TT2MIN" "TIME OF MINIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real TT2MAX ij misc 1 - rh3 "TT2MAX" "TIME OF MAXIMUM TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real T2MEAN ij misc 1 - rh3 "T2MEAN" "MEAN TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "K" +state real T2STD ij misc 1 - rh3 "T2STD" "STANDARD DEV. TEMPERATURE AT 2M HEIGHT IN CLWRFH HOURS" "k" +state real Q2MIN ij misc 1 - rh3 "Q2MIN" "MINIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real Q2MAX ij misc 1 - rh3 "Q2MAX" "MAXIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real TQ2MIN ij misc 1 - rh3 "TQ2MIN" "TIME OF MINIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real TQ2MAX ij misc 1 - rh3 "TQ2MAX" "TIME OF MAXIMUM WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "minute" +state real Q2MEAN ij misc 1 - rh3 "Q2MEAN" "MEAN WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real Q2STD ij misc 1 - rh3 "Q2STD" "STANDARD DEV. WATER VAPOR MIX. RAT. AT 2M HEIGHT IN CLWRFH HOURS" "kg kg-1" +state real SKINTEMPMIN ij misc 1 - rh3 "SKINTEMPMIN" "MINIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "K" +state real SKINTEMPMAX ij misc 1 - rh3 "SKINTEMPMAX" "MAXIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "K" +state real TSKINTEMPMIN ij misc 1 - rh3 "TSKINTEMPMIN" "TIME OF MINIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "minute" +state real TSKINTEMPMAX ij misc 1 - rh3 "TSKINTEMPMAX" "TIME OF MAXIMUM SKIN TEMPERATURE IN CLWRFH HOURS" "minute" +state real SKINTEMPMEAN ij misc 1 - rh3 "SKINTEMPMEAN" "MEAN SKIN TEMPERATURE IN CLWRFH HOURS" "K" +state real SKINTEMPSTD ij misc 1 - rh3 "SKINTEMPSTD" "STANDARD DEV. OF SKIN TEMPERATURE IN CLWRF HOURS" "K" +state real U10MAX ij misc 1 - rh3 "U10MAX" "MAXIMUM U AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real V10MAX ij misc 1 - rh3 "V10MAX" "MAXIMUM V AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real SPDUV10MAX ij misc 1 - rh3 "SPDUV10MAX" "MAXIMUM WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real TSPDUV10MAX ij misc 1 - rh3 "TSPDUV10MAX" "TIME OF MAXIMUM WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "minute" +state real U10MEAN ij misc 1 - rh3 "U10MEAN" "MEAN U AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real V10MEAN ij misc 1 - rh3 "V10MEAN" "MEAN V AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real SPDUV10MEAN ij misc 1 - rh3 "SPDUV10MEAN" "MEAN WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real U10STD ij misc 1 - rh3 "U10STD" "STANDARD DEV. U AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real V10STD ij misc 1 - rh3 "V10STD" "STANDARD DEV. V AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real SPDUV10STD ij misc 1 - rh3 "SPDUV10STD" "STANDARD DEV. WIND SPEED AT 10M HEIGHT IN CLWRFH HOURS" "m s-1" +state real RAINCVMAX ij misc 1 - rh3 "RAINCVMAX" "MAXIMUM CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINNCVMAX ij misc 1 - rh3 "RAINNCVMAX" "MAXIMUM GRID SCALE PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real TRAINCVMAX ij misc 1 - rh3 "TRAINCVMAX" "TIME OF MAXIMUM CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "minute" +state real TRAINNCVMAX ij misc 1 - rh3 "TRAINNCVMAX" "TIME OF MAXIMUM GRID SCALE PRECIPITATION FLUX IN CLWRFH HOURS" "minute" +state real RAINCVMEAN ij misc 1 - rh3 "RAINCVMEAN" "MEAN CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINNCVMEAN ij misc 1 - rh3 "RAINNCVMEAN" "MEAN GRID SCALE PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINCVSTD ij misc 1 - rh3 "RAINCVSTD" "STANDARD DEV. CUMULUS PRECIPITATION FLUX IN CLWRFH HOURS" "kg m-2 s-1" +state real RAINNCVSTD ij misc 1 - rh3 "RAINNCVSTD" "STANDARD DEV. GRID SCALE PRECIPITATION IN FLUX CLWRFH HOURS" "kg m-2 s-1" + # upward and downward clearsky and total diagnostic fluxes for CAM radiation state real ACSWUPT ij misc 1 - rhdu "ACSWUPT" "ACCUMULATED UPWELLING SHORTWAVE FLUX AT TOP" "J m-2" state real ACSWUPTC ij misc 1 - rhdu "ACSWUPTC" "ACCUMULATED UPWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2" @@ -1149,7 +1200,6 @@ i1 real th_phy ikj misc 1 - i1 real pi_phy ikj misc 1 - i1 real p_phy ikj misc 1 - state real t_phy ikj misc 1 - r "T_PHY" "Temperature" "K" - i1 real u_phy ikj misc 1 - i1 real v_phy ikj misc 1 - i1 real dz8w ikj misc 1 Z @@ -1363,6 +1413,7 @@ rconfig logical adjust_input_times namelist,time_control 1 rconfig integer diag_print namelist,time_control 1 0 - "print out time series of model diagnostics" rconfig logical nocolons namelist,time_control 1 .false. - "nocolons" rconfig logical cycling namelist,time_control 1 .false. - "true for cycling (using wrfout file as input data)" +rconfig integer output_diagnostics namelist,time_control 1 0 # DFI namelist rconfig integer dfi_opt namelist,dfi_control 1 0 rh "dfi_opt" "" "" @@ -1395,6 +1446,7 @@ rconfig integer min_time_step namelist,domains max_domains -1 rconfig integer max_time_step namelist,domains max_domains -1 h "max_time_step" rconfig real target_cfl namelist,domains max_domains 1.2 h "target_cfl" rconfig real target_hcfl namelist,domains max_domains 0.84 h "target_hcfl" + rconfig integer max_step_increase_pct namelist,domains max_domains 5 h "max_step_increase_pct" rconfig integer starting_time_step namelist,domains max_domains -1 h "starting_time_step" rconfig logical step_to_output_time namelist,domains 1 .true. h "step_to_output_time" @@ -1411,10 +1463,12 @@ rconfig integer e_vert namelist,domains max_domains 31 rconfig integer num_metgrid_levels namelist,domains 1 27 irh "num_metgrid_levels" "" "" rconfig integer num_metgrid_soil_levels namelist,domains 1 4 irh "num_metgrid_soil_levels" "number of input levels or layers in 3D sm, st, sw arrays" "" rconfig real p_top_requested namelist,domains 1 5000 irh "p_top_requested" "Pa" "" +rconfig logical interp_theta namelist,domains 1 .true. irh "interp_theta" "inside real, vertically interpolate theta (T) or temperature (F)" "" rconfig integer interp_type namelist,domains 1 2 irh "interp_type" "1=interp in pressure, 2=interp in LOG pressure" "" rconfig integer vert_refine_fact namelist,domains 1 1 irh "vertical refinment factor for ndown" "" rconfig integer extrap_type namelist,domains 1 2 irh "extrap_type" "1= use 2 lowest levels, 2=constant" "" rconfig integer t_extrap_type namelist,domains 1 2 irh "t_extrap_type" "1=isothermal, 2=6.5 K/km, 3=adiabatic" "" +rconfig integer hypsometric_opt namelist,domains 1 1 irh "hypsometric_opt" "Z relates P, 1=linearly, 2=LOG-linearly" "" rconfig logical lowest_lev_from_sfc namelist,domains 1 .false. irh "lowest_lev_from_sfc" "" "" rconfig logical use_levels_below_ground namelist,domains 1 .true. irh "use_levels_below_ground" "T/F: use input data levels below input sfc pres" "" rconfig logical use_tavg_for_tsk namelist,domains 1 .false. irh "use_tavg_for_tsk" "T/F: use diurnal avg sfc temp for tsk" "" @@ -1507,6 +1561,7 @@ rconfig integer sf_urban_physics namelist,physics max_domains 0 rconfig real BLDT namelist,physics max_domains 0 h "BLDT" "" "" rconfig integer cu_physics namelist,physics max_domains 0 rh "cu_physics" "" "" rconfig integer shcu_physics namelist,physics max_domains 0 rh "shcu_physics" "" "" +rconfig integer cu_diag namelist,physics max_domains 0 rh "cu_diag" " additional t-averaged stuff for cuphys" "" rconfig integer kfeta_trigger namelist,physics 1 1 rh "KFETA Trigger function" "" "" rconfig real CUDT namelist,physics max_domains 0 h "CUDT" "" "" rconfig real GSMDT namelist,physics max_domains 0 h "GSMDT" "" "" @@ -1514,7 +1569,7 @@ rconfig integer ISFFLX namelist,physics 1 1 rconfig integer IFSNOW namelist,physics 1 0 irh "IFSNOW" "" "" rconfig integer ICLOUD namelist,physics 1 1 irh "ICLOUD" "" "" rconfig real swrad_scat namelist,physics 1 1 irh "SWRAD_SCAT" "SCATTERING FACTOR IN SWRAD" "" -rconfig integer surface_input_source namelist,physics 1 1 irh "surface_input_source" "1=static (fractional), 2=time dependent (dominant), 3=hybrid (not yet implemented)" "" +rconfig integer surface_input_source namelist,physics 1 1 irh "surface_input_source" "1=static (fractional), 2=time dependent (dominant), 3=dominant cateogry from metgrid" "" rconfig integer num_soil_layers namelist,physics 1 5 irh "num_soil_layers" "" "" rconfig integer num_urban_layers namelist,physics 1 400 irh "num_urban_layers" "" "" rconfig integer num_months namelist,physics 1 12 irh "num_months" "" "" @@ -1527,6 +1582,7 @@ rconfig integer cugd_avedx namelist,physics 1 1 rconfig integer clos_choice namelist,physics 1 0 rh "clos_choice" "" "" rconfig integer imomentum namelist,physics 1 0 rh "imomentum" "momentum transport in G3 scheme" "" rconfig integer ishallow namelist,physics 1 0 rh "ishallow" "shallow convection in G3 scheme" "" +rconfig real convtrans_avglen_m namelist,physics 1 30 rh "convtrans_avglen_m" "averaging time for convective transport output variables (minutes)" "" rconfig integer chem_opt namelist,physics max_domains 0 rh "chem_opt" "" "" rconfig integer num_land_cat namelist,physics 1 24 - "num_land_cat" "" "" rconfig integer num_soil_cat namelist,physics 1 16 - "num_soil_cat" "" "" @@ -1709,6 +1765,7 @@ rconfig real smdiv namelist,dynamics max_domains 0.1 rconfig real emdiv namelist,dynamics max_domains 0.01 h "emdiv" "" "" rconfig real epssm namelist,dynamics max_domains .1 h "epssm" "" "" rconfig logical non_hydrostatic namelist,dynamics max_domains .true. irh "non_hydrostatic" "" "" +rconfig logical use_input_w namelist,dynamics 1 .false. irh "use_input_w" "" "" rconfig integer time_step_sound namelist,dynamics max_domains 0 h "time_step_sound" "" "" rconfig integer h_mom_adv_order namelist,dynamics max_domains 5 rh "h_mom_adv_order" "" "" rconfig integer v_mom_adv_order namelist,dynamics max_domains 3 rh "v_mom_adv_order" "" "" @@ -1830,7 +1887,6 @@ rconfig integer td_ewfy namelist,physics 1 0 - - "" "extent of wind rconfig integer td_pwfx namelist,physics 1 1 - - "" "southwest corner of wind farm in x-cells" rconfig integer td_pwfy namelist,physics 1 1 - - "" "southwest corner of wind farm in y-cells" - # #--------------------------------------------------------------------------------------------------------------------------------------- # Package Declarations @@ -1869,7 +1925,6 @@ package thompson_dfi mp_physics_dfi==8 - dfi_moist:dfi package milbrandt2mom_dfi mp_physics_dfi==9 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg,dfi_qh;dfi_scalar:dfi_qnc,dfi_qnr,dfi_qni,dfi_qns,dfi_qng,dfi_qnh package morr_two_moment_dfi mp_physics_dfi==10 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qni,dfi_qns,dfi_qnr,dfi_qng #package milbrandt3mom_dfi mp_physics_dfi==12 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg,dfi_qh;dfi_scalar:dfi_qnc,dfi_qnr,dfi_qni,dfi_qns,dfi_qng,dfi_qnh,dfi_qzr,dfi_qzi,dfi_qzs,dfi_qzg,dfi_qzh -package sbu_ylinscheme_dfi mp_physics==13 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs;state:rimi package wdm5scheme_dfi mp_physics_dfi==14 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs;dfi_scalar:dfi_qnn,dfi_qnc,dfi_qnr package wdm6scheme_dfi mp_physics_dfi==16 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qnn,dfi_qnc,dfi_qnr @@ -1923,10 +1978,12 @@ package temfpblscheme bl_pbl_physics==10 - state:te_temf package kfetascheme cu_physics==1 - - package bmjscheme cu_physics==2 - - package gdscheme cu_physics==3 - - -package sasscheme cu_physics==4 - - +package sasscheme cu_physics==84 - - +package osasscheme cu_physics==4 - - package g3scheme cu_physics==5 - state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten,xmb_shallow,k22_shallow,kbcon_shallow,ktop_shallow -package tiedtkescheme cu_physics==6 package camzmscheme cu_physics==7 - state:precz,zmdt,zmdq,zmdice,zmdliq,evaptzm,fzsntzm,evsntzm,evapqzm,zmflxprc,zmflxsnw,zmntprpd,zmntsnpd,zmeiheat,cmfmc,cmfmcdzm,preccdzm,pconvb,pconvt,cape,zmmtu,zmmtv,zmmu,zmmd,zmupgu,zmupgd,zmvpgu,zmvpgd,zmicuu,zmicud,zmicvu,zmicvd +package g3tave cu_diag==1 - state:GD_CLOUD,GD_CLOUD2,GD_CLDFR,RAINCV_A,RAINCV_B,GD_CLOUD_A,GD_CLOUD_B,GD_CLOUD2_A,GD_CLOUD2_B,kbcon_deep,ktop_deep,k22_deep +package tiedtkescheme cu_physics==6 - - package nsasscheme cu_physics==14 - - package kfscheme cu_physics==99 - - @@ -1952,6 +2009,7 @@ package original moist_adv_opt==0 - - package positivedef moist_adv_opt==1 - - package monotonic moist_adv_opt==2 - - package tracer_test1 tracer_opt==2 - tracer:tr17_1,tr17_2,tr17_3,tr17_4,tr17_5,tr17_6,tr17_7,tr17_8 +package maxmin_output output_diagnostics==1 - state:t2min,t2max,tt2min,tt2max,t2mean,t2std,q2min,q2max,tq2min,tq2max,q2mean,q2std,skintempmin,skintempmax,tskintempmin,tskintempmax,skintempmean,skintempstd,u10max,v10max,spduv10max,tspduv10max,u10mean,v10mean,spduv10mean,u10std,v10std,spduv10std,raincvmax,rainncvmax,traincvmax,trainncvmax,raincvmean,rainncvmean,raincvstd,rainncvstd package dfi_setup dfi_stage==0 - - package dfi_bck dfi_stage==1 - - @@ -2223,4 +2281,3 @@ xpose XPOSE_SPECTRAL_NUDGING dyn_em dif_analysis,dif_xxx,dif_yyy include registry.fire include registry.avgflx include registry.stoch - diff --git a/wrfv2_fire/Registry/Registry.NMM b/wrfv2_fire/Registry/Registry.NMM index c4aada34..2e6064b4 100644 --- a/wrfv2_fire/Registry/Registry.NMM +++ b/wrfv2_fire/Registry/Registry.NMM @@ -1209,7 +1209,8 @@ package temfpblscheme bl_pbl_physics==10 - - package kfetascheme cu_physics==1 - - package bmjscheme cu_physics==2 - - package gdscheme cu_physics==3 - - -package sasscheme cu_physics==4 - - +package sasscheme cu_physics==84 - - +package osasscheme cu_physics==4 - - package g3scheme cu_physics==5 - - package camzmscheme cu_physics==7 - - package tiedtkescheme cu_physics==6 - - diff --git a/wrfv2_fire/Registry/Registry.NMM_CHEM b/wrfv2_fire/Registry/Registry.NMM_CHEM index 1d68b80e..77b010a0 100755 --- a/wrfv2_fire/Registry/Registry.NMM_CHEM +++ b/wrfv2_fire/Registry/Registry.NMM_CHEM @@ -1248,7 +1248,8 @@ package temfpblscheme bl_pbl_physics==10 - - package kfetascheme cu_physics==1 - - package bmjscheme cu_physics==2 - - package gdscheme cu_physics==3 - - -package sasscheme cu_physics==4 - - +package sasscheme cu_physics==84 - - +package osasscheme cu_physics==4 - - package g3scheme cu_physics==5 - - package tiedtkescheme cu_physics==6 - - package camzmscheme cu_physics==7 - - diff --git a/wrfv2_fire/Registry/Registry.NMM_NEST b/wrfv2_fire/Registry/Registry.NMM_HWRF similarity index 97% copy from wrfv2_fire/Registry/Registry.NMM_NEST copy to wrfv2_fire/Registry/Registry.NMM_HWRF index a95f7595..1006eeaf 100644 --- a/wrfv2_fire/Registry/Registry.NMM_NEST +++ b/wrfv2_fire/Registry/Registry.NMM_HWRF @@ -158,7 +158,7 @@ state real cwmnest_bt ijk dyn_nmm 1 - r # For the moving nest. This is gopal's doing # -state real pdyn ij dyn_nmm 1 - r "PDYN" "DYNAMIC PRESSURE USED FOR TRACKING GRID MOTION" +state real pdyn ij dyn_nmm 1 - rh "PDYN" "DYNAMIC PRESSURE USED FOR TRACKING GRID MOTION" state real mslp ij dyn_nmm 1 - rh "MSLP" "MSLP USED TO DETERMINE STORM LOCATION" state real sqws ij dyn_nmm 1 - r "SQWS" "SQUARE OF WIND SPEED AT LEVEL 10" state integer xloc - dyn_nmm 2 - r "XLOC" "I-LOCATION OF MINIMUM DYNAMIC PRESSURE" @@ -232,9 +232,14 @@ state real sice ij dyn_nmm 1 - irhd=(interp_hnear_nmm: # # module_VRBLS # -state integer ntsd - dyn_nmm - - r "NTSD" "Number of timesteps done" "" +state integer ntsd - dyn_nmm - - rh "NTSD" "Number of timesteps done" "" state integer nstart_hour - dyn_nmm - - r "NSTART_HOUR" "Forecast hour at start of integration" "" -state real pd ijb dyn_nmm 1 - i01rhu=(nmm_feedback:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4)d=(interp_mass_nmm:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4,Z3D,HRES_FIS,SM,PDTOP,PT,PSTD,KZMAX)f=(nmm_bdymass_hinterp:pdnest_b,pdnest_bt,IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4,Z3D,HRES_FIS,SM,PDTOP,PT,PSTD,KZMAX) "PD" "Mass at I,J in the sigma domain" "Pa" + +# Disable PD feedback. Suggested by Gopal, tested by Sam Trahan -- Mar. 2011 +state real pd ijb dyn_nmm 1 - i01rhd=(interp_mass_nmm:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4,Z3D,HRES_FIS,SM,PDTOP,PT,PSTD,KZMAX)f=(nmm_bdymass_hinterp:pdnest_b,pdnest_bt,IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4,Z3D,HRES_FIS,SM,PDTOP,PT,PSTD,KZMAX) "PD" "Mass at I,J in the sigma domain" "Pa" + +# To reenable, use this line instead: +# state real pd ijb dyn_nmm 1 - i01rhu=(nmm_feedback:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4)d=(interp_mass_nmm:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4,Z3D,HRES_FIS,SM,PDTOP,PT,PSTD,KZMAX)f=(nmm_bdymass_hinterp:pdnest_b,pdnest_bt,IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4,Z3D,HRES_FIS,SM,PDTOP,PT,PSTD,KZMAX) "PD" "Mass at I,J in the sigma domain" "Pa" state real fis ij dyn_nmm 1 - i01rh "FIS" "Surface geopotential" "m2 s-2" state real res ij dyn_nmm 1 - irh "RES" "Reciprocal of surface sigma" "" state real t ijkb dyn_nmm 1 - i01rhu=(nmm_feedback:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4)d=(interp_scalar_nmm:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4,T3D,PD,PSTD,PDTOP,PT,ETA1,ETA2)f=(nmm_bdy_scalar:dt,tnest_b,tnest_bt,IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4,T3d,PD,PSTD,PDTOP,PT,ETA1,ETA2) "T" "Sensible temperature" "K" @@ -485,7 +490,7 @@ state real rswin ij dyn_nmm 1 - rhd=(interp_h_nmm:IIH,JJH,HB state real rswinc ij dyn_nmm 1 - rh "RSWINC" "Clear-sky equivalent of RSWIN" "W m-2" state real rswout ij dyn_nmm 1 - rh "RSWOUT" "Upward shortwave at surface" "W m-2" #for HWRF: add to restart -state real rswtoa ij dyn_nmm 1 - r "RSWTOA" "Outgoing SW flux at top of atmos" "W m-2" +state real rswtoa ij dyn_nmm 1 - rh "RSWTOA" "Outgoing SW flux at top of atmos" "W m-2" #end HWRF state real aswin ij dyn_nmm 1 - rh "ASWIN" "Accum SW down at surface" "W m-2" state real aswout ij dyn_nmm 1 - rh "ASWOUT" "Accum RSWOUT" "W m-2" @@ -503,11 +508,11 @@ state real t02_min ij dyn_nmm 1 - rh "T02_MIN" "Hourly Min state real t02_max ij dyn_nmm 1 - rh "T02_MAX" "Hourly Max Shelter Temperature" "K" state real rh02_min ij dyn_nmm 1 - rh "RH02_MIN" "Hourly Min Relative Humidity" "" state real rh02_max ij dyn_nmm 1 - rh "RH02_MAX" "Hourly Max Relative Humidity" "" -state real rlwtt ijk dyn_nmm 1 - rd=(interp_hnear_nmm:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4) "RLWTT" "Longwave temperature tendency" "K s-1" -state real rswtt ijk dyn_nmm 1 - rd=(interp_hnear_nmm:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4) "RSWTT" "Shortwave temperature tendency" "K s-1" +state real rlwtt ijk dyn_nmm 1 - rhd=(interp_hnear_nmm:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4) "RLWTT" "Longwave temperature tendency" "K s-1" +state real rswtt ijk dyn_nmm 1 - rhd=(interp_hnear_nmm:IIH,JJH,HBWGT1,HBWGT2,HBWGT3,HBWGT4) "RSWTT" "Shortwave temperature tendency" "K s-1" #for HWRF: add to restart -state real tcucn ijk dyn_nmm 1 - r "TCUCN" "Accum convec temperature tendency" "K s-1" -state real train ijk dyn_nmm 1 - r "TRAIN" "Accum stratiform temp tendency" "K s-1" +state real tcucn ijk dyn_nmm 1 - rh "TCUCN" "Accum convec temperature tendency" "K s-1" +state real train ijk dyn_nmm 1 - rh "TRAIN" "Accum stratiform temp tendency" "K s-1" #end HWRF state integer ncfrcv ij dyn_nmm 1 - irh "NCFRCV" "# times convec cloud >0 between rad calls" "" state integer ncfrst ij dyn_nmm 1 - irh "NCFRST" "# times stratiform cloud >0 between rad calls" "" @@ -1070,7 +1075,7 @@ rconfig integer sf_urban_physics namelist,physics max_domains 0 rconfig logical usemonalb namelist,physics 1 .true. h "usemonalb" "use 2d field vs table values false=table, True=2d" "" rconfig logical rdmaxalb namelist,physics 1 .true. h "rdmaxalb" "false set it to table values" "" rconfig logical rdlai2d namelist,physics 1 .false. h "rdlai2d" "false set it to table values" "" -rconfig integer gwd_opt namelist,physics max_domains 0 irh "gwd_opt" "activate gravity wave drag: 0=off, 1=ARW, 2=NMM" "" +rconfig integer gwd_opt namelist,physics max_domains 2 irh "gwd_opt" "activate gravity wave drag: 0=off, 1=ARW, 2=NMM" "" rconfig integer iz0tlnd namelist,physics 1 0 h "iz0tlnd" "switch to control land thermal roughness length" "" @@ -1081,15 +1086,15 @@ rconfig integer nphs namelist,physics max_domains 10 rconfig integer ncnvc namelist,physics max_domains 10 irh "ncnvc" "fundamental timesteps between calls to NMM convection" rconfig integer nrads namelist,physics max_domains 200 irh "nrads" "fundamental timesteps between calls to NMM shortwave radiation" rconfig integer nradl namelist,physics max_domains 200 irh "nradl" "fundamental timesteps between calls to NMM longwave radiation" -rconfig real tprec namelist,physics max_domains 3. irh "tprec" "number of hours in bucket for total precipitation" -rconfig real theat namelist,physics max_domains 6. irh "theat" "number of hours in bucket for gridscale and convective heating rates" -rconfig real tclod namelist,physics max_domains 6. irh "tclod" "number of hours in bucket for cloud amounts" -rconfig real trdsw namelist,physics max_domains 6. irh "trdsw" "number of hours in bucket for short wave fluxes" -rconfig real trdlw namelist,physics max_domains 6. irh "trdlw" "number of hours in bucket for long wave fluxes" -rconfig real tsrfc namelist,physics max_domains 6. irh "tsrfc" "number of hours in bucket for evaporation / sfc fluxes" +rconfig real tprec namelist,physics max_domains 385. irh "tprec" "number of hours in bucket for total precipitation" +rconfig real theat namelist,physics max_domains 385. irh "theat" "number of hours in bucket for gridscale and convective heating rates" +rconfig real tclod namelist,physics max_domains 385. irh "tclod" "number of hours in bucket for cloud amounts" +rconfig real trdsw namelist,physics max_domains 385. irh "trdsw" "number of hours in bucket for short wave fluxes" +rconfig real trdlw namelist,physics max_domains 385. irh "trdlw" "number of hours in bucket for long wave fluxes" +rconfig real tsrfc namelist,physics max_domains 385. irh "tsrfc" "number of hours in bucket for evaporation / sfc fluxes" rconfig logical pcpflg namelist,physics max_domains .false. irh "pcpflg" "logical switch that turns on/off the precipitation assimilation" rconfig integer sigma namelist,physics max_domains 1 irh "sigma" "logical switch for NMM vertical coordinate (sigma or hybrid)" -rconfig real sfenth namelist,physics max_domains 1.0 irh "sea spray parameter" +rconfig real sfenth namelist,physics max_domains 0.0 irh "sea spray parameter" rconfig integer co2tf namelist,physics 1 0 - "co2tf" "GFDL radiation co2 flag" rconfig integer ra_call_offset namelist,physics 1 -1 - "ra_call_offset" "radiation call offset in timesteps (-1=old, 0=new offset)" "" rconfig real cam_abs_freq_s namelist,physics 1 21600. - "cam_abs_freq_s" "CAM radiation frequency for clear-sky longwave calculations" "s" @@ -1136,9 +1141,9 @@ rconfig real tke_upper_bound namelist,dynamics max_domains 1000. rconfig real tke_drag_coefficient namelist,dynamics max_domains 0. h "tke_drag_coefficient" "" "" rconfig real tke_heat_flux namelist,dynamics max_domains 0. h "tke_heat_flux" "" "" rconfig logical pert_coriolis namelist,dynamics max_domains .false. irh "pert_coriolis" "" "" -rconfig logical euler_adv namelist,dynamics 1 .true. irh "euler_adv" "logical flag to turn on/off Eulerian passive advection" "" -rconfig integer idtadt namelist,dynamics 1 2 irh "idtadt" "fundamental timesteps between calls to Eulerian advection for dynamics" "" -rconfig integer idtadc namelist,dynamics 1 2 irh "idtadc" "fundamental timesteps between calls to Eulerian advection for chemistry" "" +rconfig logical euler_adv namelist,dynamics 1 .false. irh "euler_adv" "logical flag to turn on/off Eulerian passive advection" "" +rconfig integer idtadt namelist,dynamics 1 1 irh "idtadt" "fundamental timesteps between calls to Eulerian advection for dynamics" "" +rconfig integer idtadc namelist,dynamics 1 1 irh "idtadc" "fundamental timesteps between calls to Eulerian advection for chemistry" "" rconfig real codamp namelist,dynamics max_domains 6.4 irh "codamp" "divergence damping weighting factor (larger = more damping) " "" rconfig real coac namelist,dynamics max_domains 1.6 irh "coac" "horizontal diffusion weighting factor (larger = more diffusion) " "" rconfig real slophc namelist,dynamics max_domains 6.363961e-3 irh "slophc" "Maximum model level slope (dZ/dy) for which hor diffusion is applied" "" @@ -1319,7 +1324,8 @@ package temfpblscheme bl_pbl_physics==10 - - package kfetascheme cu_physics==1 - - package bmjscheme cu_physics==2 - - package gdscheme cu_physics==3 - - -package sasscheme cu_physics==4 - - +package sasscheme cu_physics==84 - - +package osasscheme cu_physics==4 - - package g3scheme cu_physics==5 - - package camzmscheme cu_physics==7 - - package tiedtkescheme cu_physics==6 - - diff --git a/wrfv2_fire/Registry/Registry.NMM_NEST b/wrfv2_fire/Registry/Registry.NMM_NEST index a95f7595..dc4a3dc1 100644 --- a/wrfv2_fire/Registry/Registry.NMM_NEST +++ b/wrfv2_fire/Registry/Registry.NMM_NEST @@ -1319,7 +1319,8 @@ package temfpblscheme bl_pbl_physics==10 - - package kfetascheme cu_physics==1 - - package bmjscheme cu_physics==2 - - package gdscheme cu_physics==3 - - -package sasscheme cu_physics==4 - - +package sasscheme cu_physics==84 - - +package osasscheme cu_physics==4 - - package g3scheme cu_physics==5 - - package camzmscheme cu_physics==7 - - package tiedtkescheme cu_physics==6 - - diff --git a/wrfv2_fire/Registry/Registry.wrfvar b/wrfv2_fire/Registry/Registry.wrfvar index 4189289c..b3ca2d9b 100644 --- a/wrfv2_fire/Registry/Registry.wrfvar +++ b/wrfv2_fire/Registry/Registry.wrfvar @@ -41,6 +41,15 @@ include registry.dimspec +dimspec o 3 namelist=ne_area z bio_emissions_dimension +dimspec + 2 namelist=kemit z emissions_zdim +dimspec nm 2 namelist=nmegan z megan_species +dimspec dust 2 namelist=kfuture z klevs_for_dust +dimspec ] 2 namelist=kfire z klevs_for_fire +dimspec % 2 namelist=kdvel z klevs_for_dvel +dimspec airc 2 namelist=kemit_aircraft z ac_emissions_zdim +dimspec . 3 namelist=errosion_dim z dust_errosion_dimension + ################################################################################ ################################################################################ ################################################################################ @@ -168,7 +177,7 @@ i1 real w_save ijk dyn_em 1 Z state real w_subs | dyn_em 1 - i3rh "W_SUBS" "large-scale vertical velocity" "m s-1" state real w_subs_tend | dyn_em 1 - i3rh "W_SUBS_TEND" "tendency large-scale vertical velocity" "m s-1" state real a_w ijk misc 2 Z rh "A_W" "z-wind component" "m s-1" -state real g_w ijk misc 2 Z rh "A_W" "z-wind component" "m s-1" +state real g_w ijk misc 2 Z rh "G_W" "z-wind component" "m s-1" # Geopotential state real ph ijkb dyn_em 2 Z \ @@ -297,6 +306,8 @@ state real zy ijk dyn_em 1 Y - " state real rdz ijk dyn_em 1 Z - " " " " " " state real rdzw ijk dyn_em 1 Z - " " " " " " state real pb ijk dyn_em 1 - irhdus "pb" "BASE STATE PRESSURE " "Pa" +state real a_p ijk dyn_em 1 - rh "a_p" "perturbation pressure" "Pa" +state real g_p ijk dyn_em 1 - rh "g_p" "perturbation pressure" "Pa" # # Other dyn @@ -372,7 +383,10 @@ state real zetatop - misc - - irh "zet state real cf1 - misc - - irh "cf1" "2nd order extrapolation constant" "" state real cf2 - misc - - irh "cf2" "2nd order extrapolation constant" "" state real cf3 - misc - - irh "cf3" "2nd order extrapolation constant" "" -state integer number_at_same_level - - - - - "number_at_same_level" "" "" +state integer number_at_same_level - - - - - "number_at_same_level" "" "" +state real radtacttime - - - - r "radtacttime" "RADTACTTIME" "LW SW ACTIVATION TIME in s" +state real bldtacttime - - - - r "bldtacttime" "BLDTACTTIME" "PBL ACTIVATION TIME in s" +state real cudtacttime - - - - r "cudtacttime" "CUDTACTTIME" "CPS ACTIVATION TIME in s" # State for derived time quantities. state integer itimestep - - - - rh "itimestep" "" "" @@ -469,7 +483,103 @@ state real g_qh ijkft g_moist 1 - rh "G_QHAIL include registry.cam # Chem Scalars -#state real - ijkftb chem 1 - - - +# GOCART Aerosols +state real - ikjftb chem 1 - - - +state real so2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "so2" "SO2 concentration" "ppmv" +state real sulf ikjftb chem 1 - irhusdf=(bdy_interp:dt) "sulf" "SULF concentration" "ppmv" +state real no2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "no2" "NO2 concentration" "ppmv" +state real no ikjftb chem 1 - irhusdf=(bdy_interp:dt) "no" "NO concentration" "ppmv" +state real o3 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "o3" "O3 concentration" "ppmv" +state real hno3 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "hno3" "HNO3 concentration" "ppmv" +state real h2o2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "h2o2" "H2O2 concentration" "ppmv" +state real ald ikjftb chem 1 - irhusdf=(bdy_interp:dt) "ald" "ALD concentration" "ppmv" +state real hcho ikjftb chem 1 - irhusdf=(bdy_interp:dt) "hcho" "HCHO concentration" "ppmv" +state real op1 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "op1" "OP1 concentration" "ppmv" +state real op2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "op2" "OP2 concentration" "ppmv" +state real paa ikjftb chem 1 - irhusdf=(bdy_interp:dt) "paa" "PAA concentration" "ppmv" +state real ora1 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "ora1" "ORA1 concentration" "ppmv" +state real ora2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "ora2" "ORA2 concentration" "ppmv" +state real nh3 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "nh3" "NH3 concentration" "ppmv" +state real n2o5 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "n2o5" "N2O5 concentration" "ppmv" +state real no3 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "no3" "NO3 concentration" "ppmv" +state real pan ikjftb chem 1 - irhusdf=(bdy_interp:dt) "pan" "PAN concentration" "ppmv" +state real hc3 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "hc3" "HC3 concentration" "ppmv" +state real hc5 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "hc5" "HC5 concentration" "ppmv" +state real hc8 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "hc8" "HC8 concentration" "ppmv" +state real eth ikjftb chem 1 - irhusdf=(bdy_interp:dt) "eth" "ETH concentration" "ppmv" +state real co ikjftb chem 1 - irhusdf=(bdy_interp:dt) "co" "CO concentration" "ppmv" + +#Additional CBMZ gas variables inside the chem array... + +state real hcl ikjftb chem 1 - irhusdf=(bdy_interp:dt) "hcl" "HCL concentration" "ppmv" +state real dms ikjftb chem 1 - irhusdf=(bdy_interp:dt) "dms" "DMS concentration" "ppmv" +state real msa ikjftb chem 1 - irhusdf=(bdy_interp:dt) "msa" "MSA concentration" "ppmv" +state real olt ikjftb chem 1 - irhusdf=(bdy_interp:dt) "olt" "OLT concentration" "ppmv" +state real oli ikjftb chem 1 - irhusdf=(bdy_interp:dt) "oli" "OLI concentration" "ppmv" +state real tol ikjftb chem 1 - irhusdf=(bdy_interp:dt) "tol" "TOL concentration" "ppmv" +state real xyl ikjftb chem 1 - irhusdf=(bdy_interp:dt) "xyl" "XYL concentration" "ppmv" +state real aco3 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "aco3" "ACO3 concentration" "ppmv" +state real tpan ikjftb chem 1 - irhusdf=(bdy_interp:dt) "tpan" "TPAN concentration" "ppmv" +state real hono ikjftb chem 1 - irhusdf=(bdy_interp:dt) "hono" "HONO concentration" "ppmv" +state real hno4 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "hno4" "HNO4 concentration" "ppmv" +state real ket ikjftb chem 1 - irhusdf=(bdy_interp:dt) "ket" "KET concentration" "ppmv" +state real gly ikjftb chem 1 - irhusdf=(bdy_interp:dt) "gly" "GLY concentration" "ppmv" +state real mgly ikjftb chem 1 - irhusdf=(bdy_interp:dt) "mgly" "MGLY concentration" "ppmv" +state real dcb ikjftb chem 1 - irhusdf=(bdy_interp:dt) "dcb" "DCB concentration" "ppmv" +state real onit ikjftb chem 1 - irhusdf=(bdy_interp:dt) "onit" "ONIT concentration" "ppmv" +state real csl ikjftb chem 1 - irhusdf=(bdy_interp:dt) "csl" "CSL concentration" "ppmv" +state real iso ikjftb chem 1 - irhusdf=(bdy_interp:dt) "iso" "ISO concentration" "ppmv" +state real ho ikjftb chem 1 - irhusdf=(bdy_interp:dt) "ho" "HO concentration" "ppmv" +state real ho2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "ho2" "HO2 concentration" "ppmv" + +state real bc1 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "BC1" "Hydrophobic Black Carbon" "ug/kg-dryair" +state real bc2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "BC2" "Hydrophilic Black Carbon" "ug/kg-dryair" +state real oc1 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "OC1" "Hydrophobic Black Carbon" "ug/kg-dryair" +state real oc2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "OC2" "Hydrophilic Black Carbon" "ug/kg-dryair" +state real p25 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "P25" "other gocart primary pm25" "ug/kg-dryair" +state real p10 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "P10" "other gocart primary pm10" "ug/kg-dryair" +state real dust_1 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "DUST_1" "dust size bin 1: 0.5um effective radius" "ug/kg-dryair" +state real dust_2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "DUST_2" "dust size bin 2: 1.4um effective radius" "ug/kg-dryair " +state real dust_3 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "DUST_3" "dust size bin 3: 2.4um effective radius" "ug/kg-dryair " +state real dust_4 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "DUST_4" "dust size bin 4: 4.5um effective radius" "ug/kg-dryair " +state real dust_5 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "DUST_5" "dust size bin 5: 8.0um effective radius" "ug/kg-dryair" +state real seas_1 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "SEAS_1" "sea-salt size bin 1: 0.3um effective radius" "ug/kg-dryair" +state real seas_2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "SEAS_2" "sea-salt size bin 2: 1.0um effective radius" "ug/kg-dryair" +state real seas_3 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "SEAS_3" "sea-salt size bin 3: 3.2um effective radius" "ug/kg-dryair" +state real seas_4 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "SEAS_4" "sea-salt size bin 4: 7.5um effective radius" "ug/kg-dryair" + +#RACM has a few more variables to those of RADM2 (ETE is equivilant to OL2 from RADM2) + +state real ete ikjftb chem 1 - irhusdf=(bdy_interp:dt) "ete" "ETE concentration" "ppmv" +state real co2 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "co2" "CO2 concentration" "ppmv" +state real ch4 ikjftb chem 1 - irhusdf=(bdy_interp:dt) "ch4" "CH4 concentration" "ppmv" +state real udd ikjftb chem 1 - irhusdf=(bdy_interp:dt) "udd" "UDD concentration" "ppmv" +state real hket ikjftb chem 1 - irhusdf=(bdy_interp:dt) "hket" "HKET concentration" "ppmv" +state real api ikjftb chem 1 - irhusdf=(bdy_interp:dt) "api" "API concentration" "ppmv" +state real lim ikjftb chem 1 - irhusdf=(bdy_interp:dt) "lim" "LIM concentration" "ppmv" +state real dien ikjftb chem 1 - irhusdf=(bdy_interp:dt) "dien" "DIEN concentration" "ppmv" +state real macr ikjftb chem 1 - irhusdf=(bdy_interp:dt) "macr" "MACR concentration" "ppmv" + +state real sebio_iso ij misc 1 - i06r "sebio_iso" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_oli ij misc 1 - i06r "sebio_oli" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_api ij misc 1 - i06r "sebio_api" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_lim ij misc 1 - i06r "sebio_lim" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_xyl ij misc 1 - i06r "sebio_xyl" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_hc3 ij misc 1 - i06r "sebio_hc3" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_ete ij misc 1 - i06r "sebio_ete" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_olt ij misc 1 - i06r "sebio_olt" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_ket ij misc 1 - i06r "sebio_ket" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_ald ij misc 1 - i06r "sebio_ald" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_hcho ij misc 1 - i06r "sebio_hcho" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_eth ij misc 1 - i06r "sebio_eth" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_ora2 ij misc 1 - i06r "sebio_ora2" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_co ij misc 1 - i06r "sebio_co" "Reference biog emiss" "mol km^-2 hr^-1" +state real sebio_nr ij misc 1 - i06r "sebio_nr" "Reference biog emiss" "mol km^-2 hr^-1" +state real noag_grow ij misc 1 - i06r "noag_grow" "Reference biog emiss" "mol km^-2 hr^-1" +state real noag_nongrow ij misc 1 - i06r "noag_nongrow" "Reference biog emiss" "mol km^-2 hr^-1" +state real nononag ij misc 1 - i06r "nononag" "Reference biog emiss" "mol km^-2 hr^-1" +state real slai ij misc 1 - i06r "slai" "Leaf area index isop" "" + # # Tracer Scalars: If you want full resolved and non-resolved dispersion, compile WRF-Chem # @@ -483,6 +593,25 @@ include registry.cam #state real tr17_7 ijkftb tracer 1 - irhusdf=(bdy_interp:dt) "tr17_7" "tr17_7" - #state real tr17_8 ijkftb tracer 1 - irhusdf=(bdy_interp:dt) "tr17_8" "tr17_8" +# Input for biogenic emissions model MEGAN v2 +state real msebio_isop ij misc 1 - i06r "msebio_isop" "MEGAN2 isoprone emis fac" "mol km^-2 hr^-1" +state real mlai ijm misc 1 Z i06r "mlai" "Monthly Leaf area index for MEGAN2" "" +state real pftp_bt ij misc 1 - i06r "pftp_bt" "MEGAN2 PFT Broadleaf %" "%" +state real pftp_nt ij misc 1 - i06r "pftp_nt" "MEGAN2 PFT Needleleaf %" "%" +state real pftp_sb ij misc 1 - i06r "pftp_sb" "MEGAN2 PFT Shrub and Bush %" "%" +state real pftp_hb ij misc 1 - i06r "pftp_hb" "MEGAN2 PFT Herbs %" "%" +state real mtsa ijm misc 1 Z i06r "mtsa" "Monthly surface air temp" "K" +state real mswdown ijm misc 1 Z i06r "mswdown" "Monthly SWdown" "W/m2" +state real EFmegan ij{nm} misc 1 - - "EFmegan" "MEGAN2 Emis Factor" "ug m^-2 hr^-1" + +# Input for GOCART: Background chemistry, erodible surface emissions map +state real erod ij. misc 1 - i08rh "EROD" "fraction of erodible surface in each grid cell (0-1)" "none" +state real backg_oh ikj misc 1 - i08rh "BACKG_OH" "Background OH for Aerosol-GOcart option" "ppmv" +state real backg_h2o2 ikj misc 1 - i08rh "BACKG_H2O2" "Background H2O2 for Aerosol-GOcart option" "ppmv" +state real backg_no3 ikj misc 1 - i08rh "BACKG_NO3" "Background NO3 for Aerosol-GOcart option" "ppmv" +state real dms_0 ij misc 1 - i08rh "DMS_0 " "dms reference concentrations" "?" + + # Other Scalars state real - ijkftb scalar 1 - - - state real qndrop ijkftb scalar 1 - \ @@ -853,10 +982,9 @@ state real dlg_bep ijk misc 1 Z - "dl state real dl_u_bep ijk misc 1 Z - "dl_u_bep" "urban length scale" "m" state real sf_bep ijk misc 1 Z - "sf_bep" "surface grid" "-" state real vl_bep ijk misc 1 Z - "vl_bep" "volume grid" "-" -# BOULAC PBL variables -state real tke_pbl ijk misc 1 - rh "tke_pbl" "TKE FROM Bougeault and Lacarrere" "m2 s-2" -state real el_pbl ijk misc 1 - h "el_pbl" "Length scale FROM Bougeault and Lacarrere" "m" -# Diagnostic PBL variables +state real tke_pbl ikj misc 1 - rh "tke_pbl" "TKE from PBL" "m2 s-2" +state real el_pbl ikj misc 1 - h "el_pbl" "Length scale from PBL" "m" +# Diagnostic BOULAC PBL variables state real wu_tur ijk misc 1 - r "wu_tur" "Turbulent flux of momentum(x)" "m2 s-2" state real wv_tur ijk misc 1 - r "wv_tur" "Turbulent flux of momentum(y)" "m2 s-2" state real wt_tur ijk misc 1 - r "wt_tur" "Turbulent flux of temperature" "K m s-1" @@ -920,6 +1048,8 @@ state real qndropsource ijk misc 1 - - "qnd # Other Misc State Variables state real h_diabatic ijk misc 1 - rdu "h_diabatic" "MICROPHYSICS LATENT HEATING" "K s-1" +state real g_h_diabatic ijk misc 1 - rdu "g_h_diabatic" "MICROPHYSICS LATENT HEATING" "K s-1" +state real a_h_diabatic ijk misc 1 - rdu "a_h_diabatic" "MICROPHYSICS LATENT HEATING" "K s-1" state real msft ij misc 1 - i012rhdu=(copy_fcnm) "MAPFAC_M" "Map scale factor on mass grid" "" state real msfu ij misc 1 X i012rhdu=(copy_fcnm) "MAPFAC_U" "Map scale factor on u-grid" "" state real msfv ij misc 1 Y i012rhdu=(copy_fcnm) "MAPFAC_V" "Map scale factor on v-grid" "" @@ -1003,15 +1133,23 @@ state real RQICUTEN ijk misc 1 - r "R state real W0AVG ijk misc 1 - r "W0AVG" "AVERAGE VERTICAL VELOCITY FOR KF CUMULUS SCHEME" "m s-1" state real RAINC ij misc 1 - rhdu "RAINC" "ACCUMULATED TOTAL CUMULUS PRECIPITATION" "mm" +state real G_RAINC ij misc 1 - rhdu "G_RAINC" "ACCUMULATED TOTAL CUMULUS PRECIPITATION" "mm" +state real A_RAINC ij misc 1 - rhdu "A_RAINC" "ACCUMULATED TOTAL CUMULUS PRECIPITATION" "mm" state real RAINSH ij misc 1 - rhdu "RAINSH" "ACCUMULATED SHALLOW CUMULUS PRECIPITATION" "mm" state real RAINNC ij misc 1 - rhdu "RAINNC" "ACCUMULATED TOTAL GRID SCALE PRECIPITATION" "mm" +state real G_RAINNC ij misc 1 - rhdu "G_RAINNC" "ACCUMULATED TOTAL GRID SCALE PRECIPITATION" "mm" +state real A_RAINNC ij misc 1 - rhdu "A_RAINNC" "ACCUMULATED TOTAL GRID SCALE PRECIPITATION" "mm" state integer I_RAINC ij misc 1 - rhd=(interp_fcni)u=(copy_fcni) "I_RAINC" "BUCKET FOR RAINC" "" state integer I_RAINNC ij misc 1 - rhd=(interp_fcni)u=(copy_fcni) "I_RAINNC" "BUCKET FOR RAINNC" "" state real PRATEC ij misc 1 - r "PRATEC" "PRECIP RATE FROM CUMULUS SCHEME" "mm s-1" state real PRATESH ij misc 1 - r "PRATESH" "PRECIP RATE FROM SHALLOW CUMULUS SCHEME" "mm s-1" state real RAINCV ij misc 1 - r "RAINCV" "TIME-STEP CUMULUS PRECIPITATION" "mm" +state real G_RAINCV ij misc 1 - r "G_RAINCV" "TIME-STEP CUMULUS PRECIPITATION" "mm" +state real A_RAINCV ij misc 1 - r "A_RAINCV" "TIME-STEP CUMULUS PRECIPITATION" "mm" state real RAINSHV ij misc 1 - r "RAINSHV" "TIME-STEP SHALLOW CUMULUS PRECIPITATION" "mm" state real RAINNCV ij misc 1 - r "RAINNCV" "TIME-STEP NONCONVECTIVE PRECIPITATION" "mm" +state real G_RAINNCV ij misc 1 - r "G_RAINNCV" "TIME-STEP NONCONVECTIVE PRECIPITATION" "mm" +state real A_RAINNCV ij misc 1 - r "A_RAINNCV" "TIME-STEP NONCONVECTIVE PRECIPITATION" "mm" state real RAINBL ij misc 1 - r "RAINBL" "PBL TIME-STEP TOTAL PRECIPITATION" "mm" state real SNOWNC ij misc 1 - rhdu "SNOWNC" "ACCUMULATED TOTAL GRID SCALE SNOW AND ICE" "mm" state real GRAUPELNC ij misc 1 - rhdu "GRAUPELNC" "ACCUMULATED TOTAL GRID SCALE GRAUPEL" "mm" @@ -1310,6 +1448,21 @@ state real HUML ij misc 1 - rhd=(interp_ state real HVML ij misc 1 - rhd=(interp_mask_water_field:lu_index,iswater)u=(copy_fcnm) "HVML" "OCEAN MIXED-LAYER DEPTH * V-CURRENT" " m2s-1 " state real TMOML ij misc 1 - i012rhd=(interp_mask_water_field:lu_index,iswater)u=(copy_fcnm) "TMOML" "OCEAN LAYER MEAN TEMPERATURE " "K" +state real - ikjf ext_coef - - - - "Extinction coefficients" "" +state real extcof3 ikjf ext_coef 1 Z i01h "EXTCOF3" "Extinction coefficients for .3um" "km^-1" +state real extcof55 ikjf ext_coef 1 Z i01h "EXTCOF55" "Extinction coefficients for .55um" "km^-1" +state real extcof106 ikjf ext_coef 1 Z i01h "EXTCOF106" "Extinction coefficients for 1.06um" "km^-1" +state real extcof3_5 ikjf ext_coef 1 Z i01h "EXTCOF3_5" "Band averaged extinction coefficients for 3-5um" "km^-1" +state real extcof8_12 ikjf ext_coef 1 Z i01h "EXTCOF8_12" "Band averaged extinction coefficients for 8-12um" "km^-1" +state real - ikjf bscat_coef - - - - "Scatter coefficients" "" +state real bscof3 ikjf bscat_coef 1 Z i01h "BSCOF3" "Scatter coefficients for .3um" "km^-1" +state real bscof55 ikjf bscat_coef 1 Z i01h "BSCOF5" "Scatter coefficients for .5um" "km^-1" +state real bscof106 ikjf bscat_coef 1 Z i01h "BSCOF106" "Scatter coefficients for 1.06um" "km^-1" +state real - ikjf asym_par - - - - "assymetry parameter" "" +state real asympar3 ikjf asym_par 1 Z i01h "ASYMPAR3" "assymetry parameter for .3um" "?" +state real asympar55 ikjf asym_par 1 Z i01h "ASYMPAR55" "assymetry parameter for .55um" "?" +state real asympar106 ikjf asym_par 1 Z i01h "ASYMPAR106" "assymetry parameter for 1.06um" "?" + # #--------------------------------------------------------------------------------------------------------------------------------------- # @@ -1460,6 +1613,8 @@ rconfig real eps namelist,wrfvar6 max_outer_iteratio rconfig logical precondition_cg namelist,wrfvar6 1 .false. - "precondition_cg" "" "" rconfig real precondition_factor namelist,wrfvar6 1 1.0 - "precondition_factor" "" "" rconfig logical use_lanczos namelist,wrfvar6 1 .false. - "use_lanczos" "" "" +rconfig logical read_lanczos namelist,wrfvar6 1 .false. - "read_lanczos" "" "" +rconfig logical write_lanczos namelist,wrfvar6 1 .false. - "write_lanczos" "" "" rconfig logical orthonorm_gradient namelist,wrfvar6 1 .false. - "orthonorm_gradient" "" "" rconfig integer cv_options namelist,wrfvar7 1 5 - "cv_options" "" "" @@ -1601,7 +1756,7 @@ rconfig integer simulated_rad_ngrid namelist,wrfvar14 1 0 - "si rconfig logical use_varbc namelist,wrfvar14 1 .false. - "use_varbc" "" "" rconfig logical freeze_varbc namelist,wrfvar14 1 .false. - "freeze_varbc" "" "" rconfig real varbc_factor namelist,wrfvar14 1 1.0 - "varbc_factor" "" "" -rconfig integer varbc_nbgerr namelist,wrfvar14 1 1 - "varbc_nbgerr" "" "" +rconfig integer varbc_nbgerr namelist,wrfvar14 1 5000 - "varbc_nbgerr" "" "" rconfig integer varbc_nobsmin namelist,wrfvar14 1 10 - "varbc_nobsmin" "" "" rconfig logical use_airs_mmr namelist,wrfvar14 1 .false. - "use_airs_mmr" "" "" rconfig logical airs_warmest_fov namelist,wrfvar14 1 .false. - "airs_warmest_fov" "" "" @@ -1641,7 +1796,8 @@ rconfig logical jcdfi_use namelist,perturbation 1 .true. - rconfig integer jcdfi_diag namelist,perturbation 1 1 - "jcdfi_diag" "JcDFI diag. on/off" "" rconfig real jcdfi_penalty namelist,perturbation 1 10. - "jcdfi_penalty" "Penalty parameter for JcDF" "" rconfig logical enable_identity namelist,perturbation 1 .false. - "enable identity AD/TL model" "" "" -rconfig logical trajectory_io namelist,perturbation 1 .true. - "0:disk IO;1:memory IO" "" "" +rconfig logical trajectory_io namelist,perturbation 1 .true. - "0:disk IO;1:memory IO" "" "" +rconfig logical var4d_detail_out namelist,perturbation 1 .false. - "true:output perturbation, gradient to disk" "" "" # Time Control rconfig integer run_days namelist,time_control 1 0 irh "run_days" "NUMBER OF DAYS TO RUN" @@ -1734,10 +1890,12 @@ rconfig integer e_vert namelist,domains max_domains 31 rconfig integer num_metgrid_levels namelist,domains 1 27 irh "num_metgrid_levels" "" "" rconfig integer num_metgrid_soil_levels namelist,domains 1 4 irh "num_metgrid_soil_levels" "number of input levels or layers in 3D sm, st, sw arrays" "" rconfig real p_top_requested namelist,domains 1 5000 irh "p_top_requested" "Pa" "" +rconfig logical interp_theta namelist,domains 1 .true. irh "interp_theta" "inside real, vertically interpolate theta (T) or temperature (F)" "" rconfig integer interp_type namelist,domains 1 2 irh "interp_type" "1=interp in pressure, 2=interp in LOG pressure" "" rconfig integer vert_refine_fact namelist,domains 1 1 irh "vertical refinment factor for ndown" "" rconfig integer extrap_type namelist,domains 1 2 irh "extrap_type" "1= use 2 lowest levels, 2=constant" "" rconfig integer t_extrap_type namelist,domains 1 2 irh "t_extrap_type" "1=isothermal, 2=6.5 K/km, 3=adiabatic" "" +rconfig integer hypsometric_opt namelist,domains 1 1 irh "hypsometric_opt" "Z relates P, 1=linearly, 2=LOG-linearly" "" rconfig logical lowest_lev_from_sfc namelist,domains 1 .false. irh "lowest_lev_from_sfc" "" "" rconfig logical use_levels_below_ground namelist,domains 1 .true. irh "use_levels_below_ground" "T/F: use input data levels below input sfc pres" "" rconfig logical use_tavg_for_tsk namelist,domains 1 .false. irh "use_tavg_for_tsk" "T/F: use diurnal avg sfc temp for tsk" "" @@ -1835,7 +1993,7 @@ rconfig integer ISFFLX namelist,physics 1 1 rconfig integer IFSNOW namelist,physics 1 0 irh "IFSNOW" "" "" rconfig integer ICLOUD namelist,physics 1 1 irh "ICLOUD" "" "" rconfig real swrad_scat namelist,physics 1 1 irh "SWRAD_SCAT" "SCATTERING FACTOR IN SWRAD" "" -rconfig integer surface_input_source namelist,physics 1 1 irh "surface_input_source" "1=static (fractional), 2=time dependent (dominant), 3=hybrid (not yet implemented)" "" +rconfig integer surface_input_source namelist,physics 1 1 irh "surface_input_source" "1=static (fractional), 2=time dependent (dominant), 3=dominant cateogry from metgrid" "" rconfig integer num_soil_layers namelist,physics 1 5 irh "num_soil_layers" "" "" rconfig integer num_urban_layers namelist,physics 1 400 irh "num_urban_layers" "" "" rconfig integer num_months namelist,physics 1 12 irh "num_months" "" "" @@ -1848,7 +2006,16 @@ rconfig integer cugd_avedx namelist,physics 1 1 rconfig integer clos_choice namelist,physics 1 0 rh "clos_choice" "" "" rconfig integer imomentum namelist,physics 1 0 rh "imomentum" "momentum transport in G3 scheme" "" rconfig integer ishallow namelist,physics 1 0 rh "ishallow" "shallow convection in G3 scheme" "" -rconfig integer chem_opt namelist,physics max_domains 0 rh "chem_opt" "" "" +rconfig integer chem_opt namelist,physics max_domains 0 rh "chem_opt" "" "" +rconfig integer opt_pars_out namelist,physics 1 0 h "opt_pars_out" "" "" +rconfig integer ne_area namelist,physics 1 41 irh "ne_area" "" "" +rconfig integer kemit namelist,physics 1 9 irh "kemit" "" "" +rconfig integer nmegan namelist,physics 1 138 irh "nmegan" "" "" +rconfig integer kfuture namelist,physics 1 1 - "kfuture" "" "" +rconfig integer kfire namelist,physics 1 1 - "kfire" "" "" +rconfig integer kemit_aircraft namelist,physics 1 1 - "kemit_aircraft" "" "" +rconfig integer kdvel namelist,physics 1 1 - "kdvel" "" "" +rconfig integer errosion_dim namelist,physics 1 3 - "errosion_dim" "" "" rconfig integer num_land_cat namelist,physics 1 24 - "num_land_cat" "" "" rconfig integer num_soil_cat namelist,physics 1 16 - "num_soil_cat" "" "" rconfig integer mp_zero_out namelist,physics 1 0 - "mp_zero_out" "microphysics fields set to zero 0=no action taken, 1=all fields but Qv, 2=all fields including Qv" "flag" @@ -2030,6 +2197,7 @@ rconfig real smdiv namelist,dynamics max_domains 0.1 rconfig real emdiv namelist,dynamics max_domains 0.01 h "emdiv" "" "" rconfig real epssm namelist,dynamics max_domains .1 h "epssm" "" "" rconfig logical non_hydrostatic namelist,dynamics max_domains .true. irh "non_hydrostatic" "" "" +rconfig logical use_input_w namelist,dynamics 1 .false. irh "use_input_w" "" "" rconfig integer time_step_sound namelist,dynamics max_domains 0 h "time_step_sound" "" "" rconfig integer h_mom_adv_order namelist,dynamics max_domains 5 rh "h_mom_adv_order" "" "" rconfig integer v_mom_adv_order namelist,dynamics max_domains 3 rh "v_mom_adv_order" "" "" @@ -2170,7 +2338,17 @@ package dyn_em_ad dyn_opt==302 - - package dyn_em_tst dyn_opt==402 - - package dyn_em_var dyn_opt==502 - - +package opt_out opt_pars_out==1 - ext_coef:extcof3,extcof55,extcof106,extcof3_5,extcof8_12;bscat_coef:bscof3,bscof55,bscof106;asym_par:asympar3,asympar55,asympar106 package passivec1 chem_opt==0 - +# GOCART Packages (no Ozone chemistry in this choice) +package gocart_simple chem_opt==300 - chem:so2,sulf,dms,msa,p25,bc1,bc2,oc1,oc2,dust_1,dust_2,dust_3,dust_4,dust_5,seas_1,seas_2,seas_3,seas_4,p10 + +package gocartracm_kpp chem_opt==301 - chem:so2,sulf,no2,no,o3,hno3,h2o2,ald,hcho,op1,op2,paa,ora1,ora2,nh3,n2o5,no3,pan,hc3,hc5,hc8,eth,co,ete,olt,oli,tol,xyl,aco3,tpan,hono,hno4,ket,gly,mgly,dcb,onit,csl,iso,co2,ch4,udd,hket,api,lim,dien,macr,ho,ho2,dms,msa,p25,bc1,bc2,oc1,oc2,dust_1,dust_2,dust_3,dust_4,dust_5,seas_1,seas_2,seas_3,seas_4,p10 + +package gocartradm2_kpp chem_opt==302 - chem:so2,sulf,no2,no,o3,hno3,h2o2,ald,hcho,op1,op2,paa,ora1,ora2,nh3,n2o5,no3,pan,hc3,hc5,hc8,eth,co,ol2,olt,oli,tol,xyl,aco3,tpan,hono,hno4,ket,gly,mgly,dcb,onit,csl,iso,co2,ch4,ho,ho2,dms,msa,p25,bc1,bc2,oc1,oc2,dust_1,dust_2,dust_3,dust_4,dust_5,seas_1,seas_2,seas_3,seas_4,p10 + +package gocartradm2 chem_opt==303 - chem:so2,sulf,no2,no,o3,hno3,h2o2,ald,hcho,op1,op2,paa,ora1,ora2,nh3,n2o5,no3,pan,hc3,hc5,hc8,eth,co,ol2,olt,oli,tol,xyl,aco3,tpan,hono,hno4,ket,gly,mgly,dcb,onit,csl,iso,hcl,ho,ho2,dms,msa,p25,bc1,bc2,oc1,oc2,dust_1,dust_2,dust_3,dust_4,dust_5,seas_1,seas_2,seas_3,seas_4,p10 + package passiveqv mp_physics==0 - moist:qv;g_moist:g_qv;a_moist:a_qv package kesslerscheme mp_physics==1 - moist:qv,qc,qr;g_moist:g_qv,g_qc,g_qr;a_moist:a_qv,a_qc,a_qr package linscheme mp_physics==2 - moist:qv,qc,qr,qi,qs,qg;g_moist:g_qv,g_qc,g_qr,g_qi,g_qs,g_qg;a_moist:a_qv,a_qc,a_qr,a_qi,a_qs,a_qg @@ -2186,6 +2364,8 @@ package morr_two_moment mp_physics==10 - moist:qv,qc,q #package milbrandt3mom mp_physics==12 - moist:qv,qc,qr,qi,qs,qg,qh;scalar:qnc,qnr,qni,qns,qng,qnh,qzr,qzi,qzs,qzg,qzh package wdm5scheme mp_physics==14 - moist:qv,qc,qr,qi,qs;g_moist:g_qv,g_qc,g_qr,g_qi,g_qs;a_moist:a_qv,a_qc,a_qr,a_qi,a_qs;scalar:qnn,qnc,qnr package wdm6scheme mp_physics==16 - moist:qv,qc,qr,qi,qs,qg;g_moist:g_qv,g_qc,g_qr,g_qi,g_qs,g_qg;a_moist:a_qv,a_qc,a_qr,a_qi,a_qs,a_qg;scalar:qnn,qnc,qnr +package lscondscheme mp_physics==98 - moist:qv;g_moist:g_qv;a_moist:a_qv +package mkesslerscheme mp_physics==99 - moist:qv,qc,qr;g_moist:g_qv,g_qc,g_qr;a_moist:a_qv,a_qc,a_qr package nodfimoist mp_physics_dfi==-1 - - package passiveqv_dfi mp_physics_dfi==0 - dfi_moist:dfi_qv @@ -2264,6 +2444,7 @@ package mynnpblscheme3 bl_pbl_physics==6 - scalar:qke;st package acmpblscheme bl_pbl_physics==7 - - package boulacscheme bl_pbl_physics==8 - state:el_pbl,tke_pbl,wu_tur,wv_tur,wt_tur,wq_tur package camuwpblscheme bl_pbl_physics==9 - state:tauresx2d,tauresy2d,qpert2d,wpert2d,tke_pbl +package surfdragscheme bl_pbl_physics==98 - - package mrfscheme bl_pbl_physics==99 - - package temfpblscheme bl_pbl_physics==88 - state:te_temf,kh_temf,km_temf,shf_temf,qf_temf,uw_temf,vw_temf,wupd_temf,mf_temf,thup_temf,qlup_temf,qtup_temf,cf3d_temf,hd_temf,lcl_temf,hct_temf,cfm_temf @@ -2275,6 +2456,7 @@ package g3scheme cu_physics==5 - state:cugd_qv package tiedtkescheme cu_physics==6 package camzmscheme cu_physics==7 - state:precz,zmdt,zmdq,zmdice,zmdliq,evaptzm,fzsntzm,evsntzm,evapqzm,zmflxprc,zmflxsnw,zmntprpd,zmntsnpd,zmeiheat,cmfmc,cmfmcdzm,preccdzm,pconvb,pconvt,cape,zmmtu,zmmtv,zmmu,zmmd,zmupgu,zmupgd,zmvpgu,zmvpgd,zmicuu,zmicud,zmicvu,zmicvd package nsasscheme cu_physics==14 - - +package ducuscheme cu_physics==98 - - package kfscheme cu_physics==99 - - package g3shcuscheme shcu_physics==1 - - @@ -2467,7 +2649,7 @@ halo HALO_PSICHI_UV_ADJ dyn_em 24:xa%u,xa%v,xa%psfc halo HALO_XA_A dyn_em 4:xa%u,xa%v halo HALO_X6A_A dyn_em 4:x6a%u,x6a%v halo HALO_EM_C_TL dyn_em 4:g_u_2,g_v_2 -halo HALO_XB dyn_em 24:xb%psac,xb%rough,xb%u,xb%v,xb%w,xb%wh,xb%t,xb%p,xb%q,xb%qrn,xb%qcw,xb%qci,xb%qt,xb%rho,xb%rh,xb%h,xb%hf,xb%u10,xb%v10,xb%t2,xb%q2,xb%psfc,xb%regime,xb%ztd,xb%tpw,xb%speed,xb%tb19v,xb%tb19h,xb%tb22v,xb%tb37v,xb%tb37h,xb%tb85v,xb%tb85h,xb%ref,xb%delt,xb%slp +halo HALO_XB dyn_em 24:xb%psac,xb%rough,xb%u,xb%v,xb%w,xb%wh,xb%t,xb%p,xb%q,xb%qrn,xb%qcw,xb%qci,xb%qt,xb%rho,xb%rh,xb%h,xb%hf,xb%u10,xb%v10,xb%t2,xb%q2,xb%psfc,xb%regime,xb%ztd,xb%tpw,xb%speed,xb%tb19v,xb%tb19h,xb%tb22v,xb%tb37v,xb%tb37h,xb%tb85v,xb%tb85h,xb%ref,xb%delt,xb%slp,xb%tsk,xb%smois,xb%tslb,xb%xice,xb%ivgtyp,xb%isltyp,xb%vegfra,xb%snowh,xb%snow halo HALO_XA dyn_em 24:xa%u,xa%v,xa%q,xa%p,xa%t,xa%rho,xa%rh,xa%psfc,xa%qcw,xa%qrn,xa%qci,xa%qt halo HALO_XA_CLOUD dyn_em 24:xa%q,xa%t,xa%qcw,xa%qrn,xa%qci halo HALO_SFC_XA dyn_em 24:xa%u10,xa%v10,xa%t2,xa%q2 @@ -2475,6 +2657,9 @@ halo HALO_SSMI_XA dyn_em 24:xa%ztd,xa%tpw,xa%speed,xa%tb19v,xa%tb19h, halo HALO_2D_WORK dyn_em 24:xp%vxy halo HALO_RADAR_XA_W dyn_em 24:xa%w,xa%wh halo HALO_XB_UV dyn_em 24:xb%u,xb%v +halo HALO_EM_BDY dyn_em 4:a_u_1,a_v_1,a_ph_1,a_mu_1,a_t_1,a_w_1 +halo HALO_EM_E dyn_em 4:mu_2,mub +halo HALO_EM_E_TL dyn_em 4:g_mu_2,mu_2,mub ##### Derived types for WRFVAR # BEGIN VP_TYPE DEFINITION: diff --git a/wrfv2_fire/Registry/registry.chem b/wrfv2_fire/Registry/registry.chem index 10b57668..9c7b2910 100644 --- a/wrfv2_fire/Registry/registry.chem +++ b/wrfv2_fire/Registry/registry.chem @@ -234,6 +234,7 @@ state real ebu_in_dms i]jf ebu_in 1 - i07 state real ebu_in_oc i]jf ebu_in 1 - i07 "ebu_in_oc" "EMISSIONS" "mol km^-2 hr^-1" state real ebu_in_bc i]jf ebu_in 1 - i07 "ebu_in_bc" "EMISSIONS" "mol km^-2 hr^-1" state real ebu_in_sulf i]jf ebu_in 1 - i07 "ebu_in_sulf" "EMISSIONS" "mol km^-2 hr^-1" +state real ebu_in_ash i]jf ebu_in 1 - i07 "ebu_in_ash" "EMISSIONS" "mol km^-2 hr^-1" # additional arrays for mozcart biomass burning state real ebu_in_bigalk i]jf ebu_in 1 - i07 "ebu_in_bigalk" "EMISSIONS" "mol km^-2 hr^-1" state real ebu_in_bigene i]jf ebu_in 1 - i07 "ebu_in_bigene" "EMISSIONS" "mol km^-2 hr^-1" @@ -2269,7 +2270,7 @@ package dust chem_opt==401 - chem:dust_1,dust_2,dus package eradm emiss_opt==2 - emis_ant:e_iso,e_so2,e_no,e_co,e_eth,e_hc3,e_hc5,e_hc8,e_xyl,e_ol2,e_olt,e_oli,e_tol,e_csl,e_hcho,e_ald,e_ket,e_ora2,e_nh3 package eradmsorg emiss_opt==3 - emis_ant:e_iso,e_so2,e_no,e_no2,e_co,e_eth,e_hc3,e_hc5,e_hc8,e_xyl,e_ol2,e_olt,e_oli,e_tol,e_csl,e_hcho,e_ald,e_ket,e_ora2,e_nh3,e_pm25i,e_pm25j,e_pm_10,e_eci,e_ecj,e_orgi,e_orgj,e_so4i,e_so4j,e_no3i,e_no3j,e_naaj,e_naai,e_orgi_a,e_orgj_a,e_orgi_bb,e_orgj_bb package ecbmz_mosaic emiss_opt==4 - emis_ant:e_iso,e_so2,e_no,e_co,e_eth,e_hc3,e_hc5,e_hc8,e_xyl,e_ol2,e_olt,e_oli,e_tol,e_csl,e_hcho,e_ald,e_ket,e_ora2,e_nh3,e_no2,e_ch3oh,e_c2h5oh,e_pm25i,e_pm25j,e_eci,e_ecj,e_orgi,e_orgj,e_so4i,e_so4j,e_no3i,e_no3j,e_so4c,e_no3c,e_orgc,e_ecc -package ecptec emiss_opt==5 - emis_ant:e_iso,e_so2,e_no,e_co,e_eth,e_hc3,e_hc5,e_hc8,e_xyl,e_ol2,e_olt,e_oli,e_tol,e_csl,e_hcho,e_ald,e_ket,e_ora2,e_nh3,e_pm_25,e_pm_10,e_oc,e_sulf,e_bc +package ecptec emiss_opt==5 - emis_ant:e_iso,e_so2,e_no,e_no2,e_co,e_eth,e_hc3,e_hc5,e_hc8,e_xyl,e_ol2,e_olt,e_oli,e_tol,e_csl,e_hcho,e_ald,e_ket,e_ora2,e_nh3,e_pm_25,e_pm_10,e_oc,e_sulf,e_bc package gocart_ecptec emiss_opt==6 - emis_ant:e_so2,e_sulf,e_bc,e_oc,e_pm_25,e_pm_10 package mozem emiss_opt==7 - emis_ant:e_co,e_no,e_no2,e_bigalk,e_bigene,e_c2h4,e_c2h5oh,e_c2h6,e_c3h6,e_c3h8,e_ch2o,e_ch3cho,e_ch3coch3,e_ch3oh,e_mek,e_so2,e_toluene,e_nh3,e_isop,e_c10h16 package mozcem emiss_opt==8 - emis_ant:e_co,e_no,e_no2,e_bigalk,e_bigene,e_c2h4,e_c2h5oh,e_c2h6,e_c3h6,e_c3h8,e_ch2o,e_ch3cho,e_ch3coch3,e_ch3oh,e_mek,e_so2,e_toluene,e_nh3,e_isop,e_c10h16,e_pm_10,e_pm_25,e_bc,e_oc,e_sulf @@ -2296,8 +2297,8 @@ package gunther1 bio_emiss_opt==1 - - package beis313 bio_emiss_opt==2 - - package megan2 bio_emiss_opt==3 - state:mebio_isop,mebio_apin,mebio_bcar,mebio_acet,mebio_mbo,mebio_no,msebio_isop,mlai,pftp_bt,pftp_nt,pftp_sb,pftp_hb,mtsa,mswdown,EFmegan # the following arrays only needed for burn options -package biomassb biomass_burn_opt==1 - state:mean_fct_agtf,mean_fct_agef,mean_fct_agsv,mean_fct_aggr,firesize_agtf,firesize_agef,firesize_agsv,firesize_aggr;ebu:ebu_no,ebu_co,ebu_co2,ebu_eth,ebu_hc3,ebu_hc5,ebu_hc8,ebu_ete,ebu_olt,ebu_oli,ebu_pm25,ebu_pm10,ebu_dien,ebu_iso,ebu_api,ebu_lim,ebu_tol,ebu_csl,ebu_hcho,ebu_ald,ebu_ket,ebu_macr,ebu_ora1,ebu_ora2,ebu_so2,ebu_nh3,ebu_oc,ebu_bc,ebu_sulf,ebu_dms;ebu_in:ebu_in_no,ebu_in_co,ebu_in_co2,ebu_in_eth,ebu_in_hc3,ebu_in_hc5,ebu_in_hc8,ebu_in_ete,ebu_in_olt,ebu_in_oli,ebu_in_pm25,ebu_in_pm10,ebu_in_dien,ebu_in_iso,ebu_in_api,ebu_in_lim,ebu_in_tol,ebu_in_csl,ebu_in_hcho,ebu_in_ald,ebu_in_ket,ebu_in_macr,ebu_in_ora1,ebu_in_ora2,ebu_in_so2,ebu_in_nh3,ebu_in_oc,ebu_in_bc,ebu_in_sulf,ebu_in_dms -package biomassb_mozc biomass_burn_opt==2 - state:mean_fct_agtf,mean_fct_agef,mean_fct_agsv,mean_fct_aggr,firesize_agtf,firesize_agef,firesize_agsv,firesize_aggr;ebu:ebu_co,ebu_no,ebu_bigalk,ebu_bigene,ebu_c2h4,ebu_c2h5oh,ebu_c2h6,ebu_c3h6,ebu_c3h8,ebu_ch2o,ebu_ch3cho,ebu_ch3coch3,ebu_ch3oh,ebu_mek,ebu_so2,ebu_toluene,ebu_nh3,ebu_oc,ebu_bc,ebu_pm25,ebu_pm10,ebu_no2,ebu_open,ebu_c10h16,ebu_mgly,ebu_ch3cooh,ebu_cres,ebu_glyald,ebu_gly,ebu_acetol,ebu_isop,ebu_macr,ebu_mvk;ebu_in:ebu_in_co,ebu_in_no,ebu_in_bigalk,ebu_in_bigene,ebu_in_c2h4,ebu_in_c2h5oh,ebu_in_c2h6,ebu_in_c3h6,ebu_in_c3h8,ebu_in_ch2o,ebu_in_ch3cho,ebu_in_ch3coch3,ebu_in_ch3oh,ebu_in_mek,ebu_in_so2,ebu_in_toluene,ebu_in_nh3,ebu_in_no2,ebu_in_open,ebu_in_c10h16,ebu_in_mgly,ebu_in_ch3cooh,ebu_in_cres,ebu_in_glyald,ebu_in_gly,ebu_in_acetol,ebu_in_isop,ebu_in_macr,ebu_in_mvk,ebu_in_pm25,ebu_in_pm10,ebu_in_oc,ebu_in_bc +package biomassb biomass_burn_opt==1 - state:mean_fct_agtf,mean_fct_agef,mean_fct_agsv,mean_fct_aggr,firesize_agtf,firesize_agef,firesize_agsv,firesize_aggr;ebu:ebu_no,ebu_no2,ebu_co,ebu_co2,ebu_eth,ebu_hc3,ebu_hc5,ebu_hc8,ebu_ete,ebu_olt,ebu_oli,ebu_pm25,ebu_pm10,ebu_dien,ebu_iso,ebu_api,ebu_lim,ebu_tol,ebu_csl,ebu_hcho,ebu_ald,ebu_ket,ebu_macr,ebu_ora1,ebu_ora2,ebu_so2,ebu_nh3,ebu_oc,ebu_bc,ebu_sulf,ebu_dms;ebu_in:ebu_in_no,ebu_in_co,ebu_in_co2,ebu_in_eth,ebu_in_hc3,ebu_in_hc5,ebu_in_hc8,ebu_in_ete,ebu_in_olt,ebu_in_oli,ebu_in_pm25,ebu_in_pm10,ebu_in_dien,ebu_in_iso,ebu_in_api,ebu_in_lim,ebu_in_tol,ebu_in_csl,ebu_in_hcho,ebu_in_ald,ebu_in_xyl,ebu_in_ket,ebu_in_macr,ebu_in_ora1,ebu_in_ora2,ebu_in_so2,ebu_in_nh3,ebu_in_oc,ebu_in_bc,ebu_in_sulf,ebu_in_dms,ebu_in_ash +package biomassb_mozc biomass_burn_opt==2 - state:mean_fct_agtf,mean_fct_agef,mean_fct_agsv,mean_fct_aggr,firesize_agtf,firesize_agef,firesize_agsv,firesize_aggr;ebu:ebu_co,ebu_no,ebu_no2,,ebu_bigalk,ebu_bigene,ebu_c2h4,ebu_c2h5oh,ebu_c2h6,ebu_c3h6,ebu_c3h8,ebu_ch2o,ebu_ch3cho,ebu_ch3coch3,ebu_ch3oh,ebu_mek,ebu_so2,ebu_toluene,ebu_nh3,ebu_oc,ebu_bc,ebu_pm25,ebu_pm10,ebu_no2,ebu_open,ebu_c10h16,ebu_mgly,ebu_ch3cooh,ebu_cres,ebu_glyald,ebu_gly,ebu_acetol,ebu_isop,ebu_macr,ebu_mvk;ebu_in:ebu_in_co,ebu_in_no,ebu_in_bigalk,ebu_in_bigene,ebu_in_c2h4,ebu_in_c2h5oh,ebu_in_c2h6,ebu_in_c3h6,ebu_in_c3h8,ebu_in_ch2o,ebu_in_ch3cho,ebu_in_ch3coch3,ebu_in_ch3oh,ebu_in_mek,ebu_in_so2,ebu_in_toluene,ebu_in_nh3,ebu_in_no2,ebu_in_open,ebu_in_c10h16,ebu_in_mgly,ebu_in_ch3cooh,ebu_in_cres,ebu_in_glyald,ebu_in_gly,ebu_in_acetol,ebu_in_isop,ebu_in_macr,ebu_in_mvk,ebu_in_pm25,ebu_in_pm10,ebu_in_oc,ebu_in_bc package opt_out opt_pars_out==1 - ext_coef:extcof3,extcof55,extcof106,extcof3_5,extcof8_12;bscat_coef:bscof3,bscof55,bscof106;asym_par:asympar3,asympar55,asympar106 # dust and sea salt packages diff --git a/wrfv2_fire/Registry/registry.stoch b/wrfv2_fire/Registry/registry.stoch index 597c57b8..1c230912 100644 --- a/wrfv2_fire/Registry/registry.stoch +++ b/wrfv2_fire/Registry/registry.stoch @@ -4,9 +4,9 @@ state real VERTSTRUCC ikj dyn_em 1 - rhd "VERTSTRUCC " "vertical structure for stoch. forcing " "" state real VERTSTRUCS ikj dyn_em 1 - rhd "VERTSTRUCS " "vertical structure for stoch. forcing " "" -state real ru_tendf_stoch ikjb dyn_em 1 X rhdf=(p2c:dt) "ru_tendf_stoch" "stochastic forcing, U " "" -state real rv_tendf_stoch ikjb dyn_em 1 Y rhdf=(p2c:dt) "rv_tendf_stoch" "stochastic forcing, V " "" -state real rt_tendf_stoch ikjb dyn_em 1 - rhdf=(p2c:dt) "rt_tendf_stoch" "stochastic forcing, T " "" +state real ru_tendf_stoch ikjb dyn_em 1 X rhdf=(p2c:dt) "ru_tendf_stoch" "stochastic forcing, U " "m/s" +state real rv_tendf_stoch ikjb dyn_em 1 Y rhdf=(p2c:dt) "rv_tendf_stoch" "stochastic forcing, V " "m/s" +state real rt_tendf_stoch ikjb dyn_em 1 - rhdf=(p2c:dt) "rt_tendf_stoch" "stochastic forcing, T " "K/s" # 2d arrays state real SPSTREAMFORCC ij misc 1 - r "SPSTREAMFORCC" "real spect. coeff. of stoch. streamfunction perturb." "" @@ -51,10 +51,13 @@ state logical did_stoch - misc 1 - r "D # Namelist parameters rconfig integer stoch_force_opt namelist,physics max_domains 0 - "stochastic forcing option: 0=none, 1=backscatter" rconfig integer stoch_vertstruc_opt namelist,physics max_domains 0 - "vertical structure for stochastic forcing: 0=constant, 1=random phase" -rconfig integer nens namelist,physics 1 1 - "ensemble member" "" "" -rconfig real tot_backscat_psi namelist,physics max_domains 115200 - "total backscattered energy 240*240*2" "m2 s-3" "" -rconfig real tot_backscat_t namelist,physics max_domains 2.0E-06 - "total backscattered temperature" "Cp m2 s-3" "" +rconfig integer nens namelist,physics 1 1 - "random number seed for ensemble members " "" "" +rconfig real tot_backscat_psi namelist,physics max_domains 1.7E-05 - "total backscattered dissipation rate for streamfunction m2 s-3" "" +rconfig real tot_backscat_t namelist,physics max_domains 4.6E-05 - "total backscattered dissipation rate for temperature" "m2 s-3" "" + +rconfig real stoch_force_global_opt derived 1 0 h "stoch_force_global_opt" "global (across domains) stochastic forcing option" "" + # Package declarations -package no_stoch_force stoch_force_opt==0 - - -package stoch_backscatter stoch_force_opt==1 - state:ru_tendf_stoch,rv_tendf_stoch,rt_tendf_stoch,SPSTREAMFORCC,SPSTREAMFORCS,SPTFORCC,SPTFORCS,SPSTREAM_AMP,SPT_AMP,VERTSTRUCC,VERTSTRUCS,RU_IMAG,RU_REAL_xxx,RU_REAL_yyy,RU_IMAG_xxx,RU_IMAG_yyy,RV_IMAG,RV_REAL_xxx,RV_REAL_yyy,RV_IMAG_xxx,RV_IMAG_yyy,RT_IMAG,RT_REAL_xxx,RT_REAL_yyy,RT_IMAG_xxx,RT_IMAG_yyy,RU_REAL,RV_REAL,RT_REAL +package no_stoch_force stoch_force_global_opt==0 - - +package stoch_backscatter stoch_force_global_opt==1 - state:ru_tendf_stoch,rv_tendf_stoch,rt_tendf_stoch,SPSTREAMFORCC,SPSTREAMFORCS,SPTFORCC,SPTFORCS,SPSTREAM_AMP,SPT_AMP,VERTSTRUCC,VERTSTRUCS,RU_IMAG,RU_REAL_xxx,RU_REAL_yyy,RU_IMAG_xxx,RU_IMAG_yyy,RV_IMAG,RV_REAL_xxx,RV_REAL_yyy,RV_IMAG_xxx,RV_IMAG_yyy,RT_IMAG,RT_REAL_xxx,RT_REAL_yyy,RT_IMAG_xxx,RT_IMAG_yyy,RU_REAL,RV_REAL,RT_REAL diff --git a/wrfv2_fire/arch/Config_new.pl b/wrfv2_fire/arch/Config_new.pl index dcdcbaed..b161e709 100644 --- a/wrfv2_fire/arch/Config_new.pl +++ b/wrfv2_fire/arch/Config_new.pl @@ -242,7 +242,10 @@ while ( substr( $ARGV[0], 0, 1 ) eq "-" ) $validresponse = 0 ; -@platforms = qw ( serial smpar dmpar dm+sm ) ; +if ( $sw_wrf_core eq "4D_DA_CORE" ) + { @platforms = qw ( serial dmpar ) ; } + else + { @platforms = qw ( serial smpar dmpar dm+sm ) ; } # Display the choices to the user and get selection until ( $validresponse ) { @@ -400,9 +403,17 @@ while ( ) if ( $sw_esmflib_path && $sw_esmfinc_path ) { $_ =~ s:CONFIGURE_ESMF_FLAG:-DESMFIO:g ; - $_ =~ s:ESMFIOLIB:-L$sw_esmflib_path -lesmf -L\$\(WRF_SRC_ROOT_DIR\)/external/io_esmf -lwrfio_esmf \$\(ESMF_LIB_FLAGS\):g ; - $_ =~ s:ESMFIOEXTLIB:-L$sw_esmflib_path -lesmf -L\$\(WRF_SRC_ROOT_DIR\)/external/io_esmf -lwrfio_esmf \$\(ESMF_LIB_FLAGS\):g ; +# pre 5.2.0r +# $_ =~ s:ESMFIOLIB:-L$sw_esmflib_path -lesmf -L\$\(WRF_SRC_ROOT_DIR\)/external/io_esmf -lwrfio_esmf \$\(ESMF_LIB_FLAGS\):g ; +# $_ =~ s:ESMFIOEXTLIB:-L$sw_esmflib_path -lesmf -L\$\(WRF_SRC_ROOT_DIR\)/external/io_esmf -lwrfio_esmf \$\(ESMF_LIB_FLAGS\):g ; +# post 5.2.0r + $_ =~ s:ESMFIOLIB:\$\(ESMF_F90LINKPATHS\) \$\(ESMF_F90ESMFLINKLIBS\) -L\$\(WRF_SRC_ROOT_DIR\)/external/io_esmf -lwrfio_esmf: ; + $_ =~ s:ESMFIOEXTLIB:\$\(ESMF_IO_LIB\): ; + + $_ =~ s:ESMFLIBFLAG:\$\(ESMF_LDFLAG\):g ; +# $_ =~ s:ESMFINCLUDEGOESHERE:'include $(ESMFLIB)/esmf.mk': ; + } else { @@ -513,6 +524,10 @@ while ( ) if ( $paropt eq 'dmpar' || $paropt eq 'dm+sm' ) { if ( $sw_os ne "CYGWIN_NT" ) { $sw_comms_lib = "\$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a" ; + if ( $sw_wrf_core eq "4D_DA_CORE" ) + { + $sw_comms_lib = "\$(WRFPLUS_DIR)/external/RSL_LITE/librsl_lite.a" ; + } } else { $sw_comms_lib = "../external/RSL_LITE/librsl_lite.a" ; } @@ -552,6 +567,8 @@ while ( ) $_ =~ s:ESMFIOINC:-I\$\(WRF_SRC_ROOT_DIR\)/external/io_esmf:g ; $_ =~ s:ESMFIODEFS:-DESMFIO:g ; $_ =~ s:ESMFTARGET:wrfio_esmf:g ; + $_ =~ s:\# ESMFINCLUDEGOESHERE:include \$\(ESMFLIB\)/esmf.mk: ; + } else { diff --git a/wrfv2_fire/arch/configure_new.defaults b/wrfv2_fire/arch/configure_new.defaults index 861fdc64..9aca9ce1 100644 --- a/wrfv2_fire/arch/configure_new.defaults +++ b/wrfv2_fire/arch/configure_new.defaults @@ -973,11 +973,11 @@ OMPCPP = # -D_OPENMP OMP = # -qsmp=noauto OMPCC = # -qsmp=noauto # these have to be the same as DM_FC on surveyor or it fails with weird errors in time manager -SFC = time mpixlf90_r -SCC = time mpixlc_r -CCOMP = time mpixlc_r -DM_FC = time mpixlf90_r -DM_CC = time mpixlc_r -DMPI2_SUPPORT +SFC = mpixlf90_r +SCC = mpixlc_r +CCOMP = mpixlc_r +DM_FC = mpixlf90_r +DM_CC = mpixlc_r -DMPI2_SUPPORT FC = $(DM_FC) CC = $(DM_CC) -DFSEEKO64_OK LD = $(FC) diff --git a/wrfv2_fire/arch/postamble_new b/wrfv2_fire/arch/postamble_new index 5eef4898..30a83ba5 100644 --- a/wrfv2_fire/arch/postamble_new +++ b/wrfv2_fire/arch/postamble_new @@ -29,6 +29,7 @@ CFLAGS = $(CFLAGS_LOCAL) CONFIGURE_DMPARALLEL CONFIGURE_STUBMPI \ -DMAX_HISTORY=$(MAX_HISTORY) FCFLAGS = $(FCOPTIM) $(FCBASEOPTS) ESMF_LIB_FLAGS = ESMFLIBFLAG +# ESMF 5 -- these are defined in esmf.mk, included above #NOWIN ESMF_IO_LIB = ESMFIOLIB ESMF_IO_LIB_EXT = ESMFIOEXTLIB INCLUDE_MODULES = $(MODULE_SRCH_FLAG) \ diff --git a/wrfv2_fire/arch/preamble_new b/wrfv2_fire/arch/preamble_new index bd2ddde7..43274260 100644 --- a/wrfv2_fire/arch/preamble_new +++ b/wrfv2_fire/arch/preamble_new @@ -81,6 +81,9 @@ ESMF_IO_DEFS = ESMFIODEFS # select build target for external/io_esmf vs. external/esmf_time_f90 ESMF_TARGET = ESMFTARGET +# ESMFINCLUDEGOESHERE + + ############################################################################## LIBWRFLIB = libwrflib.a diff --git a/wrfv2_fire/compile b/wrfv2_fire/compile index c4b6fa4e..7e9eb1a5 100755 --- a/wrfv2_fire/compile +++ b/wrfv2_fire/compile @@ -258,7 +258,7 @@ else setenv CRTM_LIB "-L../external/crtm/libsrc -lCRTM" setenv CRTM_SRC "-I../external/crtm/libsrc" setenv SFC_CRTM `grep '^SFC' configure.wrf | awk '{print $3}' | sed -e 's/\// /g' | awk '{print $NF}'` - setenv ABI_CRTM `grep '^SFC' configure.wrf | grep -o -E "\-m[0-9]{2}"` + setenv ABI_CRTM `grep '^SFC' configure.wrf | sed -n 's/.*\(\-m[0-9]\{2\}\).*/\1/p'` else setenv CRTM_CPP " " setenv CRTM_LIB " " @@ -316,9 +316,15 @@ else endif if ( $overwrite ) then if (($WRF_NMM_CORE == 1)&&($WRF_NMM_NEST == 1)) then - echo copying Registry/Registry.NMM_NEST to Registry/Registry - echo '## WARNING: this file is autogenerated from Registry/Registry.NMM_NEST. Changes may be lost' > Registry/Registry - /bin/cat Registry/Registry.NMM_NEST >> Registry/Registry + if ($HWRF == 1) then + echo copying Registry/Registry.NMM_HWRF to Registry/Registry + echo '## WARNING: this file is autogenerated from Registry/Registry.NMM_HWRF. Changes may be lost' > Registry/Registry + /bin/cat Registry/Registry.NMM_HWRF >> Registry/Registry + else + echo copying Registry/Registry.NMM_NEST to Registry/Registry + echo '## WARNING: this file is autogenerated from Registry/Registry.NMM_NEST. Changes may be lost' > Registry/Registry + /bin/cat Registry/Registry.NMM_NEST >> Registry/Registry + endif else echo copying Registry/Registry.NMM to Registry/Registry echo '## WARNING: this file is autogenerated from Registry/Registry.NMM. Changes may be lost' > Registry/Registry diff --git a/wrfv2_fire/configure b/wrfv2_fire/configure index f7ab49b6..9ba2332d 100755 --- a/wrfv2_fire/configure +++ b/wrfv2_fire/configure @@ -532,7 +532,7 @@ echo "If you wish to change settings, please edit that file." echo "If you wish to change the default options, edit the file:" echo " arch/configure_new.defaults" -if test -n $NETCDF ; then +if test -n "$NETCDF" ; then grep nf_format_64bit $NETCDF/include/netcdf.inc > /dev/null configure_aaaa=$? ; export configure_aaaa if [ $configure_aaaa -a -z "$WRFIO_NCD_LARGE_FILE_SUPPORT" ] ; then @@ -544,7 +544,7 @@ if test -n $NETCDF ; then fi echo " " -if [ "$wrf_core" = "DA_CORE" ]; then +if [ "$wrf_core" = "DA_CORE" -o "$wrf_core" = "4D_DA_CORE" ]; then if [ "`grep '^SFC' configure.wrf | grep -i 'gfortran'`" != "" ]; then echo "WRFDA using gfortran needs realsize=8" sed -e '/^PROMOTION.*=/s/#//' configure.wrf > configure.wrf.edit @@ -572,7 +572,7 @@ if [ $os = "Linux" -o $os = "Darwin" ]; then CCOMP_MULTI_ABI=0 CROSS_COMPILING=0 - foo=`mktemp foo_$$` + foo=foo_$$ echo echo Testing for NetCDF, C and Fortran compiler @@ -592,30 +592,30 @@ cat > ${foo}.f < ${foo}.o + ar p $NETCDF/lib/libnetcdf.a nc.o > ${foo}.o netcdf_arch="`file ${foo}.o | grep -o -E '[0-9]{2}-bit|i386'`" rm ${foo}.o $SFC -o ${foo} ${foo}.f > /dev/null 2>&1 SFC_arch="`file ${foo} | grep -o -E '[0-9]{2}-bit|i386'`" - rm ${foo} 2> /dev/null + rm ${foo} ${foo}.o 2> /dev/null $SCC -o ${foo} ${foo}.c > /dev/null 2>&1 SCC_arch="`file ${foo} | grep -o -E '[0-9]{2}-bit|i386'`" CCOMP_arch=$SCC_arch - rm ${foo} 2> /dev/null + rm ${foo} ${foo}.o 2> /dev/null if [ "$SCC" != "$CCOMP" ]; then $CCOMP -o ${foo} ${foo}.c > /dev/null 2>&1 CCOMP_arch="`file ${foo} | grep -o -E '[0-9]{2}-bit|i386'`" - rm ${foo} 2> /dev/null + rm ${foo} ${foo}.o 2> /dev/null fi if [ "$SFC_arch" = "" -o "$SCC_arch" = "" -o "$CCOMP_arch" = "" ]; then echo " One of compilers testing failed!" echo " Please check your compiler" echo - rm ${foo}* 2> /dev/null + rm -f ${foo} ${foo}.[cfo] 2> /dev/null exit else cp configure.wrf configure.wrf.edit @@ -736,7 +736,7 @@ EOF mv configure.wrf.edit configure.wrf fi - rm ${foo}* 2> /dev/null + rm -f ${foo} ${foo}.[cfo] 2> /dev/null if [ $CROSS_COMPILING -eq 0 ] ; then echo This installation NetCDF is $netcdf_arch diff --git a/wrfv2_fire/dyn_em/Makefile b/wrfv2_fire/dyn_em/Makefile index 0566d14b..66090ddc 100644 --- a/wrfv2_fire/dyn_em/Makefile +++ b/wrfv2_fire/dyn_em/Makefile @@ -138,7 +138,6 @@ module_initialize_b_wave.o : \ module_init_utilities.o module_force_scm.o: module_init_utilities.o -module_convtrans_prep.o: module_convtrans_prep.o module_initialize_grav2d_x.o: \ ../frame/module_domain.o \ diff --git a/wrfv2_fire/dyn_em/module_big_step_utilities_em.F b/wrfv2_fire/dyn_em/module_big_step_utilities_em.F index 1df26912..1a3cb6ae 100644 --- a/wrfv2_fire/dyn_em/module_big_step_utilities_em.F +++ b/wrfv2_fire/dyn_em/module_big_step_utilities_em.F @@ -953,9 +953,9 @@ END SUBROUTINE calc_alt !---------------------------------------------------------------------- -SUBROUTINE calc_p_rho_phi ( moist, n_moist, & - al, alb, mu, muts, ph, p, pb, & - t, p0, t0, znu, dnw, rdnw, & +SUBROUTINE calc_p_rho_phi ( moist, n_moist, hypsometric_opt, & + al, alb, mu, muts, ph, phb, p, pb, & + t, p0, t0, ptop, znu, znw, dnw, rdnw, & rdn, non_hydrostatic, & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & @@ -972,6 +972,7 @@ SUBROUTINE calc_p_rho_phi ( moist, n_moist, & its, ite, jts, jte, kts, kte INTEGER , INTENT(IN ) :: n_moist + INTEGER , INTENT(IN ) :: hypsometric_opt REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(IN ) :: alb, & pb, & @@ -981,20 +982,20 @@ SUBROUTINE calc_p_rho_phi ( moist, n_moist, & REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT( OUT) :: al, p - REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(INOUT) :: ph + REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(INOUT) :: ph, phb REAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN ) :: mu, muts - REAL, DIMENSION( kms:kme ), INTENT(IN ) :: znu, dnw, rdnw, rdn + REAL, DIMENSION( kms:kme ), INTENT(IN ) :: znu, znw, dnw, rdnw, rdn - REAL, INTENT(IN ) :: t0, p0 + REAL, INTENT(IN ) :: t0, p0, ptop ! Local stuff INTEGER :: i, j, k, itf, jtf, ktf, ispe REAL :: qvf, qtot, qf1, qf2 REAL, DIMENSION( its:ite) :: temp,cpovcv_v - + REAL :: pfu, phm, pfd ! ! @@ -1019,16 +1020,44 @@ SUBROUTINE calc_p_rho_phi ( moist, n_moist, & IF (non_hydrostatic) THEN + IF (hypsometric_opt == 1) THEN + DO j=jts,jtf + DO k=kts,ktf + DO i=its,itf + al(i,k,j)=-1./muts(i,j)*(alb(i,k,j)*mu(i,j) + rdnw(k)*(ph(i,k+1,j)-ph(i,k,j))) + END DO + END DO + END DO + ELSE IF (hypsometric_opt == 2) THEN + + ! The relation used to get specific volume, al, is: al = -dZ/dp, + ! where dp = mut * d(eta). The pressure depth, dp, is replaced with + ! p*(dp/p) ~ p*LOG((p+0.5dp)/(p-0.5dp)). Difference between dp and p*dLOG(p) + ! is as follows: p*dLOG(p) - dp = 1/12*(dp/p)**3 + 1/90*(dp/p)**5 + ... + ! Therefore, p*dLOG(p) is always larger than dp and the difference is + ! in proportion to dp/p. TKW, 02/16/2010 + + DO j=jts,jtf + DO k=kts,ktf + DO i=its,itf + pfu = muts(i,j)*znw(k+1)+ptop + pfd = muts(i,j)*znw(k) +ptop + phm = muts(i,j)*znu(k) +ptop + al(i,k,j) = (ph(i,k+1,j)-ph(i,k,j)+phb(i,k+1,j)-phb(i,k,j))/phm/LOG(pfd/pfu)-alb(i,k,j) + END DO + END DO + END DO + ELSE + CALL wrf_error_fatal ( 'calc_p_rho_phi: hypsometric_opt should be 1 or 2' ) + END IF + IF (n_moist >= PARAM_FIRST_SCALAR ) THEN DO j=jts,jtf DO k=kts,ktf DO i=its,itf qvf = 1.+rvovrd*moist(i,k,j,P_QV) - al(i,k,j)=-1./muts(i,j)*(alb(i,k,j)*mu(i,j) & - +rdnw(k)*(ph(i,k+1,j)-ph(i,k,j))) - temp(i)=(r_d*(t0+t(i,k,j))*qvf)/ & - (p0*(al(i,k,j)+alb(i,k,j))) + temp(i)=(r_d*(t0+t(i,k,j))*qvf)/(p0*(al(i,k,j)+alb(i,k,j))) ENDDO #ifdef INTELMKL CALL VPOWX ( itf-its+1, temp(its), cpovcv, p(its,k,j) ) @@ -1047,8 +1076,6 @@ SUBROUTINE calc_p_rho_phi ( moist, n_moist, & DO j=jts,jtf DO k=kts,ktf DO i=its,itf - al(i,k,j)=-1./muts(i,j)*(alb(i,k,j)*mu(i,j) & - +rdnw(k)*(ph(i,k+1,j)-ph(i,k,j))) p(i,k,j)=p0*( (r_d*(t0+t(i,k,j)))/ & (p0*(al(i,k,j)+alb(i,k,j))) )**cpovcv & -pb(i,k,j) @@ -1101,20 +1128,6 @@ SUBROUTINE calc_p_rho_phi ( moist, n_moist, & ENDDO ENDDO - DO k=2,ktf+1 ! integrate hydrostatic equation for geopotential - DO i=its,itf - -! ph(i,k,j) = ph(i,k-1,j) - (1./rdnw(k-1))*( & -! (muts(i,j)+mu(i,j))*al(i,k-1,j)+ & -! mu(i,j)*alb(i,k-1,j) ) - ph(i,k,j) = ph(i,k-1,j) - (dnw(k-1))*( & - (muts(i,j))*al(i,k-1,j)+ & - mu(i,j)*alb(i,k-1,j) ) - - - ENDDO - ENDDO - ENDDO ELSE @@ -1149,22 +1162,45 @@ SUBROUTINE calc_p_rho_phi ( moist, n_moist, & ENDDO ENDDO + ENDDO + + END IF + + IF (hypsometric_opt == 1) THEN + DO j=jts,jtf DO k=2,ktf+1 ! integrate hydrostatic equation for geopotential DO i=its,itf - -! ph(i,k,j) = ph(i,k-1,j) - (1./rdnw(k-1))*( & -! (muts(i,j)+mu(i,j))*al(i,k-1,j)+ & -! mu(i,j)*alb(i,k-1,j) ) ph(i,k,j) = ph(i,k-1,j) - (dnw(k-1))*( & (muts(i,j))*al(i,k-1,j)+ & mu(i,j)*alb(i,k-1,j) ) - - ENDDO ENDDO + ENDDO + ELSE + ! Revised hypsometric eq.: dZ=-al*p*dLOG(p), where p is dry pressure + + DO j=jts,jtf + DO i=its,itf + ph(i,kts,j) = phb(i,kts,j) + END DO + + DO k=kts+1,ktf+1 + DO i=its,itf + pfu = muts(i,j)*znw(k) +ptop + pfd = muts(i,j)*znw(k-1)+ptop + phm = muts(i,j)*znu(k-1)+ptop + ph(i,k,j) = ph(i,k-1,j) + (al(i,k-1,j)+alb(i,k-1,j))*phm*LOG(pfd/pfu) + ENDDO ENDDO + DO k=kts,ktf+1 + DO i=its,itf + ph(i,k,j) = ph(i,k,j) - phb(i,k,j) + END DO + END DO + END DO + END IF END IF @@ -4556,7 +4592,7 @@ END SUBROUTINE pole_point_bc rho, th_phy, p_phy , pi_phy , & ! output u_phy, v_phy, p8w, t_phy, t8w, & ! output z, z_at_w, dz8w, & ! output - p_hyd, p_hyd_w, & ! output + p_hyd, p_hyd_w, dnw, & ! output fzm, fzp, znw, p_top, & ! params RTHRATEN, & RTHBLTEN, RUBLTEN, RVBLTEN, & @@ -4623,7 +4659,8 @@ END SUBROUTINE pole_point_bc REAL , DIMENSION( kms:kme ) , INTENT(IN ) :: fzm, & fzp - REAL , DIMENSION( kms:kme ) , INTENT(IN ) :: znw + REAL , DIMENSION( kms:kme ) , INTENT(IN ) :: znw, & + dnw REAL, DIMENSION( ims:ime , kms:kme, jms:jme ), & INTENT(INOUT) :: RTHRATEN @@ -4672,7 +4709,8 @@ END SUBROUTINE pole_point_bc INTEGER :: i_start, i_end, j_start, j_end, k_start, k_end, i_startu, j_startv INTEGER :: i, j, k REAL :: w1, w2, z0, z1, z2 - REAL :: e_vapor + REAL :: qtot + INTEGER :: n !----------------------------------------------------------------------- @@ -4799,13 +4837,15 @@ END SUBROUTINE pole_point_bc enddo enddo - e_vapor = 0. do j = j_start,j_end do k = kte-1, k_start, -1 do i = i_start, i_end -! e_vapor = 1./alt(i,k,j)*moist(i,k,j,P_QV)*g*dz8w(i,k,j) -! p_hyd_w(i,k,j) = p_hyd_w(i,k+1,j)+e_vapor - p_hyd_w(i,k,j) = p_hyd_w(i,k+1,j)+1./alt(i,k,j)*(1.+moist(i,k,j,P_QV))*g*dz8w(i,k,j) + qtot = 0. + do n = PARAM_FIRST_SCALAR,n_moist + qtot = qtot + moist(i,k,j,n) + enddo + p_hyd_w(i,k,j) = p_hyd_w(i,k+1,j) - (1.+qtot)*mu(i,j)*dnw(k) +! p_hyd_w(i,k,j) = p_hyd_w(i,k+1,j)+1./alt(i,k,j)*(1.+moist(i,k,j,P_QV))*g*dz8w(i,k,j) enddo enddo enddo diff --git a/wrfv2_fire/dyn_em/module_first_rk_step_part1.F b/wrfv2_fire/dyn_em/module_first_rk_step_part1.F index f8329dd3..e121682a 100644 --- a/wrfv2_fire/dyn_em/module_first_rk_step_part1.F +++ b/wrfv2_fire/dyn_em/module_first_rk_step_part1.F @@ -191,7 +191,7 @@ BENCH_END(init_zero_tend_tim) grid%ph_2, grid%phb, grid%t_2, grid%tsk, moist, num_moist, & rho,th_phy, p_phy, pi_phy, u_phy, v_phy, & p8w, t_phy, t8w, grid%z, grid%z_at_w, dz8w, & - grid%p_hyd, grid%p_hyd_w, & + grid%p_hyd, grid%p_hyd_w, grid%dnw, & grid%fnm, grid%fnp, grid%znw, grid%p_top, & grid%rthraten, & grid%rthblten, grid%rublten, grid%rvblten, & @@ -330,6 +330,7 @@ BENCH_START(rad_driver_tim) & ,M_PS_1=grid%m_ps_1, M_PS_2=grid%m_ps_2, AEROSOLC_1=grid%aerosolc_1 & & ,AEROSOLC_2=grid%aerosolc_2, M_HYBI0=grid%m_hybi & & ,ABSTOT=grid%abstot, ABSNXT=grid%absnxt, EMSTOT=grid%emstot & + & ,RADTACTTIME=grid%radtacttime & #ifdef WRF_CHEM & ,CU_RAD_FEEDBACK=config_flags%cu_rad_feedback & & ,AER_RA_FEEDBACK=config_flags%aer_ra_feedback & @@ -391,6 +392,7 @@ BENCH_START(surf_driver_tim) & ,P8W=grid%p_hyd_w ,PBLH=grid%pblh ,PI_PHY=pi_phy & & ,PSFC=grid%psfc ,PSHLTR=grid%pshltr ,PSIH=psih & & ,BLDT=grid%bldt ,CURR_SECS=curr_secs, ADAPT_STEP_FLAG=adapt_step_flag & + & ,BLDTACTTIME=grid%bldtacttime & & ,PSIM=psim ,P_PHY=grid%p_hyd ,Q10=grid%q10 & & ,Q2=grid%q2 ,QFX=grid%qfx ,QSFC=grid%qsfc & & ,QSHLTR=grid%qshltr ,QZ0=grid%qz0 ,RAINCV=grid%raincv & @@ -545,6 +547,7 @@ BENCH_START(pbl_driver_tim) & AKHS=grid%akhs ,AKMS=grid%akms & & ,BL_PBL_PHYSICS=config_flags%bl_pbl_physics & & ,BLDT=grid%bldt, CURR_SECS=curr_secs, ADAPT_STEP_FLAG=adapt_step_flag & + & ,BLDTACTTIME=grid%bldtacttime & & ,BR=br ,CHKLOWQ=chklowq ,CT=grid%ct & & ,DT=grid%dt ,DX=grid%dx ,DZ8W=dz8w & & ,EXCH_H=grid%exch_h ,EXCH_M=grid%exch_m & @@ -685,6 +688,7 @@ BENCH_START(cu_driver_tim) ! Other arguments & ,ITIMESTEP=grid%itimestep ,DT=grid%dt ,DX=grid%dx & & ,CUDT=grid%cudt,CURR_SECS=curr_secs,ADAPT_STEP_FLAG=adapt_step_flag & + & ,CUDTACTTIME=grid%cudtacttime & & ,RAINC=grid%rainc ,RAINCV=grid%raincv ,PRATEC=grid%pratec & & ,NCA=grid%nca & & ,HTOP=grid%cutop ,HBOT=grid%cubot ,KPBL=grid%kpbl & diff --git a/wrfv2_fire/dyn_em/module_first_rk_step_part2.F b/wrfv2_fire/dyn_em/module_first_rk_step_part2.F index c2330ef5..7140d586 100644 --- a/wrfv2_fire/dyn_em/module_first_rk_step_part2.F +++ b/wrfv2_fire/dyn_em/module_first_rk_step_part2.F @@ -56,7 +56,7 @@ CONTAINS USE module_physics_addtendc, ONLY : update_phy_ten USE module_sfs_driver !JDM - USE module_stoch, ONLY : update_stoch_ten, update_stoch , update_stoch_ten_subdomains, & + USE module_stoch, ONLY : update_stoch_ten, update_stoch , calculate_stoch_ten, & do_fftback_along_x,do_fftback_along_y,sp2gp_prep @@ -140,6 +140,7 @@ CONTAINS INTEGER num_road_layers INTEGER iswater INTEGER rk_step + #if ( WRF_DFI_RADAR == 1 ) INTEGER i_start,i_end,j_start,j_end,i,j,k #endif @@ -149,9 +150,7 @@ CONTAINS rk_step = 1 - stoch_force_select: SELECT CASE(config_flags%stoch_force_opt) - - CASE (STOCH_BACKSCATTER) + IF (grid%stoch_force_global_opt==1) then IF ( grid%id .EQ. 1 ) THEN @@ -182,7 +181,7 @@ CONTAINS !$OMP END PARALLEL DO ! Roll out into latitude bands and perform FFT along latitude bands -#ifdef DM_PARALLEL +#if ( defined( DM_PARALLEL ) && ( ! defined( STUBMPI ) ) ) #include "XPOSE_STOCH_BACK_U_REAL_z2x.inc" #include "XPOSE_STOCH_BACK_U_IMAG_z2x.inc" #include "XPOSE_STOCH_BACK_V_REAL_z2x.inc" @@ -244,6 +243,7 @@ CONTAINS #include "XPOSE_STOCH_BACK_T_IMAG_y2z.inc" #else + call do_fftback_along_x( & grid%RU_REAL,grid%RU_IMAG,& grid%RV_REAL,grid%RV_IMAG,& @@ -251,10 +251,10 @@ CONTAINS ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & ips, ipe, jps, jpe, kps, kpe, & - imsx,imex,jmsx,jmex,kmsx,kmex, & - ipsx,ipex,jpsx,jpex,kpsx,kpex, & - imsy,imey,jmsy,jmey,kmsy,kmey, & - ipsy,ipey,jpsy,jpey,kpsy,kpey, & + ims, ime, jms, jme, kms, kme, & + ips, ipe, jps, jpe, kps, kpe, & + ims, ime, jms, jme, kms, kme, & + ips, ipe, jps, jpe, kps, kpe, & k_start , k_end & ) call do_fftback_along_y( & @@ -264,10 +264,10 @@ CONTAINS ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & ips, ipe, jps, jpe, kps, kpe, & - imsx,imex,jmsx,jmex,kmsx,kmex, & - ipsx,ipex,jpsx,jpex,kpsx,kpex, & - imsy,imey,jmsy,jmey,kmsy,kmey, & - ipsy,ipey,jpsy,jpey,kpsy,kpey, & + ims, ime, jms, jme, kms, kme, & + ips, ipe, jps, jpe, kps, kpe, & + ims, ime, jms, jme, kms, kme, & + ips, ipe, jps, jpe, kps, kpe, & k_start , k_end & ) #endif @@ -276,11 +276,12 @@ CONTAINS !$OMP PRIVATE ( ij ) DO ij = 1 , grid%num_tiles CALL wrf_debug ( 200 , ' call update_stoch_ten' ) - CALL update_stoch_ten(ru_tendf, rv_tendf, t_tendf, & + CALL calculate_stoch_ten(ru_tendf, rv_tendf, t_tendf, & grid%ru_tendf_stoch, & grid%rv_tendf_stoch, & grid%rt_tendf_stoch, & grid%RU_REAL,grid%RV_REAL,grid%RT_REAL, & + grid%mu_2 , grid%mub, & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & grid%i_start(ij), grid%i_end(ij), & @@ -290,16 +291,22 @@ CONTAINS ENDDO !$OMP END PARALLEL DO - ELSE ! (grid%id .NE> 1) + END IF !grid%id==1 + ENDIF !toch_force_global_opt + + stoch_force_select: SELECT CASE(config_flags%stoch_force_opt) + + CASE (STOCH_BACKSCATTER) !$OMP PARALLEL DO & !$OMP PRIVATE ( ij ) DO ij = 1 , grid%num_tiles - CALL wrf_debug ( 200 , ' call update_stoch_ten_subdomains' ) - CALL update_stoch_ten_subdomains(ru_tendf, rv_tendf, t_tendf,& + CALL wrf_debug ( 200 , ' call update_stoch_ten' ) + CALL update_stoch_ten(ru_tendf, rv_tendf, t_tendf,& grid%ru_tendf_stoch, & grid%rv_tendf_stoch, & grid%rt_tendf_stoch, & + grid%mu_2 , grid%mub, & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & grid%i_start(ij), grid%i_end(ij), & @@ -309,9 +316,8 @@ CONTAINS ENDDO !$OMP END PARALLEL DO - END IF - END SELECT stoch_force_select + END SELECT stoch_force_select ! calculate_phy_tend diff --git a/wrfv2_fire/dyn_em/module_initialize_real.F b/wrfv2_fire/dyn_em/module_initialize_real.F index 0474ebaf..557c4f14 100644 --- a/wrfv2_fire/dyn_em/module_initialize_real.F +++ b/wrfv2_fire/dyn_em/module_initialize_real.F @@ -129,6 +129,7 @@ integer::oops1,oops2 INTEGER :: lev500 , loop_count REAL :: zl , zu , pl , pu , z500 , dz500 , tvsfc , dpmu + REAL :: pfu, pfd, phm LOGICAL , PARAMETER :: want_full_levels = .TRUE. LOGICAL , PARAMETER :: want_half_levels = .FALSE. @@ -631,6 +632,7 @@ integer::oops1,oops2 END DO END IF + IF ( any_valid_points ) THEN ! Check for and semi-fix missing surface fields. IF ( grid%p_gc(i_valid,num_metgrid_levels,j_valid) .LT. grid%p_gc(i_valid,2,j_valid) ) THEN @@ -691,7 +693,6 @@ integer::oops1,oops2 CALL wrf_message ( a_message ) END IF - ! Compute the mixing ratio from the input relative humidity. IF ( ( flag_qv .NE. 1 ) .AND. ( flag_sh .NE. 1 ) ) THEN @@ -773,6 +774,14 @@ integer::oops1,oops2 END DO END IF + ! If the pressure levels in the middle of the atmosphere are upside down, then + ! this is hybrid data. Computing the new surface pressure should use sfcprs2. + + IF ( grid%p_gc(i_valid,num_metgrid_levels/2,j_valid) .LT. grid%p_gc(i_valid,num_metgrid_levels/2+1,j_valid) ) THEN + config_flags%sfcp_to_sfcp = .TRUE. + END IF + END IF + ! Assign surface fields with original input values. If this is hybrid data, ! the values are not exactly representative. However - this is only for ! plotting purposes and such at the 0h of the forecast, so we are not all that @@ -910,13 +919,6 @@ integer::oops1,oops2 END DO END DO - ! If the pressure levels in the middle of the atmosphere are upside down, then - ! this is hybrid data. Computing the new surface pressure should use sfcprs2. - - IF ( grid%p_gc(i_valid,num_metgrid_levels/2,j_valid) .LT. grid%p_gc(i_valid,num_metgrid_levels/2+1,j_valid) ) THEN - config_flags%sfcp_to_sfcp = .TRUE. - END IF - ! Two ways to get the surface pressure. 1) If we have the low-res input surface ! pressure and the low-res topography, then we can do a simple hydrostatic ! relation. 2) Otherwise we compute the surface pressure from the sea-level @@ -928,6 +930,8 @@ integer::oops1,oops2 ( flag_soilhgt .EQ. 1 ) .AND. & ( flag_slp .EQ. 1 ) .AND. & ( .NOT. config_flags%sfcp_to_sfcp ) ) THEN + WRITE(a_message,FMT='(A)') 'Using sfcprs3 to compute psfc' + CALL wrf_message ( a_message ) CALL sfcprs3(grid%ght_gc, grid%p_gc, grid%ht, & grid%pslv_gc, grid%psfc, & ids , ide , jds , jde , 1 , num_metgrid_levels , & @@ -936,12 +940,16 @@ integer::oops1,oops2 ELSE IF ( ( flag_psfc .EQ. 1 ) .AND. & ( flag_soilhgt .EQ. 1 ) .AND. & ( config_flags%sfcp_to_sfcp ) ) THEN + WRITE(a_message,FMT='(A)') 'Using sfcprs2 to compute psfc' + CALL wrf_message ( a_message ) CALL sfcprs2(grid%t_gc, grid%qv_gc, grid%ght_gc, grid%psfc_gc, grid%ht, & grid%tavgsfc, grid%p_gc, grid%psfc, we_have_tavgsfc, & ids , ide , jds , jde , 1 , num_metgrid_levels , & ims , ime , jms , jme , 1 , num_metgrid_levels , & its , ite , jts , jte , 1 , num_metgrid_levels ) ELSE IF ( flag_slp .EQ. 1 ) THEN + WRITE(a_message,FMT='(A)') 'Using sfcprs to compute psfc' + CALL wrf_message ( a_message ) CALL sfcprs (grid%t_gc, grid%qv_gc, grid%ght_gc, grid%pslv_gc, grid%ht, & grid%tavgsfc, grid%p_gc, grid%psfc, we_have_tavgsfc, & ids , ide , jds , jde , 1 , num_metgrid_levels , & @@ -1022,12 +1030,15 @@ integer::oops1,oops2 its , ite , jts , jte , kts , kte ) END IF - ! The input field is temperature, we want potential temp. + IF ( config_flags%interp_theta ) THEN - CALL t_to_theta ( grid%t_gc , grid%p_gc , p00 , & - ids , ide , jds , jde , 1 , num_metgrid_levels , & - ims , ime , jms , jme , 1 , num_metgrid_levels , & - its , ite , jts , jte , 1 , num_metgrid_levels ) + ! The input field is temperature, we want potential temp. + + CALL t_to_theta ( grid%t_gc , grid%p_gc , p00 , & + ids , ide , jds , jde , 1 , num_metgrid_levels , & + ims , ime , jms , jme , 1 , num_metgrid_levels , & + its , ite , jts , jte , 1 , num_metgrid_levels ) + END IF IF ( flag_slp .EQ. 1 ) THEN @@ -1119,6 +1130,12 @@ integer::oops1,oops2 ims , ime , jms , jme , kms , kme , & its , ite , jts , jte , kts , kte ) + ! Depending on the setting of interp_theta = T/F, t_gc is is either theta Xor + ! temperature, and that means that the t_2 field is also the associated field. + ! It is better to interpolate temperature and potential temperature in LOG(p), + ! regardless of requested default. + + interp_type = 2 CALL vert_interp ( grid%t_gc , grid%pd_gc , grid%t_2 , grid%pb , & num_metgrid_levels , 'T' , & interp_type , lagrange_order , t_extrap_type , & @@ -1127,7 +1144,11 @@ integer::oops1,oops2 ids , ide , jds , jde , kds , kde , & ims , ime , jms , jme , kms , kme , & its , ite , jts , jte , kts , kte ) + interp_type = grid%interp_type + ! It is better to interpolate pressure in p regardless default options + + interp_type = 1 CALL vert_interp ( grid%p_gc , grid%pd_gc , grid%p , grid%pb , & num_metgrid_levels , 'T' , & interp_type , lagrange_order , t_extrap_type , & @@ -1136,6 +1157,7 @@ integer::oops1,oops2 ids , ide , jds , jde , kds , kde , & ims , ime , jms , jme , kms , kme , & its , ite , jts , jte , kts , kte ) + interp_type = grid%interp_type ! Do not have full pressure on eta levels, get a first guess at Qv by using ! dry pressure. The use of u_1 (rh) and v_1 (temperature) is temporary. @@ -1143,10 +1165,13 @@ integer::oops1,oops2 ! eta surfaces. grid%v_1 = grid%t_2 - CALL theta_to_t ( grid%v_1 , grid%p , p00 , & - ids , ide , jds , jde , kds , kde , & - ims , ime , jms , jme , kms , kme , & - its , ite , jts , jte , kts , kte ) + + IF ( config_flags%interp_theta ) THEN + CALL theta_to_t ( grid%v_1 , grid%p , p00 , & + ids , ide , jds , jde , kds , kde , & + ims , ime , jms , jme , kms , kme , & + its , ite , jts , jte , kts , kte ) + END IF IF ( config_flags%rh2qv_method .eq. 1 ) THEN CALL rh_to_mxrat1(grid%u_1, grid%v_1, grid%p , moist(:,:,:,P_QV) , & @@ -1170,6 +1195,13 @@ integer::oops1,oops2 its , ite , jts , jte , kts , kte-1 ) END IF + IF ( .NOT. config_flags%interp_theta ) THEN + CALL t_to_theta ( grid%t_2 , grid%p , p00 , & + ids , ide , jds , jde , kds , kde , & + ims , ime , jms , jme , kms , kme , & + its , ite , jts , jte , kts , kte ) + END IF + num_3d_m = num_moist num_3d_s = num_scalar @@ -1455,6 +1487,7 @@ integer::oops1,oops2 ! surface_input_source=2 => use data from grib file (dominant category as input) ! surface_input_source=3 => use dominant data from static file (dominant category as input) + IF ( any_valid_points ) THEN IF ( config_flags%surface_input_source .EQ. 1 ) THEN ! Generate the vegetation and soil category information from the fractional input @@ -1537,6 +1570,7 @@ integer::oops1,oops2 END IF END IF + END IF ! Adjustments for the seaice field PRIOR to the grid%tslb computations. This is ! is for the 5-layer scheme. @@ -2030,9 +2064,21 @@ endif ! This field is on full levels. grid%phb(i,1,j) = grid%ht(i,j) * g - DO k = 2,kte - grid%phb(i,k,j) = grid%phb(i,k-1,j) - grid%dnw(k-1)*grid%mub(i,j)*grid%alb(i,k-1,j) - END DO + IF (grid%hypsometric_opt == 1) THEN + DO k = 2,kte + grid%phb(i,k,j) = grid%phb(i,k-1,j) - grid%dnw(k-1)*grid%mub(i,j)*grid%alb(i,k-1,j) + END DO + ELSE IF (grid%hypsometric_opt == 2) THEN + DO k = 2,kte + pfu = grid%mub(i,j)*grid%znw(k) + grid%p_top + pfd = grid%mub(i,j)*grid%znw(k-1) + grid%p_top + phm = grid%mub(i,j)*grid%znu(k-1) + grid%p_top + grid%phb(i,k,j) = grid%phb(i,k-1,j) + grid%alb(i,k-1,j)*phm*LOG(pfd/pfu) + END DO + ELSE + CALL wrf_error_fatal( 'initialize_real: hypsometric_opt should be 1 or 2' ) + END IF + END DO END DO @@ -2151,12 +2197,30 @@ endif ! This is the hydrostatic equation used in the model after the small timesteps. In ! the model, grid%al (inverse density) is computed from the geopotential. - DO k = 2,kte - grid%ph_2(i,k,j) = grid%ph_2(i,k-1,j) - & - grid%dnw(k-1) * ( (grid%mub(i,j)+grid%mu_2(i,j))*grid%al(i,k-1,j) & - + grid%mu_2(i,j)*grid%alb(i,k-1,j) ) - grid%ph0(i,k,j) = grid%ph_2(i,k,j) + grid%phb(i,k,j) - END DO + IF (grid%hypsometric_opt == 1) THEN + DO k = 2,kte + grid%ph_2(i,k,j) = grid%ph_2(i,k-1,j) - & + grid%dnw(k-1) * ( (grid%mub(i,j)+grid%mu_2(i,j))*grid%al(i,k-1,j) & + + grid%mu_2(i,j)*grid%alb(i,k-1,j) ) + grid%ph0(i,k,j) = grid%ph_2(i,k,j) + grid%phb(i,k,j) + END DO + ELSE IF (grid%hypsometric_opt == 2) THEN + ! Alternative hydrostatic eq.: dZ = -al*p*dLOG(p), where p is dry pressure. + ! Note that al*p approximates Rd*T and dLOG(p) does z. + ! Here T varies mostly linear with z, the first-order integration produces better result. + + grid%ph_2(i,1,j) = grid%phb(i,1,j) + DO k = 2,kte + pfu = grid%mu0(i,j)*grid%znw(k) + grid%p_top + pfd = grid%mu0(i,j)*grid%znw(k-1) + grid%p_top + phm = grid%mu0(i,j)*grid%znu(k-1) + grid%p_top + grid%ph_2(i,k,j) = grid%ph_2(i,k-1,j) + grid%alt(i,k-1,j)*phm*LOG(pfd/pfu) + END DO + + DO k = 1,kte + grid%ph_2(i,k,j) = grid%ph_2(i,k,j) - grid%phb(i,k,j) + END DO + END IF #else ! Get the perturbation geopotential from the 3d height array from WPS. @@ -2181,7 +2245,7 @@ endif ! surfaces, and folks have asked to do this option. IF ( ( flag_metgrid .EQ. 1 ) .AND. & - ( flag_ptheta .EQ. 1 ) .AND. & + ( flag_ptheta .EQ. 0 ) .AND. & ( config_flags%adjust_heights ) .AND. & ( lev500 .NE. 0 ) ) THEN @@ -2278,7 +2342,7 @@ endif DO j = jts, min(jde-1,jte) DO i = its, min(ide-1,ite) IF ( skip_middle_points_t ( ids , ide , jds , jde , i , j , em_width , hold_ups ) ) CYCLE - p_surf = p00 * EXP ( -t00/a + ( (t00/a)**2 - 2.*g*grid%ht(i,j)/a/r_d ) **0.5 ) +! p_surf = p00 * EXP ( -t00/a + ( (t00/a)**2 - 2.*g*grid%ht(i,j)/a/r_d ) **0.5 ) ! grid%psfc(i,j)=p_surf + grid%p(i,1,j) grid%th2(i,j)=grid%t2(i,j)*(p00/(grid%p(i,1,j)+grid%pb(i,1,j)))**(r_d/cp) END DO @@ -2287,7 +2351,8 @@ endif DO j = jts, min(jde-1,jte) DO i = its, min(ide-1,ite) IF ( skip_middle_points_t ( ids , ide , jds , jde , i , j , em_width , hold_ups ) ) CYCLE - grid%q2(i,j)=moist(i,1,j,P_QV) +! grid%q2(i,j)=moist(i,1,j,P_QV) + grid%q2(i,j)=grid%qv_gc(i,1,j) END DO END DO END IF @@ -2374,6 +2439,7 @@ endif i, j, k REAL :: temp, temp_int + REAL :: pfu, pfd, phm SELECT CASE ( model_data_order ) CASE ( DATA_ORDER_ZXY ) @@ -2500,9 +2566,20 @@ endif ! This field is on full levels. grid%phb(i,1,j) = grid%ht_fine(i,j) * g - DO k = 2,kte - grid%phb(i,k,j) = grid%phb(i,k-1,j) - grid%dnw(k-1)*grid%mub(i,j)*grid%alb(i,k-1,j) - END DO + IF (grid%hypsometric_opt == 1) THEN + DO k = 2,kte + grid%phb(i,k,j) = grid%phb(i,k-1,j) - grid%dnw(k-1)*grid%mub(i,j)*grid%alb(i,k-1,j) + END DO + ELSE IF (grid%hypsometric_opt == 2) THEN + DO k = 2,kte + pfu = grid%mub(i,j)*grid%znw(k) + grid%p_top + pfd = grid%mub(i,j)*grid%znw(k-1) + grid%p_top + phm = grid%mub(i,j)*grid%znu(k-1) + grid%p_top + grid%phb(i,k,j) = grid%phb(i,k-1,j) + grid%alb(i,k-1,j)*phm*LOG(pfd/pfu) + END DO + ELSE + CALL wrf_error_fatal( 'initialize_real: hypsometric_opt should be 1 or 2' ) + END IF END DO END DO @@ -2558,12 +2635,32 @@ endif ! This is the hydrostatic equation used in the model after the small timesteps. In ! the model, grid%al (inverse density) is computed from the geopotential. - DO k = 2,kte - grid%ph_2(i,k,j) = grid%ph_2(i,k-1,j) - & - grid%dnw(k-1) * ( (grid%mub(i,j)+grid%mu_2(i,j))*grid%al(i,k-1,j) & - + grid%mu_2(i,j)*grid%alb(i,k-1,j) ) - grid%ph0(i,k,j) = grid%ph_2(i,k,j) + grid%phb(i,k,j) - END DO + IF (grid%hypsometric_opt == 1) THEN + DO k = 2,kte + grid%ph_2(i,k,j) = grid%ph_2(i,k-1,j) - & + grid%dnw(k-1) * ( (grid%mub(i,j)+grid%mu_2(i,j))*grid%al(i,k-1,j) & + + grid%mu_2(i,j)*grid%alb(i,k-1,j) ) + grid%ph0(i,k,j) = grid%ph_2(i,k,j) + grid%phb(i,k,j) + END DO + ELSE IF (grid%hypsometric_opt == 2) THEN + + ! Alternative hydrostatic eq.: dZ = -al*p*dLOG(p), where p is dry pressure. + ! Note that al*p approximates Rd*T and dLOG(p) does z. + ! Here T varies mostly linear with z, the first-order integration produces better result. + + grid%ph_2(i,1,j) = grid%phb(i,1,j) + DO k = 2,kte + pfu = grid%mu0(i,j)*grid%znw(k) + grid%p_top + pfd = grid%mu0(i,j)*grid%znw(k-1) + grid%p_top + phm = grid%mu0(i,j)*grid%znu(k-1) + grid%p_top + grid%ph_2(i,k,j) = grid%ph_2(i,k-1,j) + grid%alt(i,k-1,j)*phm*LOG(pfd/pfu) + END DO + + DO k = 1,kte + grid%ph_2(i,k,j) = grid%ph_2(i,k,j) - grid%phb(i,k,j) + END DO + + END IF END DO END DO diff --git a/wrfv2_fire/dyn_em/module_stoch.F b/wrfv2_fire/dyn_em/module_stoch.F index 15645c66..a4e45487 100644 --- a/wrfv2_fire/dyn_em/module_stoch.F +++ b/wrfv2_fire/dyn_em/module_stoch.F @@ -56,6 +56,7 @@ module module_stoch ! --------- Others ------------------------------------------------- REAL, PARAMETER:: RPI= 3.141592653589793 !4.0*atan(1.0) + REAL, PARAMETER:: CP= 1006 ! specific heat of dry air in J/(Kg*K)= m^2/(K* s^2) save @@ -205,6 +206,11 @@ contains ENDDO ENDDO ZGAMMAN=4.0*ZGAMMAN !account for all quadrants, although only one is Filled + +! A value TOT_BACKSCAT_PSI=xx m^2/S^3 means that in each gridbox and on average, +! a dissipation rate of D=TOT_BACKSCAT_PSI m^2/s^3 is backscattered onto the resolved streamfunction +! The resulting units for ZCONSTF0 are sqrt(m^2/(s^3*s)) = m^2/s^2, which is the unit of dpsi/dt +! Note, that the unit of IK has the unit m here. ZCONSTF0=SQRT(ALPH*TOT_BACKSCAT_PSI/(float(itime_step)*ZSIGMA2_EPS*ZGAMMAN))/(2*RPI) ZCHIT = 0.0 @@ -229,7 +235,11 @@ contains ENDDO ENDDO ZGAMMAN=4.0*ZGAMMAN !account for all quadrants, although only one is Filled - ZCONSTF0T=SQRT(ALPH*TOT_BACKSCAT_T/(float(itime_step)*ZSIGMA2_EPS*ZGAMMAN))/(2*RPI) + +! A value TOT_BACKSCAT_T= xx m^2/S^3 means that in each gridbox and on average, +! a dissipation rate of D=TOT_BACKSCAT_T m^2/s^3 is backscattered onto the resolved temperture pattern +! The resulting units for ZCONSTF0T are m^2/s^3* (K* s^2)/m^2 = K/s , which is the unit of dT/dt + ZCONSTF0T=TOT_BACKSCAT_T /cp* SQRT(ALPH/(ZSIGMA2_EPS*ZGAMMAN))/(2*RPI) ! Now the wavenumber-dependent amplitudes ! Note: There are symmetries and anti-symmetries to ensure real-valued back transforms @@ -407,10 +417,11 @@ contains ! ------------------------------------------------------------------ !************** ADD STOCHASTIC TENDENCIES TO PHYSICAL TENDENCIES******** ! ------------------------------------------------------------------ - SUBROUTINE UPDATE_STOCH_TEN( & + SUBROUTINE CALCULATE_STOCH_TEN( & ru_tendf,rv_tendf,t_tendf, & GPUFORC,GPVFORC,GPTFORC, & ru_real,rv_real,rt_real, & + mu,mub, & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, kts, kte, & @@ -428,14 +439,16 @@ contains REAL , DIMENSION(ims:ime , kms:kme, jms:jme),INTENT(IN) :: & ru_real,rv_real,rt_real + + REAL , DIMENSION(ims:ime,jms:jme) , INTENT(IN) :: mu,mub + INTEGER :: I,J,K REAL :: dt - + DO j = jts,MIN(jde-1,jte) DO k = kts,kte-1 DO i = its,ite GPUFORC(i,k,j)= ru_real(i,k,j) - ru_tendf(i,k,j) = ru_tendf(i,k,j) + GPUFORC(i,k,j) ENDDO ENDDO ENDDO @@ -444,25 +457,24 @@ contains DO k = kts,kte-1 DO i = its,MIN(ide-1,ite) GPVFORC(i,k,j)= rv_real(i,k,j) - rv_tendf(i,k,j) = rv_tendf(i,k,j) + GPVFORC(i,k,j) ENDDO ENDDO ENDDO - + DO j = jts,MIN(jde-1,jte) DO k = kts,kte-1 DO i = its,MIN(ide-1,ite) GPTFORC(i,k,j)= rt_real(i,k,j) - t_tendf(i,k,j) = t_tendf(i,k,j) + GPTFORC(i,k,j) ENDDO ENDDO ENDDO - END SUBROUTINE UPDATE_STOCH_TEN + END SUBROUTINE CALCULATE_STOCH_TEN ! ------------------------------------------------------------------ - SUBROUTINE UPDATE_STOCH_TEN_SUBDOMAINS(ru_tendf,rv_tendf,t_tendf, & + SUBROUTINE UPDATE_STOCH_TEN(ru_tendf,rv_tendf,t_tendf, & GPUFORC,GPVFORC,GPTFORC, & + mu,mub, & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, kts, kte, & @@ -476,16 +488,19 @@ contains REAL , DIMENSION(ims:ime , kms:kme, jms:jme),INTENT(INOUT) :: & ru_tendf, rv_tendf, t_tendf - REAL , DIMENSION(ims:ime , kms:kme, jms:jme),INTENT(IN) :: & + !REAL , DIMENSION(ims:ime , kms:kme, jms:jme),INTENT(IN) :: & + REAL , DIMENSION(ims:ime , kms:kme, jms:jme) :: & GPUFORC,GPVFORC,GPTFORC + REAL , DIMENSION(ims:ime,jms:jme) , INTENT(IN) :: mu,mub + INTEGER :: I,J,K - REAL :: dt + REAL :: dt,xm DO j = jts,MIN(jde-1,jte) DO k = kts,kte-1 DO i = its,ite - ru_tendf(i,k,j) = ru_tendf(i,k,j) + GPUFORC(i,k,j) + ru_tendf(i,k,j) = ru_tendf(i,k,j) + GPUFORC(i,k,j) * (mu(i,j)+mub(i,j)) ENDDO ENDDO ENDDO @@ -493,7 +508,7 @@ contains DO j = jts,jte DO i = its,MIN(ide-1,ite) DO k = kts,kte-1 - rv_tendf(i,k,j) = rv_tendf(i,k,j) + GPVFORC(i,k,j) + rv_tendf(i,k,j) = rv_tendf(i,k,j) + GPVFORC(i,k,j) * (mu(i,j)+mub(i,j)) ENDDO ENDDO ENDDO @@ -501,12 +516,12 @@ contains DO j = jts,MIN(jde-1,jte) DO k = kts,kte-1 DO i = its,MIN(ide-1,ite) - t_tendf(i,k,j) = t_tendf(i,k,j) + GPTFORC(i,k,j) + t_tendf(i,k,j) = t_tendf(i,k,j) + GPTFORC(i,k,j) * (mu(i,j)+mub(i,j)) ENDDO ENDDO ENDDO - END SUBROUTINE UPDATE_STOCH_TEN_SUBDOMAINS + END SUBROUTINE UPDATE_STOCH_TEN ! ------------------------------------------------------------------ !!************** TRANSFORM FROM SPHERICAL HARMONICS TO GRIDPOILT SPACE** ! ------------------------------------------------------------------ @@ -839,7 +854,8 @@ contains TYPE (grid_config_rec_type) :: config_flags ! ! Arguments - INTEGER, INTENT(OUT ) :: seed1, seed2, nens + INTEGER, INTENT(OUT) :: seed1, seed2 + INTEGER, INTENT(IN ) :: nens ! Local integer :: date_time(8) @@ -886,6 +902,7 @@ contains config_flags%cu_physics + idiv=2; seed1 = newtime+iphys+nens*1000000 seed2 = mod(newtime+iphys+nens*1000000,idiv) if(is_print) print *,'Rand_seed (iphys/newtime/idiv):',iphys,newtime,idiv,nens diff --git a/wrfv2_fire/dyn_em/solve_em.F b/wrfv2_fire/dyn_em/solve_em.F index 5c21d724..0036807d 100644 --- a/wrfv2_fire/dyn_em/solve_em.F +++ b/wrfv2_fire/dyn_em/solve_em.F @@ -655,7 +655,8 @@ BENCH_END(set_phys_bc_tim) , rw_tendf, t_tendf & , ph_tendf, mu_tendf & , tke_tend & - , adapt_step_flag , curr_secs & + , config_flags%use_adaptive_time_step & + , curr_secs & , psim , psih , wspd , gz1oz0 & , br , chklowq & , cu_act_flag , hol , th_phy & @@ -2566,10 +2567,10 @@ BENCH_END(tracer_adv_tim) BENCH_START(calc_p_rho_tim) - CALL calc_p_rho_phi( moist, num_3d_m, & + CALL calc_p_rho_phi( moist, num_3d_m, config_flags%hypsometric_opt, & grid%al, grid%alb, grid%mu_2, grid%muts, & - grid%ph_2, grid%p, grid%pb, grid%t_2, & - p0, t0, grid%znu, grid%dnw, grid%rdnw, & + grid%ph_2, grid%phb, grid%p, grid%pb, grid%t_2, & + p0, t0, grid%p_top, grid%znu, grid%znw, grid%dnw, grid%rdnw, & grid%rdn, config_flags%non_hydrostatic, & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & @@ -3413,10 +3414,10 @@ BENCH_START(moist_phys_end_tim) jts = max(grid%j_start(ij),jds+sz) jte = min(grid%j_end(ij),jde-1-sz) - CALL calc_p_rho_phi( moist, num_3d_m, & + CALL calc_p_rho_phi( moist, num_3d_m, config_flags%hypsometric_opt, & grid%al, grid%alb, grid%mu_2, grid%muts, & - grid%ph_2, grid%p, grid%pb, grid%t_2, & - p0, t0, grid%znu, grid%dnw, grid%rdnw, & + grid%ph_2, grid%phb, grid%p, grid%pb, grid%t_2, & + p0, t0, grid%p_top, grid%znu, grid%znw, grid%dnw, grid%rdnw, & grid%rdn, config_flags%non_hydrostatic, & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & @@ -3824,6 +3825,69 @@ BENCH_END(bc_2d_tim) & ,NUM_TILES=grid%num_tiles & & ) + IF (config_flags%output_diagnostics == 1) THEN + IF ((config_flags%auxhist3_interval == 0 ) ) THEN + WRITE (wrf_err_message , * )"CLWRF: ERROR -- error -- ERROR -- error : NO 'auxhist3_interval' has been defined in 'namelist.input'" + CALL wrf_error_fatal ( TRIM(wrf_err_message) ) + END IF + CALL wrf_debug ( 200 , ' CLWRF: call diagnostic_calc' ) + CALL clwrf_output_calc( & + & DPSDT=grid%dpsdt ,DMUDT=grid%dmudt & + & ,P8W=p8w ,PK1M=grid%pk1m & + & ,MU_2=grid%mu_2 ,MU_2M=grid%mu_2m & + & ,U=grid%u_2 ,V=grid%v_2 & + & ,is_restart=config_flags%restart & + & ,clwrfH=config_flags%auxhist3_interval & + & ,T2=grid%t2, Q2=grid%q2, U10=grid%u10, V10=grid%v10 & + & ,SKINTEMP=grid%tsk & + & ,T2CLMIN=grid%t2min, T2CLMAX=grid%t2max & + & ,TT2CLMIN=grid%tt2min, TT2CLMAX=grid%tt2max & + & ,T2CLMEAN=grid%t2mean, T2CLSTD=grid%t2std & + & ,Q2CLMIN=grid%q2min, Q2CLMAX=grid%q2max & + & ,TQ2CLMIN=grid%tq2min, TQ2CLMAX=grid%tq2max & + & ,Q2CLMEAN=grid%q2mean, Q2CLSTD=grid%q2std & + & ,U10CLMAX=grid%u10max, V10CLMAX=grid%v10max & + & ,SPDUV10CLMAX=grid%spduv10max & + & ,TSPDUV10CLMAX=grid%tspduv10max & + & ,U10CLMEAN=grid%u10mean, V10CLMEAN=grid%v10mean & + & ,SPDUV10CLMEAN=grid%spduv10mean & + & ,U10CLSTD=grid%u10std, V10CLSTD=grid%v10std & + & ,SPDUV10CLSTD=grid%spduv10std & + & ,RAINCCLMAX=grid%raincvmax & + & ,RAINNCCLMAX=grid%rainncvmax & + & ,TRAINCCLMAX=grid%traincvmax & + & ,TRAINNCCLMAX=grid%trainncvmax & + & ,RAINCCLMEAN=grid%raincvmean & + & ,RAINNCCLMEAN=grid%rainncvmean & + & ,RAINCCLSTD=grid%raincvstd & + & ,RAINNCCLSTD=grid%rainncvstd & + & ,SKINTEMPCLMIN=grid%skintempmin & + & ,SKINTEMPCLMAX=grid%skintempmax & + & ,TSKINTEMPCLMIN=grid%tskintempmin & + & ,TSKINTEMPCLMAX=grid%tskintempmax & + & ,SKINTEMPCLMEAN=grid%skintempmean & + & ,SKINTEMPCLSTD=grid%skintempstd & + & ,RAINCV=grid%raincv ,RAINNCV=grid%rainncv & + & ,RAINC=grid%rainc ,RAINNC=grid%rainnc & + & ,I_RAINC=grid%i_rainc ,I_RAINNC=grid%i_rainnc & + & ,HFX=grid%hfx ,SFCEVP=grid%sfcevp ,LH=grid%lh & + & ,DT=grid%dt ,SBW=config_flags%spec_bdy_width & + & ,XTIME=grid%xtime & + ! Selection flag + & ,DIAG_PRINT=config_flags%diag_print & + & ,BUCKET_MM=config_flags%bucket_mm & + & ,BUCKET_J =config_flags%bucket_J & + ! Dimension arguments + & ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde & + & ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme & + & ,IPS=ips,IPE=ipe, JPS=jps,JPE=jpe, KPS=kps,KPE=kpe & + & ,I_START=grid%i_start,I_END=min(grid%i_end, ide-1) & + & ,J_START=grid%j_start,J_END=min(grid%j_end, jde-1) & + & ,KTS=k_start, KTE=min(k_end,kde-1) & + & ,NUM_TILES=grid%num_tiles & + & ) + ENDIF + #ifdef DM_PARALLEL !----------------------------------------------------------------------- ! see above diff --git a/wrfv2_fire/dyn_em/start_em.F b/wrfv2_fire/dyn_em/start_em.F index 98116fe1..7641c6d9 100644 --- a/wrfv2_fire/dyn_em/start_em.F +++ b/wrfv2_fire/dyn_em/start_em.F @@ -15,10 +15,11 @@ USE module_configure, ONLY : grid_config_rec_type USE module_tiles, ONLY : set_tiles #ifdef DM_PARALLEL - USE module_dm, ONLY : wrf_dm_min_real, wrf_dm_maxval, ntasks_x, ntasks_y, & + USE module_dm, ONLY : wrf_dm_min_real, wrf_dm_max_real, wrf_dm_maxval, & + ntasks_x, ntasks_y, & local_communicator_periodic, local_communicator, mytask, ntasks #else - USE module_dm, ONLY : wrf_dm_min_real + USE module_dm, ONLY : wrf_dm_min_real, wrf_dm_max_real #endif USE module_comm_dm @@ -75,6 +76,7 @@ #endif REAL :: qvf1, qvf2, qvf + REAL :: pfu, pfd, phm REAL :: MPDT REAL :: spongeweight LOGICAL :: first_trip_for_this_domain, start_of_simulation, fill_w_flag @@ -96,6 +98,9 @@ INTEGER :: im1,ip1,jm1,jp1 REAL :: hx,hy,pi + REAL :: w_max, w_min + LOGICAL :: w_needs_to_be_set + CALL get_ijk_from_grid ( grid , & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & @@ -123,12 +128,9 @@ ! --- SETUP AND INITIALIZE STOCHASTIC KINETIC ENERGY BACKSCATTER SCHEME --- - IF ( (grid%id.eq.1) .AND. ( .NOT. grid%did_stoch ) ) THEN - grid%did_stoch = .TRUE. - stoch_force_select: SELECT CASE(config_flags%stoch_force_opt) - - CASE (STOCH_BACKSCATTER) + IF ( (grid%id==1).and.(grid%stoch_force_global_opt==1) .AND. ( .NOT. grid%did_stoch ) ) THEN + grid%did_stoch = .TRUE. IF ( wrf_dm_on_monitor () ) THEN CALL rand_seed ( config_flags, grid%SEED1, grid%SEED2, grid%NENS ) ENDIF @@ -147,7 +149,6 @@ ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, kts, kte ) - END SELECT stoch_force_select END IF ! --- END SETUP STOCHASTIC KINETIC ENERGY BACKSCATTER SCHEME ---------- @@ -417,9 +418,19 @@ ! This field is on full levels. grid%phb(i,1,j) = grid%ht(i,j) * g - DO k = 2,kte - grid%phb(i,k,j) = grid%phb(i,k-1,j) - grid%dnw(k-1)*grid%mub(i,j)*grid%alb(i,k-1,j) - END DO + + IF ( config_flags%hypsometric_opt .EQ. 1 ) THEN + DO k = 2,kte + grid%phb(i,k,j) = grid%phb(i,k-1,j) - grid%dnw(k-1)*grid%mub(i,j)*grid%alb(i,k-1,j) + END DO + ELSE IF ( config_flags%hypsometric_opt .EQ. 2 ) THEN + DO k = 2,kte + pfu = grid%mub(i,j)*grid%znw(k) + grid%p_top + pfd = grid%mub(i,j)*grid%znw(k-1) + grid%p_top + phm = grid%mub(i,j)*grid%znu(k-1) + grid%p_top + grid%phb(i,k,j) = grid%phb(i,k-1,j) + grid%alb(i,k-1,j)*phm*LOG(pfd/pfu) + END DO + END IF END DO END DO @@ -490,14 +501,34 @@ ENDDO ENDIF -! Use equations from calc_p_rho_phi to derive p and al from ph +! Use equations from calc_p_rho_phi to derive p and al from ph: linear in log p + IF ( config_flags%hypsometric_opt .EQ. 1 ) THEN + DO j=jts,min(jte,jde-1) + DO k=kts,kte-1 + DO i=its,min(ite,ide-1) + grid%al(i,k,j)=-1./(grid%mub(i,j)+grid%mu_1(i,j))*(grid%alb(i,k,j)*grid%mu_1(i,j) & + +grid%rdnw(k)*(grid%ph_1(i,k+1,j)-grid%ph_1(i,k,j))) + ENDDO + ENDDO + ENDDO + ELSE IF ( config_flags%hypsometric_opt .EQ. 2 ) THEN + DO j=jts,min(jte,jde-1) + DO k=kts,kte-1 + DO i=its,min(ite,ide-1) + pfu = (grid%mub(i,j)+grid%mu_1(i,j))*grid%znw(k+1)+grid%p_top + pfd = (grid%mub(i,j)+grid%mu_1(i,j))*grid%znw(k) +grid%p_top + phm = (grid%mub(i,j)+grid%mu_1(i,j))*grid%znu(k) +grid%p_top + grid%al(i,k,j) = (grid%ph_1(i,k+1,j)-grid%ph_1(i,k,j)+grid%phb(i,k+1,j)-grid%phb(i,k,j)) & + /phm/LOG(pfd/pfu)-grid%alb(i,k,j) + ENDDO + ENDDO + ENDDO + END IF DO j=jts,min(jte,jde-1) DO k=kts,kte-1 DO i=its,min(ite,ide-1) qvf = 1.+rvovrd*moist(i,k,j,P_QV) - grid%al(i,k,j)=-1./(grid%mub(i,j)+grid%mu_1(i,j))*(grid%alb(i,k,j)*grid%mu_1(i,j) & - +grid%rdnw(k)*(grid%ph_1(i,k+1,j)-grid%ph_1(i,k,j))) grid%p(i,k,j)=p1000mb*( (r_d*(t0+grid%t_1(i,k,j))*qvf)/ & (p1000mb*(grid%al(i,k,j)+grid%alb(i,k,j))) )**cpovcv & -grid%pb(i,k,j) @@ -507,42 +538,6 @@ ENDDO ENDDO -#if 0 - DO j = jts,min(jte,jde-1) - - k = kte-1 - DO i = its, min(ite,ide-1) - IF ( grid%imask_nostag(i,j) .EQ. 1 ) THEN - qvf1 = 0.5*(moist(i,k,j,P_QV)+moist(i,k,j,P_QV)) - qvf2 = 1./(1.+qvf1) - qvf1 = qvf1*qvf2 - grid%p(i,k,j) = - 0.5*(grid%mu_1(i,j)+qvf1*grid%mub(i,j))/grid%rdnw(k)/qvf2 - grid%p_hyd(i,k,j) = grid%p(i,k,j) + grid%pb(i,k,j) - qvf = 1. + rvovrd*moist(i,k,j,P_QV) - grid%alt(i,k,j) = (r_d/p1000mb)*(grid%t_1(i,k,j)+t0)*qvf*(((grid%p(i,k,j)+grid%pb(i,k,j))/p1000mb)**cvpm) - grid%al(i,k,j) = grid%alt(i,k,j) - grid%alb(i,k,j) - ENDIF - ENDDO - - DO k = kte-2, 1, -1 - DO i = its, min(ite,ide-1) - IF ( grid%imask_nostag(i,j) .EQ. 1 ) THEN - qvf1 = 0.5*(moist(i,k,j,P_QV)+moist(i,k+1,j,P_QV)) - qvf2 = 1./(1.+qvf1) - qvf1 = qvf1*qvf2 - grid%p(i,k,j) = grid%p(i,k+1,j) - (grid%mu_1(i,j) + qvf1*grid%mub(i,j))/qvf2/grid%rdn(k+1) - grid%p_hyd(i,k,j) = grid%p(i,k,j) + grid%pb(i,k,j) - qvf = 1. + rvovrd*moist(i,k,j,P_QV) - grid%alt(i,k,j) = (r_d/p1000mb)*(grid%t_1(i,k,j)+t0)*qvf* & - (((grid%p(i,k,j)+grid%pb(i,k,j))/p1000mb)**cvpm) - grid%al(i,k,j) = grid%alt(i,k,j) - grid%alb(i,k,j) - ENDIF - ENDDO - ENDDO - - ENDDO -#endif - ENDIF IF ( grid%press_adj .and. ( grid%id .NE. 1 ) .AND. .NOT. ( config_flags%restart ) .AND. & @@ -895,21 +890,57 @@ ! above that. IF ( ( start_of_simulation .OR. config_flags%cycling ) .AND. ( .NOT. config_flags%restart ) ) THEN - fill_w_flag = .true. - CALL set_w_surface( config_flags, grid%znw, fill_w_flag, & - grid%w_1, grid%ht, grid%u_1, grid%v_1, grid%cf1, & - grid%cf2, grid%cf3, grid%rdx, grid%rdy, grid%msftx, grid%msfty, & - ids, ide, jds, jde, kds, kde, & - ims, ime, jms, jme, kms, kme, & - its, ite, jts, jte, kts, kte ) - CALL set_w_surface( config_flags, grid%znw, fill_w_flag, & - grid%w_2, grid%ht, grid%u_2, grid%v_2, grid%cf1, & - grid%cf2, grid%cf3, grid%rdx, grid%rdy, grid%msftx, grid%msfty, & - ids, ide, jds, jde, kds, kde, & - ims, ime, jms, jme, kms, kme, & - its, ite, jts, jte, kts, kte ) - -! finished setting kinematic condition for w at the surface + +! If W already exists (not zero), then we leave it alone. How to do this? We find the +! max/min on this node at the surface. If parallel, we collect the max/min from all procs. +! If the max/min throughout the entire domain at the surface is identically 0, then we say +! that the W field is NOT initialized, and we run the set_w_surface routines for the +! two time levels of W. If the field is already initialized, we do NOT run those two +! routines. + + w_max = grid%w_2(its,1,jts) + w_min = grid%w_2(its,1,jts) + DO j = jts, MIN(jte,jde-1) + DO i = its, MIN(ite,ide-1) + w_max = MAX ( w_max , grid%w_2(i,1,j) ) + w_min = MIN ( w_min , grid%w_2(i,1,j) ) + END DO + END DO +#ifdef DM_PARALLEL + w_max = wrf_dm_max_real ( w_max ) + w_min = wrf_dm_min_real ( w_min ) +#endif + + IF ( ( ABS(w_max) .LT. 1.E-6 ) .AND. & + ( ABS(w_min) .LT. 1.E-6 ) ) THEN + w_needs_to_be_set = .TRUE. + ELSE + IF ( config_flags%use_input_w ) THEN + w_needs_to_be_set = .FALSE. + ELSE + w_needs_to_be_set = .TRUE. + END IF + END IF + + IF ( w_needs_to_be_set ) THEN + + ! setting kinematic condition for w at the surface + + fill_w_flag = .true. + CALL set_w_surface( config_flags, grid%znw, fill_w_flag, & + grid%w_1, grid%ht, grid%u_1, grid%v_1, grid%cf1, & + grid%cf2, grid%cf3, grid%rdx, grid%rdy, grid%msftx, grid%msfty, & + ids, ide, jds, jde, kds, kde, & + ims, ime, jms, jme, kms, kme, & + its, ite, jts, jte, kts, kte ) + CALL set_w_surface( config_flags, grid%znw, fill_w_flag, & + grid%w_2, grid%ht, grid%u_2, grid%v_2, grid%cf1, & + grid%cf2, grid%cf3, grid%rdx, grid%rdy, grid%msftx, grid%msfty, & + ids, ide, jds, jde, kds, kde, & + ims, ime, jms, jme, kms, kme, & + its, ite, jts, jte, kts, kte ) + END IF + ! set up slope-radiation constant arrays based on topography DO j = jts,min(jte,jde-1) diff --git a/wrfv2_fire/dyn_nmm/module_PHYSICS_CALLS.F b/wrfv2_fire/dyn_nmm/module_PHYSICS_CALLS.F index 2ff04aca..84eb1b85 100644 --- a/wrfv2_fire/dyn_nmm/module_PHYSICS_CALLS.F +++ b/wrfv2_fire/dyn_nmm/module_PHYSICS_CALLS.F @@ -2073,6 +2073,8 @@ IF(MOD(NTSD,NCNVC)/=0.AND. & & CONFIG_FLAGS%CU_PHYSICS==BMJSCHEME)RETURN IF(MOD(NTSD,NCNVC)/=0.AND. & + & CONFIG_FLAGS%CU_PHYSICS==OSASSCHEME)RETURN + IF(MOD(NTSD,NCNVC)/=0.AND. & & CONFIG_FLAGS%CU_PHYSICS==SASSCHEME)RETURN !----------------------------------------------------------------------- @@ -2306,7 +2308,7 @@ ! CUMULUS DRIVER. THIS IS gopal's doing ! - IF(CONFIG_FLAGS%CU_PHYSICS==SASSCHEME)THEN + IF(CONFIG_FLAGS%CU_PHYSICS==OSASSCHEME .or. CONFIG_FLAGS%CU_PHYSICS==SASSCHEME)THEN ! IF(GRID%ID .EQ. 1)THEN ! Both parent and nest set to 5 minutes for random number calls IDT=MOD(NTSD,NCNVC) @@ -2514,7 +2516,7 @@ ! cps_select: SELECT CASE(config_flags%cu_physics) ! - CASE (KFSCHEME,KFETASCHEME,GDSCHEME,SASSCHEME) + CASE (KFSCHEME,KFETASCHEME,GDSCHEME,SASSCHEME,OSASSCHEME) IF(CONFIG_FLAGS%MP_PHYSICS==ETAMPNEW)THEN MOIST_TRANS(I,K,J,P_QS)=MAX(0.,MOIST_TRANS(I,K,J,P_QS)+RQICUTEN(I,K,J)*DTCNVC+RQSCUTEN(I,K,J)*DTCNVC) ELSE diff --git a/wrfv2_fire/dyn_nmm/solve_nmm.F b/wrfv2_fire/dyn_nmm/solve_nmm.F index 1d296000..75ec2d72 100644 --- a/wrfv2_fire/dyn_nmm/solve_nmm.F +++ b/wrfv2_fire/dyn_nmm/solve_nmm.F @@ -1695,9 +1695,10 @@ !*** CONVECTIVE PRECIPITATION !---------------------------------------------------------------------- ! - IF(MOD(grid%ntsd,GRID%NCNVC)==0.AND. & - & (CONFIG_FLAGS%CU_PHYSICS==KFETASCHEME .or. & - CONFIG_FLAGS%CU_PHYSICS==SASSCHEME))THEN ! Kwon's doing for SAS + IF(MOD(grid%ntsd,GRID%NCNVC)==0.AND. & + & (CONFIG_FLAGS%CU_PHYSICS.eq.KFETASCHEME .or. & + & CONFIG_FLAGS%CU_PHYSICS.eq.OSASSCHEME .or. & + & CONFIG_FLAGS%CU_PHYSICS.eq.SASSCHEME))THEN ! ! btimx=timef() !----------------- @@ -1784,11 +1785,13 @@ !------------------------------------------------------------------------------------- ! This is gopal's doing for HWRFSAS -! IF(MOD(grid%ntsd,GRID%NCNVC).eq.0.and.(CONFIG_FLAGS%CU_PHYSICS.eq.SASSCHEME))THEN +! IF(MOD(grid%ntsd,GRID%NCNVC).eq.0.and.(CONFIG_FLAGS%CU_PHYSICS.eq.OSASSCHEME))THEN ! update to match HWRFV2 behaviour - review later (1/15/10) ! !emc_2010_bugfix_h50 - IF(MOD(grid%ntsd, GRID%NCNVC).eq.0.and.CONFIG_FLAGS%CU_PHYSICS.eq.SASSCHEME)THEN + IF(MOD(grid%ntsd, GRID%NCNVC).eq.0.and. & + & (CONFIG_FLAGS%CU_PHYSICS.eq.OSASSCHEME.or. & + & CONFIG_FLAGS%CU_PHYSICS.eq.SASSCHEME))THEN !emc_2010_bugfix_h50 ! btimx=timef() diff --git a/wrfv2_fire/dyn_nmm/start_domain_nmm.F b/wrfv2_fire/dyn_nmm/start_domain_nmm.F index f2e70c5a..782abe02 100644 --- a/wrfv2_fire/dyn_nmm/start_domain_nmm.F +++ b/wrfv2_fire/dyn_nmm/start_domain_nmm.F @@ -1828,7 +1828,7 @@ & ,grid%SNOALB & & ,GRID%DX,GRID%DY,grid%f_ice_phy,grid%f_rain_phy,grid%f_rimef_phy & & ,grid%mp_restart_state,grid%tbpvs_state,grid%tbpvs0_state & - & ,.TRUE.,grid%moved,START_OF_SIMULATION & + & ,ALLOWED_TO_READ,grid%moved,START_OF_SIMULATION & & ,1 & ! lagday & ,IDS, IDE, JDS, JDE, KDS, KDE & & ,IMS, IME, JMS, JME, KMS, KME & @@ -1891,7 +1891,7 @@ ! !mp replace F*_PHY with values defined in module_initialize_real.F? #ifdef HWRF - IF (.NOT. RESTRT) THEN !zhang + IF (.NOT. RESTRT .and. ALLOWED_TO_READ) THEN !zhang moist = 0.0 grid%f_ice = grid%f_ice_phy grid%f_rimef = grid%f_rimef_phy @@ -1899,7 +1899,7 @@ ENDIF !zhang #endif - IF (.NOT. RESTRT) THEN + IF (.NOT. RESTRT .and. ALLOWED_TO_READ) THEN ! Added by Greg Thompson, NCAR-RAL, for initializing water vapor ! mixing ratio (from NMM's specific humidity var) into moist array. diff --git a/wrfv2_fire/external/RSL_LITE/module_dm.F b/wrfv2_fire/external/RSL_LITE/module_dm.F index 647a5fb2..f1ee2586 100644 --- a/wrfv2_fire/external/RSL_LITE/module_dm.F +++ b/wrfv2_fire/external/RSL_LITE/module_dm.F @@ -4356,7 +4356,7 @@ integer myproc CALL mpi_allgatherv( MPI_IN_PLACE, & # else DO i = 1,elemsize*(km_e-km_s+1) - v_local(i) = v(i+km_s-1) + v_local(i) = v(i+elemsize*km_s-1) ENDDO CALL mpi_allgatherv( v_local, & # endif @@ -4398,7 +4398,7 @@ integer myproc CALL mpi_allgatherv( MPI_IN_PLACE, & # else DO i = 1,elemsize*(km_e-km_s+1) - v_local(i) = v(i+km_s-1) + v_local(i) = v(i+elemsize*km_s-1) ENDDO CALL mpi_allgatherv( v_local, & # endif diff --git a/wrfv2_fire/external/atm_ocn/atm_comm.F b/wrfv2_fire/external/atm_ocn/atm_comm.F index 38087ae3..2c8df2c2 100644 --- a/wrfv2_fire/external/atm_ocn/atm_comm.F +++ b/wrfv2_fire/external/atm_ocn/atm_comm.F @@ -106,7 +106,7 @@ call ATM_ANNOUNCE('ATM_CMP_START: Ocean_spec broadcast',2) call CMP_gnr_RECV(WM_id,1,MPI_INTEGER) - write(s,'(i2)') WM_id + write(s,'(i3)') WM_id call ATM_ANNOUNCE('back from CMP_INTEGER_RECV, WM id is '//s,2) call MPI_BCAST(WM_id,1,MPI_INTEGER, & &component_master_rank_local,MPI_COMM_Atmos,ierr) @@ -336,11 +336,17 @@ dtc=buf(1) if (Coupler_id.lt.0) then - if (gid.eq.1) then - dtc=dta*2 ! just having in mind that with gid=1 - else ! dta value is 5 times its value with - dtc=dta*10 ! gid=2 (at this moment, 270s and 54s - end if ! respectively) + ! This section sets the coupling timestep when no coupling + ! is being done. This relation must hold for the outermost domain: + ! dtc * N = dta * movemin + ! where N can be any integer greater than zero. + if(gid<1 .or. gid>3) then + write(s,'(1i8)') gid + call GLOB_ABORT(1,'invalid grid id '//s//'; I only know 1,2, and 3',1) + endif + dtc=dta + if(gid==2) dtc=dtc*3 ! domain 2 timestep = domain 1 timestep / 3 + if(gid==3) dtc=dtc*9 ! domain 3 timestep = domain 1 timestep / 9 write(s,'(1pe20.12)') dtc call ATM_ANNOUNCE('ATM_RECVdtc: C time step assigned '// & & trim(s)//' : standalone mode',2) diff --git a/wrfv2_fire/external/atm_ocn/atm_comm_pom.F b/wrfv2_fire/external/atm_ocn/atm_comm_pom.F index c1139e2d..e2993e65 100644 --- a/wrfv2_fire/external/atm_ocn/atm_comm_pom.F +++ b/wrfv2_fire/external/atm_ocn/atm_comm_pom.F @@ -293,11 +293,17 @@ dtc=buf(1) if (Coupler_id.lt.0) then - if (gid.eq.1) then - dtc=dta*2 ! just having in mind that with gid=1 - else ! dta value is 5 times its value with - dtc=dta*10 ! gid=2 (at this moment, 270s and 54s - end if ! respectively) + ! This section sets the coupling timestep when no coupling + ! is being done. This relation must hold for the outermost domain: + ! dtc * N = dta * movemin + ! where N can be any integer greater than zero. + if(gid<1 .or. gid>3) then + write(s,'(1i8)') gid + call GLOB_ABORT(1,'invalid grid id '//s//'; I only know 1,2, and 3',1) + endif + dtc=dta + if(gid==2) dtc=dtc*3 ! domain 2 timestep = domain 1 timestep / 3 + if(gid==3) dtc=dtc*9 ! domain 3 timestep = domain 1 timestep / 9 write(s,'(1pe20.12)') dtc call ATM_ANNOUNCE('ATM_RECVdtc: C time step assigned '// & & trim(s)//' : standalone mode',2) diff --git a/wrfv2_fire/external/esmf_time_f90/ESMF_Stubs.F90 b/wrfv2_fire/external/esmf_time_f90/ESMF_Stubs.F90 index 555c1f0f..21f074a1 100644 --- a/wrfv2_fire/external/esmf_time_f90/ESMF_Stubs.F90 +++ b/wrfv2_fire/external/esmf_time_f90/ESMF_Stubs.F90 @@ -48,11 +48,11 @@ CONTAINS ! NOOP - SUBROUTINE ESMF_Initialize( vm, defaultCalendar, rc ) + SUBROUTINE ESMF_Initialize( vm, defaultcalkind, rc ) USE esmf_basemod USE esmf_calendarmod TYPE(ESMF_VM), INTENT(IN ), OPTIONAL :: vm - TYPE(ESMF_CalendarType), INTENT(IN ), OPTIONAL :: defaultCalendar + TYPE(ESMF_CalendarType), INTENT(IN ), OPTIONAL :: defaultcalkind INTEGER, INTENT( OUT), OPTIONAL :: rc TYPE(ESMF_CalendarType) :: defaultCalType @@ -60,8 +60,8 @@ CONTAINS IF ( PRESENT( rc ) ) rc = ESMF_FAILURE ! Initialize the default time manager calendar - IF ( PRESENT(defaultCalendar) )THEN - defaultCalType = defaultCalendar + IF ( PRESENT(defaultcalkind) )THEN + defaultCalType = defaultcalkind ELSE defaultCalType = ESMF_CAL_NOLEAP END IF diff --git a/wrfv2_fire/external/io_esmf/ext_esmf_open_for_read.F90 b/wrfv2_fire/external/io_esmf/ext_esmf_open_for_read.F90 index 46cdf88b..e76570b4 100644 --- a/wrfv2_fire/external/io_esmf/ext_esmf_open_for_read.F90 +++ b/wrfv2_fire/external/io_esmf/ext_esmf_open_for_read.F90 @@ -11,7 +11,7 @@ SUBROUTINE ext_esmf_open_for_read_begin( FileName , Comm_compute, Comm_io, SysDe ! Local declarations INTEGER :: i TYPE(ESMF_State), POINTER :: importstate - TYPE(ESMF_StateType) :: statetype + TYPE(ESMF_StateIntent_Flag) :: stateIntent INTEGER :: rc, itemCount CALL int_get_fresh_handle(i) @@ -32,11 +32,11 @@ SUBROUTINE ext_esmf_open_for_read_begin( FileName , Comm_compute, Comm_io, SysDe !TODO: Eventually, get smart about interacting with "needed" and "optional" !TODO: named state items CALL ESMF_StateGet( importstate, itemCount=itemCount, & - statetype=statetype, rc=rc ) + stateintent=stateintent, rc=rc ) IF ( rc /= ESMF_SUCCESS ) THEN CALL wrf_error_fatal("ext_esmf_open_for_read: ESMF_ImportStateGet failed" ) ENDIF - IF ( statetype /= ESMF_STATE_IMPORT ) THEN + IF ( stateintent /= ESMF_STATEINTENT_IMPORT ) THEN CALL wrf_error_fatal("ext_esmf_open_for_read: not an import state" ) ENDIF IF ( itemCount /= 0 ) THEN diff --git a/wrfv2_fire/external/io_esmf/ext_esmf_open_for_write.F90 b/wrfv2_fire/external/io_esmf/ext_esmf_open_for_write.F90 index 55bd7207..621744f5 100644 --- a/wrfv2_fire/external/io_esmf/ext_esmf_open_for_write.F90 +++ b/wrfv2_fire/external/io_esmf/ext_esmf_open_for_write.F90 @@ -11,7 +11,7 @@ SUBROUTINE ext_esmf_open_for_write_begin( FileName , Comm_compute, Comm_io, SysD ! Local declarations INTEGER :: i TYPE(ESMF_State), POINTER :: exportstate - TYPE(ESMF_StateType) :: statetype + TYPE(ESMF_StateIntent_Flag) :: stateintent INTEGER :: rc, itemCount CALL int_get_fresh_handle(i) @@ -32,11 +32,11 @@ SUBROUTINE ext_esmf_open_for_write_begin( FileName , Comm_compute, Comm_io, SysD !TODO: Eventually, get smart about interacting with "needed" and "optional" !TODO: named state items CALL ESMF_StateGet( exportstate, itemCount=itemCount, & - statetype=statetype, rc=rc ) + stateintent=stateintent, rc=rc ) IF ( rc /= ESMF_SUCCESS ) THEN CALL wrf_error_fatal("ext_esmf_open_for_write: ESMF_ExportStateGet failed" ) ENDIF - IF ( statetype /= ESMF_STATE_EXPORT ) THEN + IF ( stateintent /= ESMF_STATEINTENT_EXPORT ) THEN CALL wrf_error_fatal("ext_esmf_open_for_write: not an export state" ) ENDIF IF ( itemCount /= 0 ) THEN diff --git a/wrfv2_fire/external/io_esmf/ext_esmf_read_field.F90 b/wrfv2_fire/external/io_esmf/ext_esmf_read_field.F90 index d99198fb..6616cd73 100644 --- a/wrfv2_fire/external/io_esmf/ext_esmf_read_field.F90 +++ b/wrfv2_fire/external/io_esmf/ext_esmf_read_field.F90 @@ -211,7 +211,7 @@ write(0,*)__FILE__,__LINE__,'ext_esmf_read_field PatchEnd ', PatchEnd(1:esmf_ra tmpField = ESMF_FieldCreate( & grid( DataHandle )%ptr, & tmp_esmf_r4_ptr, & - copyflag=ESMF_DATA_REF, & + datacopyflag=ESMF_DATACOPY_REFERENCE, & staggerloc=ESMF_STAGGERLOC_CENTER, & name=TRIM(VarName), & rc=rc ) @@ -227,7 +227,7 @@ write(0,*)__FILE__,__LINE__,'ext_esmf_read_field PatchEnd ', PatchEnd(1:esmf_ra ! Add the Field to the import state... !TODO: for now, just build ESMF_Fields and stuff them in !TODO: later, use a single ESMF_Bundle - CALL ESMF_StateAdd( importstate, tmpField, rc=rc ) + CALL ESMF_StateAdd( importstate, (/tmpField/), rc=rc ) ! 5.2.0r only accepts arrays, use array constructor IF ( rc /= ESMF_SUCCESS ) THEN CALL wrf_error_fatal("ext_esmf_read_field: ESMF_StateAddField failed" ) ENDIF diff --git a/wrfv2_fire/external/io_esmf/ext_esmf_write_field.F90 b/wrfv2_fire/external/io_esmf/ext_esmf_write_field.F90 index 3e042dc9..f98fd0be 100644 --- a/wrfv2_fire/external/io_esmf/ext_esmf_write_field.F90 +++ b/wrfv2_fire/external/io_esmf/ext_esmf_write_field.F90 @@ -211,7 +211,7 @@ write(0,*)__FILE__,__LINE__,'ext_esmf_write_field PatchEnd ', PatchEnd(1:esmf_r tmpField = ESMF_FieldCreate( & grid( DataHandle )%ptr, & tmp_esmf_r4_ptr, & - copyflag=ESMF_DATA_REF, & + datacopyflag=ESMF_DATACOPY_REFERENCE, & staggerloc=ESMF_STAGGERLOC_CENTER, & name=TRIM(VarName), & rc=rc ) @@ -227,7 +227,7 @@ write(0,*)__FILE__,__LINE__,'ext_esmf_write_field PatchEnd ', PatchEnd(1:esmf_r ! Add the Field to the export state... !TODO: for now, just build ESMF_Fields and stuff them in !TODO: later, use a single ESMF_Bundle - CALL ESMF_StateAdd( exportstate, tmpField, rc=rc ) + CALL ESMF_StateAdd( exportstate, (/tmpField/), rc=rc ) ! 5.2.0r only accepts arrays; use array constructor IF ( rc /= ESMF_SUCCESS ) THEN CALL wrf_error_fatal("ext_esmf_write_field: ESMF_StateAddfailed" ) ENDIF diff --git a/wrfv2_fire/external/io_esmf/io_esmf.F90 b/wrfv2_fire/external/io_esmf/io_esmf.F90 index f3b3928a..a73586f2 100644 --- a/wrfv2_fire/external/io_esmf/io_esmf.F90 +++ b/wrfv2_fire/external/io_esmf/io_esmf.F90 @@ -1,7 +1,8 @@ MODULE module_ext_esmf - USE ESMF_Mod +! 5.2.0r USE ESMF_Mod + USE ESMF USE module_esmf_extensions IMPLICIT NONE @@ -124,7 +125,7 @@ END SUBROUTINE get_value INTEGER :: rc ! get current ESMF virtual machine for communication - CALL ESMF_VMGetCurrent(vm, rc) + CALL ESMF_VMGetCurrent(vm, rc=rc) IF ( rc /= ESMF_SUCCESS ) THEN WRITE( msg,* ) 'Error in ESMF_VMGetCurrent', & __FILE__ , & @@ -135,7 +136,8 @@ END SUBROUTINE get_value allSnd = 0_ESMF_KIND_I4 allSnd(pe) = inval ! Hack due to lack of ESMF_VMAllGather(). - CALL ESMF_VMAllReduce(vm, allSnd, allRcv, numprocs, ESMF_SUM, rc=rc ) +! 5.2.0r CALL ESMF_VMAllReduce(vm, allSnd, allRcv, numprocs, ESMF_SUM, rc=rc ) + CALL ESMF_VMAllReduce(vm, allSnd, allRcv, numprocs, ESMF_REDUCE_SUM, rc=rc ) IF ( rc /= ESMF_SUCCESS ) THEN WRITE( msg,* ) 'Error in ESMF_VMAllReduce', & __FILE__ , & @@ -343,7 +345,7 @@ END MODULE module_ext_esmf ! First, determine number of tasks and number of tasks in each decomposed ! dimension (ESMF 2.2.0 is restricted to simple task layouts) ! get current ESMF virtual machine and inquire... - CALL ESMF_VMGetCurrent(vm, rc) + CALL ESMF_VMGetCurrent(vm, rc=rc) IF ( rc /= ESMF_SUCCESS ) THEN WRITE( msg,* ) 'Error in ESMF_VMGetCurrent', & __FILE__ , & @@ -431,10 +433,6 @@ CALL wrf_debug ( 5 , TRIM(msg) ) jds = DomainStart(2); jde = DomainEnd(2); ips = PatchStart(1); ipe = PatchEnd(1); jps = PatchStart(2); jpe = PatchEnd(2); -write(0,*)__FILE__,__LINE__,'DomainStart ',DomainStart(1:2) -write(0,*)__FILE__,__LINE__,'DomainEnd ',DomainEnd(1:2) -write(0,*)__FILE__,__LINE__,'PatchStart ',PatchStart(1:2) -write(0,*)__FILE__,__LINE__,'PatchEnd ',PatchEnd(1:2) globalXcount = ide - ids ! in other words, the number of points from ids to ide-1 inclusive globalYcount = jde - jds ! in other words, the number of points from jds to jde-1 inclusive ! task-local numbers of points in patch for staggered arrays @@ -570,7 +568,8 @@ CALL wrf_debug ( 5 , TRIM(msg) ) !write(0,*)'calling ESMF_GridCreateShapeTile for grid named ',trim(gridname) !write(0,*)'calling ESMF_GridCreateShapeTile dimXCount ',dimXCount !write(0,*)'calling ESMF_GridCreateShapeTile dimYCount ',dimYCount - esmfgrid = ESMF_GridCreateShapeTile( & +! 5.2.0r esmfgrid = ESMF_GridCreateShapeTile( & + esmfgrid = ESMF_GridCreate( & countsPerDEDim1=dimXCount , & countsPerDEDim2=dimYcount , & coordDep1=(/1/) , & @@ -587,7 +586,7 @@ CALL wrf_debug ( 5 , TRIM(msg) ) CALL ESMF_GridGetCoord(esmfgrid,coordDim=1,localDE=0, & staggerloc=ESMF_STAGGERLOC_CENTER, & computationalLBound=lbnd,computationalUBound=ubnd, & - fptr=coordX2d, & + farrayptr=coordX2d, & rc=rc) DO i=lbnd(1),ubnd(1) @@ -596,7 +595,7 @@ CALL wrf_debug ( 5 , TRIM(msg) ) CALL ESMF_GridGetCoord(esmfgrid,coordDim=2,localDE=0, & staggerloc=ESMF_STAGGERLOC_CENTER, & computationalLBound=lbnd,computationalUBound=ubnd, & - fptr=coordY2d, & + farrayptr=coordY2d, & rc=rc) DO i=lbnd(1),ubnd(1) coordY2d(i) = (i-1)*1.0 @@ -866,7 +865,7 @@ SUBROUTINE ext_esmf_open_for_read ( FileName , Comm_compute, Comm_io, SysDepInfo CHARACTER*(*) :: SysDepInfo INTEGER , INTENT(OUT) :: DataHandle INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_open_for_read not supported yet') + CALL wrf_debug(1,'ext_esmf_open_for_read not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_open_for_read @@ -1024,7 +1023,7 @@ SUBROUTINE ext_esmf_ioclose ( DataHandle, Status ) TYPE(state_ptr) :: states(2) TYPE(ESMF_State), POINTER :: state INTEGER :: numItems, numFields, i, istate - TYPE(ESMF_StateItemType), ALLOCATABLE :: itemTypes(:) + TYPE(ESMF_StateItem_Flag), ALLOCATABLE :: itemTypes(:) TYPE(ESMF_Field) :: tmpField REAL, POINTER :: tmp_ptr(:,:) CHARACTER (len=ESMF_MAXSTR), ALLOCATABLE :: itemNames(:) @@ -1066,7 +1065,8 @@ SUBROUTINE ext_esmf_ioclose ( DataHandle, Status ) ! allocate an array to hold the names of all items ALLOCATE( itemNames(numItems) ) ! get the item types and names - CALL ESMF_StateGet(state, stateitemtypeList=itemTypes, & +!5.2.0r CALL ESMF_StateGet(state, stateitemtypeList=itemTypes, & + CALL ESMF_StateGet(state, itemtypeList=itemTypes, & itemNameList=itemNames, rc=rc) IF ( rc /= ESMF_SUCCESS) THEN WRITE(str,*) 'ext_esmf_ioclose: ESMF_StateGet itemTypes failed with rc = ', rc @@ -1161,7 +1161,7 @@ SUBROUTINE ext_esmf_get_next_time ( DataHandle, DateStr, Status ) IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN CALL wrf_error_fatal("io_esmf.F90: ext_esmf_get_next_time: DataHandle not opened" ) ENDIF - CALL wrf_message( "ext_esmf_get_next_time() not supported yet") + CALL wrf_debug(1, "ext_esmf_get_next_time() not supported yet") Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_next_time @@ -1173,7 +1173,7 @@ SUBROUTINE ext_esmf_set_time ( DataHandle, DateStr, Status ) INTEGER , INTENT(IN) :: DataHandle CHARACTER*(*) :: DateStr INTEGER , INTENT(OUT) :: Status - CALL wrf_message( "ext_esmf_set_time() not supported yet") + CALL wrf_debug(1, "ext_esmf_set_time() not supported yet") Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_set_time @@ -1198,7 +1198,7 @@ SUBROUTINE ext_esmf_get_var_info ( DataHandle , VarName , NDim , MemoryOrder , S IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN CALL wrf_error_fatal("io_esmf.F90: ext_esmf_get_var_info: DataHandle not opened" ) ENDIF - CALL wrf_message( "ext_esmf_get_var_info() not supported yet") + CALL wrf_debug(1, "ext_esmf_get_var_info() not supported yet") Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_info @@ -1217,7 +1217,7 @@ SUBROUTINE ext_esmf_get_next_var ( DataHandle, VarName, Status ) IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN CALL wrf_error_fatal("external/io_esmf/io_esmf.F90: ext_esmf_get_next_var: DataHandle not opened" ) ENDIF - CALL wrf_message( "ext_esmf_get_next_var() not supported yet") + CALL wrf_debug(1, "ext_esmf_get_next_var() not supported yet") Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_next_var @@ -1232,7 +1232,7 @@ SUBROUTINE ext_esmf_get_dom_ti_real ( DataHandle,Element, Data, Count, Outcoun INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Outcount INTEGER , INTENT(OUT) :: Status - CALL wrf_message( "ext_esmf_get_dom_ti_real() not supported yet") + CALL wrf_debug(1, "ext_esmf_get_dom_ti_real() not supported yet") Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_dom_ti_real @@ -1246,7 +1246,7 @@ SUBROUTINE ext_esmf_put_dom_ti_real ( DataHandle,Element, Data, Count, Status real , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message( "ext_esmf_put_dom_ti_real() not supported yet") + CALL wrf_debug(1, "ext_esmf_put_dom_ti_real() not supported yet") Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_dom_ti_real @@ -1261,7 +1261,7 @@ SUBROUTINE ext_esmf_get_dom_ti_double ( DataHandle,Element, Data, Count, Outco INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_dom_ti_double not supported yet') + CALL wrf_debug(1,'ext_esmf_get_dom_ti_double not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_dom_ti_double @@ -1275,7 +1275,7 @@ SUBROUTINE ext_esmf_put_dom_ti_double ( DataHandle,Element, Data, Count, Stat real*8 , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_dom_ti_double not supported yet') + CALL wrf_debug(1,'ext_esmf_put_dom_ti_double not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_dom_ti_double @@ -1302,7 +1302,7 @@ SUBROUTINE ext_esmf_get_dom_ti_integer ( DataHandle,Element, Data, Count, Outc Data(1) = grid( DataHandle )%kde_save Outcount = 1 ELSE - CALL wrf_message('ext_esmf_get_dom_ti_integer not fully supported yet') + CALL wrf_debug(1,'ext_esmf_get_dom_ti_integer not fully supported yet') Status = WRF_WARN_NOTSUPPORTED ENDIF @@ -1318,7 +1318,7 @@ SUBROUTINE ext_esmf_put_dom_ti_integer ( DataHandle,Element, Data, Count, Sta INTEGER , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_dom_ti_integer not supported yet') + CALL wrf_debug(1,'ext_esmf_put_dom_ti_integer not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_dom_ti_integer @@ -1333,7 +1333,7 @@ SUBROUTINE ext_esmf_get_dom_ti_logical ( DataHandle,Element, Data, Count, Outc INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_dom_ti_logical not supported yet') + CALL wrf_debug(1,'ext_esmf_get_dom_ti_logical not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_dom_ti_logical @@ -1347,7 +1347,7 @@ SUBROUTINE ext_esmf_put_dom_ti_logical ( DataHandle,Element, Data, Count, Sta logical , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_dom_ti_logical not supported yet') + CALL wrf_debug(1,'ext_esmf_put_dom_ti_logical not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_dom_ti_logical @@ -1360,7 +1360,7 @@ SUBROUTINE ext_esmf_get_dom_ti_char ( DataHandle,Element, Data, Status ) CHARACTER*(*) :: Element CHARACTER*(*) :: Data INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_dom_ti_char not supported yet') + CALL wrf_debug(1,'ext_esmf_get_dom_ti_char not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_dom_ti_char @@ -1373,7 +1373,7 @@ SUBROUTINE ext_esmf_put_dom_ti_char ( DataHandle, Element, Data, Status ) CHARACTER*(*) :: Element CHARACTER*(*) :: Data INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_dom_ti_char not supported yet') + CALL wrf_debug(1,'ext_esmf_put_dom_ti_char not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_dom_ti_char @@ -1389,7 +1389,7 @@ SUBROUTINE ext_esmf_get_dom_td_real ( DataHandle,Element, DateStr, Data, Count, INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_dom_td_real not supported yet') + CALL wrf_debug(1,'ext_esmf_get_dom_td_real not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_dom_td_real @@ -1404,7 +1404,7 @@ SUBROUTINE ext_esmf_put_dom_td_real ( DataHandle,Element, DateStr, Data, Count, real , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_dom_td_real not supported yet') + CALL wrf_debug(1,'ext_esmf_put_dom_td_real not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_dom_td_real @@ -1420,7 +1420,7 @@ SUBROUTINE ext_esmf_get_dom_td_double ( DataHandle,Element, DateStr, Data, Coun INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_dom_td_double not supported yet') + CALL wrf_debug(1,'ext_esmf_get_dom_td_double not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_dom_td_double @@ -1435,7 +1435,7 @@ SUBROUTINE ext_esmf_put_dom_td_double ( DataHandle,Element, DateStr, Data, Coun real*8 , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_dom_td_double not supported yet') + CALL wrf_debug(1,'ext_esmf_put_dom_td_double not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_dom_td_double @@ -1451,7 +1451,7 @@ SUBROUTINE ext_esmf_get_dom_td_integer ( DataHandle,Element, DateStr, Data, Cou INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_dom_td_integer not supported yet') + CALL wrf_debug(1,'ext_esmf_get_dom_td_integer not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_dom_td_integer @@ -1466,7 +1466,7 @@ SUBROUTINE ext_esmf_put_dom_td_integer ( DataHandle,Element, DateStr, Data, Cou integer , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_dom_td_integer not supported yet') + CALL wrf_debug(1,'ext_esmf_put_dom_td_integer not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_dom_td_integer @@ -1482,7 +1482,7 @@ SUBROUTINE ext_esmf_get_dom_td_logical ( DataHandle,Element, DateStr, Data, Cou INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_dom_td_logical not supported yet') + CALL wrf_debug(1,'ext_esmf_get_dom_td_logical not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_dom_td_logical @@ -1497,7 +1497,7 @@ SUBROUTINE ext_esmf_put_dom_td_logical ( DataHandle,Element, DateStr, Data, Cou logical , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_dom_td_logical not supported yet') + CALL wrf_debug(1,'ext_esmf_put_dom_td_logical not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_dom_td_logical @@ -1511,7 +1511,7 @@ SUBROUTINE ext_esmf_get_dom_td_char ( DataHandle,Element, DateStr, Data, Statu CHARACTER*(*) :: DateStr CHARACTER*(*) :: Data INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_dom_td_char not supported yet') + CALL wrf_debug(1,'ext_esmf_get_dom_td_char not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_dom_td_char @@ -1525,7 +1525,7 @@ SUBROUTINE ext_esmf_put_dom_td_char ( DataHandle,Element, DateStr, Data, Statu CHARACTER*(*) :: DateStr CHARACTER*(*) :: Data INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_dom_td_char not supported yet') + CALL wrf_debug(1,'ext_esmf_put_dom_td_char not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_dom_td_char @@ -1541,7 +1541,7 @@ SUBROUTINE ext_esmf_get_var_ti_real ( DataHandle,Element, Varname, Data, Count, INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_var_ti_real not supported yet') + CALL wrf_debug(1,'ext_esmf_get_var_ti_real not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_ti_real @@ -1556,7 +1556,7 @@ SUBROUTINE ext_esmf_put_var_ti_real ( DataHandle,Element, Varname, Data, Count, real , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_var_ti_real not supported yet') + CALL wrf_debug(1,'ext_esmf_put_var_ti_real not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_var_ti_real @@ -1572,7 +1572,7 @@ SUBROUTINE ext_esmf_get_var_ti_double ( DataHandle,Element, Varname, Data, Coun INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_var_ti_double not supported yet') + CALL wrf_debug(1,'ext_esmf_get_var_ti_double not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_ti_double @@ -1587,7 +1587,7 @@ SUBROUTINE ext_esmf_put_var_ti_double ( DataHandle,Element, Varname, Data, Coun real*8 , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_var_ti_double not supported yet') + CALL wrf_debug(1,'ext_esmf_put_var_ti_double not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_var_ti_double @@ -1603,7 +1603,7 @@ SUBROUTINE ext_esmf_get_var_ti_integer ( DataHandle,Element, Varname, Data, Cou INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_var_ti_integer not supported yet') + CALL wrf_debug(1,'ext_esmf_get_var_ti_integer not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_ti_integer @@ -1618,7 +1618,7 @@ SUBROUTINE ext_esmf_put_var_ti_integer ( DataHandle,Element, Varname, Data, Cou integer , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_var_ti_integer not supported yet') + CALL wrf_debug(1,'ext_esmf_put_var_ti_integer not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_var_ti_integer @@ -1634,7 +1634,7 @@ SUBROUTINE ext_esmf_get_var_ti_logical ( DataHandle,Element, Varname, Data, Cou INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_var_ti_logical not supported yet') + CALL wrf_debug(1,'ext_esmf_get_var_ti_logical not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_ti_logical @@ -1649,7 +1649,7 @@ SUBROUTINE ext_esmf_put_var_ti_logical ( DataHandle,Element, Varname, Data, Cou logical , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_var_ti_logical not supported yet') + CALL wrf_debug(1,'ext_esmf_put_var_ti_logical not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_var_ti_logical @@ -1665,7 +1665,7 @@ SUBROUTINE ext_esmf_get_var_ti_char ( DataHandle,Element, Varname, Data, Statu INTEGER , INTENT(OUT) :: Status INTEGER locDataHandle, code CHARACTER*132 locElement, locVarName - CALL wrf_message('ext_esmf_get_var_ti_char not supported yet') + CALL wrf_debug(1,'ext_esmf_get_var_ti_char not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_ti_char @@ -1681,7 +1681,7 @@ SUBROUTINE ext_esmf_put_var_ti_char ( DataHandle,Element, Varname, Data, Statu INTEGER , INTENT(OUT) :: Status REAL dummy INTEGER :: Count - CALL wrf_message('ext_esmf_put_var_ti_char not supported yet') + CALL wrf_debug(1,'ext_esmf_put_var_ti_char not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_var_ti_char @@ -1698,7 +1698,7 @@ SUBROUTINE ext_esmf_get_var_td_real ( DataHandle,Element, DateStr,Varname, Data INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_var_td_real not supported yet') + CALL wrf_debug(1,'ext_esmf_get_var_td_real not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_td_real @@ -1714,7 +1714,7 @@ SUBROUTINE ext_esmf_put_var_td_real ( DataHandle,Element, DateStr,Varname, Data real , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_var_td_real not supported yet') + CALL wrf_debug(1,'ext_esmf_put_var_td_real not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_var_td_real @@ -1731,7 +1731,7 @@ SUBROUTINE ext_esmf_get_var_td_double ( DataHandle,Element, DateStr,Varname, Da INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_var_td_double not supported yet') + CALL wrf_debug(1,'ext_esmf_get_var_td_double not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_td_double @@ -1747,7 +1747,7 @@ SUBROUTINE ext_esmf_put_var_td_double ( DataHandle,Element, DateStr,Varname, Da real*8 , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_var_td_double not supported yet') + CALL wrf_debug(1,'ext_esmf_put_var_td_double not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_var_td_double @@ -1764,7 +1764,7 @@ SUBROUTINE ext_esmf_get_var_td_integer ( DataHandle,Element, DateStr,Varname, D INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_var_td_integer not supported yet') + CALL wrf_debug(1,'ext_esmf_get_var_td_integer not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_td_integer @@ -1780,7 +1780,7 @@ SUBROUTINE ext_esmf_put_var_td_integer ( DataHandle,Element, DateStr,Varname, D integer , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_var_td_integer not supported yet') + CALL wrf_debug(1,'ext_esmf_put_var_td_integer not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_var_td_integer @@ -1797,7 +1797,7 @@ SUBROUTINE ext_esmf_get_var_td_logical ( DataHandle,Element, DateStr,Varname, D INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: OutCount INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_var_td_logical not supported yet') + CALL wrf_debug(1,'ext_esmf_get_var_td_logical not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_td_logical @@ -1813,7 +1813,7 @@ SUBROUTINE ext_esmf_put_var_td_logical ( DataHandle,Element, DateStr,Varname, D logical , INTENT(IN) :: Data(*) INTEGER , INTENT(IN) :: Count INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_var_td_logical not supported yet') + CALL wrf_debug(1,'ext_esmf_put_var_td_logical not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_var_td_logical @@ -1828,7 +1828,7 @@ SUBROUTINE ext_esmf_get_var_td_char ( DataHandle,Element, DateStr,Varname, Data CHARACTER*(*) :: VarName CHARACTER*(*) :: Data INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_get_var_td_char not supported yet') + CALL wrf_debug(1,'ext_esmf_get_var_td_char not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_get_var_td_char @@ -1843,7 +1843,7 @@ SUBROUTINE ext_esmf_put_var_td_char ( DataHandle,Element, DateStr,Varname, Data CHARACTER*(*) :: VarName CHARACTER*(*) :: Data INTEGER , INTENT(OUT) :: Status - CALL wrf_message('ext_esmf_put_var_td_char not supported yet') + CALL wrf_debug(1,'ext_esmf_put_var_td_char not supported yet') Status = WRF_WARN_NOTSUPPORTED RETURN END SUBROUTINE ext_esmf_put_var_td_char diff --git a/wrfv2_fire/external/io_esmf/module_esmf_extensions.F90 b/wrfv2_fire/external/io_esmf/module_esmf_extensions.F90 index 7fbee36f..35c8c801 100644 --- a/wrfv2_fire/external/io_esmf/module_esmf_extensions.F90 +++ b/wrfv2_fire/external/io_esmf/module_esmf_extensions.F90 @@ -24,7 +24,7 @@ MODULE module_esmf_extensions - USE ESMF_Mod + USE ESMF IMPLICIT NONE @@ -407,7 +407,8 @@ CONTAINS d_r8, h_r8, m_r8, s_r8, & ms_r8, us_r8, ns_r8, & sN, sD, & - calendar, calendarType, timeZone, & +! 5.2.0r calendar, calendarType, timeZone, & + calendar, timeZone, & timeString, timeStringISOFrac, & dayOfWeek, midMonth, & dayOfYear, dayOfYear_r8, & @@ -436,7 +437,7 @@ CONTAINS integer(ESMF_KIND_I4), intent(out), optional :: sN integer(ESMF_KIND_I4), intent(out), optional :: sD type(ESMF_Calendar), intent(out), optional :: calendar - type(ESMF_CalendarType), intent(out), optional :: calendarType +! 5.2.0r type(ESMF_CalendarType), intent(out), optional :: calendarType integer, intent(out), optional :: timeZone character (len=*), intent(out), optional :: timeString character (len=*), intent(out), optional :: timeStringISOFrac @@ -459,7 +460,8 @@ CONTAINS d_r8=d_r8, h_r8=h_r8, m_r8=m_r8, s_r8=s_r8, & ms_r8=ms_r8, us_r8=us_r8, ns_r8=ns_r8, & sN=sN, sD=sD, & - calendar=calendar, calendarType=calendarType, timeZone=timeZone, & +! 5.2.0r calendar=calendar, calendarType=calendarType, timeZone=timeZone, & + calendar=calendar, timeZone=timeZone, & timeString=timeString, timeStringISOFrac=timeStringISOFrac, & dayOfWeek=dayOfWeek, midMonth=midMonth, & dayOfYear=dayOfYear, dayOfYear_R8=dayOfYear_r8, & diff --git a/wrfv2_fire/external/io_esmf/module_symbols_util.F90 b/wrfv2_fire/external/io_esmf/module_symbols_util.F90 dissimilarity index 94% index 7e2be94b..7620afeb 100644 --- a/wrfv2_fire/external/io_esmf/module_symbols_util.F90 +++ b/wrfv2_fire/external/io_esmf/module_symbols_util.F90 @@ -1,132 +1,134 @@ -! -! NOTE: This file will be removed once encapsulation of bare ESMF -! calls is complete within WRF non-external source code. -! - MODULE module_symbols_util - - USE ESMF_Mod, WRFU_ALARM => ESMF_ALARM - USE ESMF_Mod, WRFU_ALARMCREATE => ESMF_ALARMCREATE - USE ESMF_Mod, WRFU_ALARMDESTROY => ESMF_ALARMDESTROY - USE ESMF_Mod, WRFU_ALARMDISABLE => ESMF_ALARMDISABLE - USE ESMF_Mod, WRFU_ALARMENABLE => ESMF_ALARMENABLE - USE ESMF_Mod, WRFU_ALARMGET => ESMF_ALARMGET - USE ESMF_Mod, WRFU_ALARMISENABLED => ESMF_ALARMISENABLED - USE ESMF_Mod, WRFU_ALARMISRINGING => ESMF_ALARMISRINGING - USE ESMF_Mod, WRFU_ALARMISSTICKY => ESMF_ALARMISSTICKY - USE ESMF_Mod, WRFU_ALARMLISTTYPE => ESMF_ALARMLISTTYPE - USE ESMF_Mod, WRFU_ALARMLIST_ALL => ESMF_ALARMLIST_ALL - USE ESMF_Mod, WRFU_ALARMLIST_NEXTRINGING => ESMF_ALARMLIST_NEXTRINGING - USE ESMF_Mod, WRFU_ALARMLIST_PREVRINGING => ESMF_ALARMLIST_PREVRINGING - USE ESMF_Mod, WRFU_ALARMLIST_RINGING => ESMF_ALARMLIST_RINGING - USE ESMF_Mod, WRFU_ALARMNOTSTICKY => ESMF_ALARMNOTSTICKY - USE ESMF_Mod, WRFU_ALARMPRINT => ESMF_ALARMPRINT - USE ESMF_Mod, WRFU_ALARMREADRESTART => ESMF_ALARMREADRESTART - USE ESMF_Mod, WRFU_ALARMRINGEROFF => ESMF_ALARMRINGEROFF - USE ESMF_Mod, WRFU_ALARMRINGERON => ESMF_ALARMRINGERON - USE ESMF_Mod, WRFU_ALARMSET => ESMF_ALARMSET - USE ESMF_Mod, WRFU_ALARMSTICKY => ESMF_ALARMSTICKY - USE ESMF_Mod, WRFU_ALARMVALIDATE => ESMF_ALARMVALIDATE - USE ESMF_Mod, WRFU_ALARMWASPREVRINGING => ESMF_ALARMWASPREVRINGING - USE ESMF_Mod, WRFU_ALARMWILLRINGNEXT => ESMF_ALARMWILLRINGNEXT - USE ESMF_Mod, WRFU_ALARMWRITERESTART => ESMF_ALARMWRITERESTART - - USE ESMF_Mod, WRFU_CALENDAR => ESMF_CALENDAR - USE ESMF_Mod, WRFU_CALENDARCREATE => ESMF_CALENDARCREATE - USE ESMF_Mod, WRFU_CALENDARDESTROY => ESMF_CALENDARDESTROY - USE ESMF_Mod, WRFU_CALENDARFINALIZE => ESMF_CALENDARFINALIZE - USE ESMF_Mod, WRFU_CALENDARGET => ESMF_CALENDARGET - USE ESMF_Mod, WRFU_CALENDARINITIALIZE => ESMF_CALENDARINITIALIZE - USE ESMF_Mod, WRFU_CALENDARISLEAPYEAR => ESMF_CALENDARISLEAPYEAR - USE ESMF_Mod, WRFU_CALENDARPRINT => ESMF_CALENDARPRINT - USE ESMF_Mod, WRFU_CALENDARREADRESTART => ESMF_CALENDARREADRESTART - USE ESMF_Mod, WRFU_CALENDARSET => ESMF_CALENDARSET - USE ESMF_Mod, WRFU_CALENDARSETDEFAULT => ESMF_CALENDARSETDEFAULT - USE ESMF_Mod, WRFU_CALENDARTYPE => ESMF_CALENDARTYPE - USE ESMF_Mod, WRFU_CALENDARVALIDATE => ESMF_CALENDARVALIDATE - USE ESMF_Mod, WRFU_CALENDARWRITERESTART => ESMF_CALENDARWRITERESTART - USE ESMF_Mod, WRFU_CAL_360DAY => ESMF_CAL_360DAY - USE ESMF_Mod, WRFU_CAL_CUSTOM => ESMF_CAL_CUSTOM - USE ESMF_Mod, WRFU_CAL_GREGORIAN => ESMF_CAL_GREGORIAN - USE ESMF_Mod, WRFU_CAL_JULIAN => ESMF_CAL_JULIAN - USE ESMF_Mod, WRFU_CAL_JULIANDAY => ESMF_CAL_JULIANDAY - USE ESMF_Mod, WRFU_CAL_NOCALENDAR => ESMF_CAL_NOCALENDAR - USE ESMF_Mod, WRFU_CAL_NOLEAP => ESMF_CAL_NOLEAP - USE ESMF_Mod, WRFU_CLOCK => ESMF_CLOCK - USE ESMF_Mod, WRFU_CLOCKADVANCE => ESMF_CLOCKADVANCE - USE ESMF_Mod, WRFU_CLOCKCREATE => ESMF_CLOCKCREATE - USE ESMF_Mod, WRFU_CLOCKDESTROY => ESMF_CLOCKDESTROY - USE ESMF_Mod, WRFU_CLOCKGET => ESMF_CLOCKGET - USE ESMF_Mod, WRFU_CLOCKGETALARM => ESMF_CLOCKGETALARM - USE ESMF_Mod, WRFU_CLOCKGETALARMLIST => ESMF_CLOCKGETALARMLIST - USE ESMF_Mod, WRFU_CLOCKGETNEXTTIME => ESMF_CLOCKGETNEXTTIME - USE ESMF_Mod, WRFU_CLOCKISDONE => ESMF_CLOCKISDONE - USE ESMF_Mod, WRFU_CLOCKISREVERSE => ESMF_CLOCKISREVERSE - USE ESMF_Mod, WRFU_CLOCKISSTOPTIME => ESMF_CLOCKISSTOPTIME - USE ESMF_Mod, WRFU_CLOCKISSTOPTIMEENABLED => ESMF_CLOCKISSTOPTIMEENABLED - USE ESMF_Mod, WRFU_CLOCKPRINT => ESMF_CLOCKPRINT - USE ESMF_Mod, WRFU_CLOCKREADRESTART => ESMF_CLOCKREADRESTART - USE ESMF_Mod, WRFU_CLOCKSET => ESMF_CLOCKSET - USE ESMF_Mod, WRFU_CLOCKSTOPTIMEDISABLE => ESMF_CLOCKSTOPTIMEDISABLE - USE ESMF_Mod, WRFU_CLOCKSTOPTIMEENABLE => ESMF_CLOCKSTOPTIMEENABLE - USE ESMF_Mod, WRFU_CLOCKSYNCTOREALTIME => ESMF_CLOCKSYNCTOREALTIME - USE ESMF_Mod, WRFU_CLOCKVALIDATE => ESMF_CLOCKVALIDATE - USE ESMF_Mod, WRFU_CLOCKWRITERESTART => ESMF_CLOCKWRITERESTART - USE ESMF_Mod, WRFU_FINALIZE => ESMF_FINALIZE - USE ESMF_Mod, WRFU_INITIALIZE => ESMF_INITIALIZE - USE ESMF_Mod, WRFU_KIND_C16 => ESMF_KIND_C16 - USE ESMF_Mod, WRFU_KIND_C8 => ESMF_KIND_C8 - USE ESMF_Mod, WRFU_KIND_I1 => ESMF_KIND_I1 - USE ESMF_Mod, WRFU_KIND_I2 => ESMF_KIND_I2 - USE ESMF_Mod, WRFU_KIND_I4 => ESMF_KIND_I4 - USE ESMF_Mod, WRFU_KIND_I8 => ESMF_KIND_I8 - USE ESMF_Mod, WRFU_KIND_R4 => ESMF_KIND_R4 - USE ESMF_Mod, WRFU_KIND_R8 => ESMF_KIND_R8 - USE ESMF_Mod, WRFU_LOG => ESMF_LOG - USE ESMF_Mod, WRFU_LOGCLOSE => ESMF_LOGCLOSE - USE ESMF_Mod, WRFU_LOGFINALIZE => ESMF_LOGFINALIZE - USE ESMF_Mod, WRFU_LOGFLUSH => ESMF_LOGFLUSH - USE ESMF_Mod, WRFU_LOGFOUNDALLOCERROR => ESMF_LOGFOUNDALLOCERROR - USE ESMF_Mod, WRFU_LOGFOUNDERROR => ESMF_LOGFOUNDERROR - USE ESMF_Mod, WRFU_LOGGET => ESMF_LOGGET - USE ESMF_Mod, WRFU_LOGINITIALIZE => ESMF_LOGINITIALIZE - USE ESMF_Mod, WRFU_LOGMSGFOUNDALLOCERROR => ESMF_LOGMSGFOUNDALLOCERROR - USE ESMF_Mod, WRFU_LOGMSGFOUNDERROR => ESMF_LOGMSGFOUNDERROR - USE ESMF_Mod, WRFU_LOGMSGSETERROR => ESMF_LOGMSGSETERROR - USE ESMF_Mod, WRFU_LOGOPEN => ESMF_LOGOPEN - USE ESMF_Mod, WRFU_LOGSET => ESMF_LOGSET - USE ESMF_Mod, WRFU_LOGWRITE => ESMF_LOGWRITE - USE ESMF_Mod, WRFU_LOG_ERROR => ESMF_LOG_ERROR - USE ESMF_Mod, WRFU_LOG_HALTERROR => ESMF_LOG_HALTERROR - USE ESMF_Mod, WRFU_LOG_HALTNEVER => ESMF_LOG_HALTNEVER - USE ESMF_Mod, WRFU_LOG_HALTWARNING => ESMF_LOG_HALTWARNING - USE ESMF_Mod, WRFU_LOG_INFO => ESMF_LOG_INFO - USE ESMF_Mod, WRFU_LOG_MULTI => ESMF_LOG_MULTI - USE ESMF_Mod, WRFU_LOG_SINGLE => ESMF_LOG_SINGLE - USE ESMF_Mod, WRFU_LOG_WARNING => ESMF_LOG_WARNING - USE ESMF_Mod, WRFU_MAXSTR => ESMF_MAXSTR - ! USE ESMF_Mod, WRFU_R4 => ESMF_R4 - ! USE ESMF_Mod, WRFU_R8 => ESMF_R8 - USE ESMF_Mod, WRFU_SUCCESS => ESMF_SUCCESS - USE ESMF_Mod, WRFU_TIME => ESMF_TIME -! See module_esmf_extensions for extensions to this interface. Uncomment -! the line below once ESMF supports the extensions. -! USE ESMF_Mod, WRFU_TIMEGET => ESMF_TIMEGET - USE ESMF_Mod, WRFU_TIMEINTERVAL => ESMF_TIMEINTERVAL - USE ESMF_Mod, WRFU_TIMEINTERVALABSVALUE => ESMF_TIMEINTERVALABSVALUE - USE ESMF_Mod, WRFU_TIMEINTERVALGET => ESMF_TIMEINTERVALGET - USE ESMF_Mod, WRFU_TIMEINTERVALNEGABSVALUE => ESMF_TIMEINTERVALNEGABSVALUE - USE ESMF_Mod, WRFU_TIMEINTERVALPRINT => ESMF_TIMEINTERVALPRINT - USE ESMF_Mod, WRFU_TIMEINTERVALREADRESTART => ESMF_TIMEINTERVALREADRESTART - USE ESMF_Mod, WRFU_TIMEINTERVALSET => ESMF_TIMEINTERVALSET - USE ESMF_Mod, WRFU_TIMEINTERVALVALIDATE => ESMF_TIMEINTERVALVALIDATE - USE ESMF_Mod, WRFU_TIMEINTERVALWRITERESTART => ESMF_TIMEINTERVALWRITERESTART - USE ESMF_Mod, WRFU_TIMEISLEAPYEAR => ESMF_TIMEISLEAPYEAR - USE ESMF_Mod, WRFU_TIMEISSAMECALENDAR => ESMF_TIMEISSAMECALENDAR - USE ESMF_Mod, WRFU_TIMEPRINT => ESMF_TIMEPRINT - USE ESMF_Mod, WRFU_TIMEREADRESTART => ESMF_TIMEREADRESTART - USE ESMF_Mod, WRFU_TIMESET => ESMF_TIMESET - USE ESMF_Mod, WRFU_TIMESYNCTOREALTIME => ESMF_TIMESYNCTOREALTIME - USE ESMF_Mod, WRFU_TIMEVALIDATE => ESMF_TIMEVALIDATE - USE ESMF_Mod, WRFU_TIMEWRITERESTART => ESMF_TIMEWRITERESTART - - END MODULE module_symbols_util +! +! NOTE: This file will be removed once encapsulation of bare ESMF +! calls is complete within WRF non-external source code. +! + MODULE module_symbols_util + + USE ESMF, WRFU_ALARM => ESMF_ALARM + USE ESMF, WRFU_ALARMCREATE => ESMF_ALARMCREATE + USE ESMF, WRFU_ALARMDESTROY => ESMF_ALARMDESTROY + USE ESMF, WRFU_ALARMDISABLE => ESMF_ALARMDISABLE + USE ESMF, WRFU_ALARMENABLE => ESMF_ALARMENABLE + USE ESMF, WRFU_ALARMGET => ESMF_ALARMGET + USE ESMF, WRFU_ALARMISENABLED => ESMF_ALARMISENABLED + USE ESMF, WRFU_ALARMISRINGING => ESMF_ALARMISRINGING + USE ESMF, WRFU_ALARMISSTICKY => ESMF_ALARMISSTICKY +!5.2.0r USE ESMF, WRFU_ALARMLISTTYPE => ESMF_ALARMLISTTYPE + USE ESMF, WRFU_ALARMLIST_ALL => ESMF_ALARMLIST_ALL + USE ESMF, WRFU_ALARMLIST_NEXTRINGING => ESMF_ALARMLIST_NEXTRINGING + USE ESMF, WRFU_ALARMLIST_PREVRINGING => ESMF_ALARMLIST_PREVRINGING + USE ESMF, WRFU_ALARMLIST_RINGING => ESMF_ALARMLIST_RINGING + USE ESMF, WRFU_ALARMNOTSTICKY => ESMF_ALARMNOTSTICKY + USE ESMF, WRFU_ALARMPRINT => ESMF_ALARMPRINT + USE ESMF, WRFU_ALARMREADRESTART => ESMF_ALARMREADRESTART + USE ESMF, WRFU_ALARMRINGEROFF => ESMF_ALARMRINGEROFF + USE ESMF, WRFU_ALARMRINGERON => ESMF_ALARMRINGERON + USE ESMF, WRFU_ALARMSET => ESMF_ALARMSET + USE ESMF, WRFU_ALARMSTICKY => ESMF_ALARMSTICKY + USE ESMF, WRFU_ALARMVALIDATE => ESMF_ALARMVALIDATE + USE ESMF, WRFU_ALARMWASPREVRINGING => ESMF_ALARMWASPREVRINGING + USE ESMF, WRFU_ALARMWILLRINGNEXT => ESMF_ALARMWILLRINGNEXT + USE ESMF, WRFU_ALARMWRITERESTART => ESMF_ALARMWRITERESTART + + USE ESMF, WRFU_CALENDAR => ESMF_CALENDAR + USE ESMF, WRFU_CALENDARCREATE => ESMF_CALENDARCREATE + USE ESMF, WRFU_CALENDARDESTROY => ESMF_CALENDARDESTROY + USE ESMF, WRFU_CALENDARFINALIZE => ESMF_CALENDARFINALIZE + USE ESMF, WRFU_CALENDARGET => ESMF_CALENDARGET + USE ESMF, WRFU_CALENDARINITIALIZE => ESMF_CALENDARINITIALIZE + USE ESMF, WRFU_CALENDARISLEAPYEAR => ESMF_CALENDARISLEAPYEAR + USE ESMF, WRFU_CALENDARPRINT => ESMF_CALENDARPRINT + USE ESMF, WRFU_CALENDARREADRESTART => ESMF_CALENDARREADRESTART + USE ESMF, WRFU_CALENDARSET => ESMF_CALENDARSET + USE ESMF, WRFU_CALENDARSETDEFAULT => ESMF_CALENDARSETDEFAULT +!5.2.0r USE ESMF, WRFU_CALENDARTYPE => ESMF_CALENDARTYPE + USE ESMF, WRFU_CALENDARVALIDATE => ESMF_CALENDARVALIDATE + USE ESMF, WRFU_CALENDARWRITERESTART => ESMF_CALENDARWRITERESTART + USE ESMF, WRFU_CAL_360DAY => ESMF_CALKIND_360DAY ! 5.2.0r + USE ESMF, WRFU_CAL_CUSTOM => ESMF_CALKIND_CUSTOM ! 5.2.0r + USE ESMF, WRFU_CAL_GREGORIAN => ESMF_CALKIND_GREGORIAN ! 5.2.0r + USE ESMF, WRFU_CAL_JULIAN => ESMF_CALKIND_JULIAN ! 5.2.0r + USE ESMF, WRFU_CAL_JULIANDAY => ESMF_CALKIND_JULIANDAY ! 5.2.0r + USE ESMF, WRFU_CAL_NOCALENDAR => ESMF_CALKIND_NOCALENDAR ! 5.2.0r + USE ESMF, WRFU_CAL_NOLEAP => ESMF_CALKIND_NOLEAP ! 5.2.0r + + USE ESMF, WRFU_CLOCK => ESMF_CLOCK + USE ESMF, WRFU_CLOCKADVANCE => ESMF_CLOCKADVANCE + USE ESMF, WRFU_CLOCKCREATE => ESMF_CLOCKCREATE + USE ESMF, WRFU_CLOCKDESTROY => ESMF_CLOCKDESTROY + USE ESMF, WRFU_CLOCKGET => ESMF_CLOCKGET + USE ESMF, WRFU_CLOCKGETALARM => ESMF_CLOCKGETALARM + USE ESMF, WRFU_CLOCKGETALARMLIST => ESMF_CLOCKGETALARMLIST + USE ESMF, WRFU_CLOCKGETNEXTTIME => ESMF_CLOCKGETNEXTTIME + USE ESMF, WRFU_CLOCKISDONE => ESMF_CLOCKISDONE + USE ESMF, WRFU_CLOCKISREVERSE => ESMF_CLOCKISREVERSE + USE ESMF, WRFU_CLOCKISSTOPTIME => ESMF_CLOCKISSTOPTIME + USE ESMF, WRFU_CLOCKISSTOPTIMEENABLED => ESMF_CLOCKISSTOPTIMEENABLED + USE ESMF, WRFU_CLOCKPRINT => ESMF_CLOCKPRINT + USE ESMF, WRFU_CLOCKREADRESTART => ESMF_CLOCKREADRESTART + USE ESMF, WRFU_CLOCKSET => ESMF_CLOCKSET + USE ESMF, WRFU_CLOCKSTOPTIMEDISABLE => ESMF_CLOCKSTOPTIMEDISABLE + USE ESMF, WRFU_CLOCKSTOPTIMEENABLE => ESMF_CLOCKSTOPTIMEENABLE + USE ESMF, WRFU_CLOCKSYNCTOREALTIME => ESMF_CLOCKSYNCTOREALTIME + USE ESMF, WRFU_CLOCKVALIDATE => ESMF_CLOCKVALIDATE + USE ESMF, WRFU_CLOCKWRITERESTART => ESMF_CLOCKWRITERESTART + USE ESMF, WRFU_FINALIZE => ESMF_FINALIZE + USE ESMF, WRFU_INITIALIZE => ESMF_INITIALIZE + USE ESMF, WRFU_KIND_C16 => ESMF_KIND_C16 + USE ESMF, WRFU_KIND_C8 => ESMF_KIND_C8 +!5.2.0r USE ESMF, WRFU_KIND_I1 => ESMF_KIND_I1 +!5.2.0r USE ESMF, WRFU_KIND_I2 => ESMF_KIND_I2 + USE ESMF, WRFU_KIND_I4 => ESMF_KIND_I4 + USE ESMF, WRFU_KIND_I8 => ESMF_KIND_I8 + USE ESMF, WRFU_KIND_R4 => ESMF_KIND_R4 + USE ESMF, WRFU_KIND_R8 => ESMF_KIND_R8 + USE ESMF, WRFU_LOG => ESMF_LOG + USE ESMF, WRFU_LOGCLOSE => ESMF_LOGCLOSE + USE ESMF, WRFU_LOGFINALIZE => ESMF_LOGFINALIZE + USE ESMF, WRFU_LOGFLUSH => ESMF_LOGFLUSH + USE ESMF, WRFU_LOGFOUNDALLOCERROR => ESMF_LOGFOUNDALLOCERROR + USE ESMF, WRFU_LOGFOUNDERROR => ESMF_LOGFOUNDERROR + USE ESMF, WRFU_LOGGET => ESMF_LOGGET + USE ESMF, WRFU_LOGINITIALIZE => ESMF_LOGINITIALIZE +! deprecated in ESMF 5 +! USE ESMF, WRFU_LOGMSGFOUNDALLOCERROR => ESMF_LOGMSGFOUNDALLOCERROR +! USE ESMF, WRFU_LOGMSGFOUNDERROR => ESMF_LOGMSGFOUNDERROR +! USE ESMF, WRFU_LOGMSGSETERROR => ESMF_LOGMSGSETERROR + USE ESMF, WRFU_LOGOPEN => ESMF_LOGOPEN + USE ESMF, WRFU_LOGSET => ESMF_LOGSET + USE ESMF, WRFU_LOGWRITE => ESMF_LOGWRITE +!5.2.0r USE ESMF, WRFU_LOG_ERROR => ESMF_LOG_ERROR +!5.2.0r USE ESMF, WRFU_LOG_HALTERROR => ESMF_LOG_HALTERROR +!5.2.0r USE ESMF, WRFU_LOG_HALTNEVER => ESMF_LOG_HALTNEVER +!5.2.0r USE ESMF, WRFU_LOG_HALTWARNING => ESMF_LOG_HALTWARNING +!5.2.0r USE ESMF, WRFU_LOG_INFO => ESMF_LOG_INFO +!5.2.0r USE ESMF, WRFU_LOG_MULTI => ESMF_LOG_MULTI +!5.2.0r USE ESMF, WRFU_LOG_SINGLE => ESMF_LOG_SINGLE +!5.2.0r USE ESMF, WRFU_LOG_WARNING => ESMF_LOG_WARNING + USE ESMF, WRFU_MAXSTR => ESMF_MAXSTR + ! USE ESMF, WRFU_R4 => ESMF_R4 + ! USE ESMF, WRFU_R8 => ESMF_R8 + USE ESMF, WRFU_SUCCESS => ESMF_SUCCESS + USE ESMF, WRFU_TIME => ESMF_TIME +! See module_esmf_extensions for extensions to this interface. Uncomment +! the line below once ESMF supports the extensions. +! USE ESMF, WRFU_TIMEGET => ESMF_TIMEGET + USE ESMF, WRFU_TIMEINTERVAL => ESMF_TIMEINTERVAL + USE ESMF, WRFU_TIMEINTERVALABSVALUE => ESMF_TIMEINTERVALABSVALUE + USE ESMF, WRFU_TIMEINTERVALGET => ESMF_TIMEINTERVALGET + USE ESMF, WRFU_TIMEINTERVALNEGABSVALUE => ESMF_TIMEINTERVALNEGABSVALUE + USE ESMF, WRFU_TIMEINTERVALPRINT => ESMF_TIMEINTERVALPRINT + USE ESMF, WRFU_TIMEINTERVALREADRESTART => ESMF_TIMEINTERVALREADRESTART + USE ESMF, WRFU_TIMEINTERVALSET => ESMF_TIMEINTERVALSET + USE ESMF, WRFU_TIMEINTERVALVALIDATE => ESMF_TIMEINTERVALVALIDATE + USE ESMF, WRFU_TIMEINTERVALWRITERESTART => ESMF_TIMEINTERVALWRITERESTART + USE ESMF, WRFU_TIMEISLEAPYEAR => ESMF_TIMEISLEAPYEAR + USE ESMF, WRFU_TIMEISSAMECALENDAR => ESMF_TIMEISSAMECALENDAR + USE ESMF, WRFU_TIMEPRINT => ESMF_TIMEPRINT + USE ESMF, WRFU_TIMEREADRESTART => ESMF_TIMEREADRESTART + USE ESMF, WRFU_TIMESET => ESMF_TIMESET + USE ESMF, WRFU_TIMESYNCTOREALTIME => ESMF_TIMESYNCTOREALTIME + USE ESMF, WRFU_TIMEVALIDATE => ESMF_TIMEVALIDATE + USE ESMF, WRFU_TIMEWRITERESTART => ESMF_TIMEWRITERESTART + + END MODULE module_symbols_util diff --git a/wrfv2_fire/external/io_grib1/io_grib1.F b/wrfv2_fire/external/io_grib1/io_grib1.F index eb8535b7..a7b87e45 100644 --- a/wrfv2_fire/external/io_grib1/io_grib1.F +++ b/wrfv2_fire/external/io_grib1/io_grib1.F @@ -2419,14 +2419,20 @@ SUBROUTINE ext_gr1_put_var_td_char ( DataHandle,Element, DateStr,Varname, & CHARACTER*(*) :: VarName CHARACTER*(*) :: Data INTEGER , INTENT(OUT) :: Status - CHARACTER(len=1000) :: tmpstr(1) + CHARACTER(len=1000) :: tmpstr INTEGER :: idx call wrf_debug ( DEBUG , 'Entering ext_gr1_put_var_td_char') if (committed(DataHandle)) then - write(tmpstr(idx),*)Data + + DO idx=1,LEN(Data) + tmpstr(idx:idx)=Data(idx:idx) + END DO + DO idx=LEN(Data)+1,1000 + tmpstr(idx:idx)=' ' + END DO CALL gr1_build_string (td_output(DataHandle), & Varname//';'//DateStr//';'//Element, tmpstr, 1, Status) diff --git a/wrfv2_fire/frame/module_domain.F b/wrfv2_fire/frame/module_domain.F index 613a8759..e14483e5 100644 --- a/wrfv2_fire/frame/module_domain.F +++ b/wrfv2_fire/frame/module_domain.F @@ -1097,9 +1097,11 @@ CONTAINS p => p%next ENDDO IF ( .NOT. found ) THEN +#if ( DA_CORE != 1 ) WRITE(mess,*)'W A R N I N G : Unable to modify mask for ',TRIM(lookee),& '. Variable not found. File: ',TRIM(fname),' at line ',lineno CALL wrf_message(mess) +#endif gavewarning = .TRUE. ENDIF fieldno = fieldno + 1 @@ -1205,9 +1207,11 @@ CONTAINS ENDIF ENDIF IF ( count_em > 100 ) THEN +#if ( DA_CORE != 1 ) WRITE(mess,*)'ERROR module_domain: Array size for you_warned_me2 is fixed at 100' CALL wrf_message(mess) CALL wrf_error_fatal('Did you really type > 100 fields into '//TRIM(fname)//' ?') +#endif ELSE IF ( .NOT. you_warned_me2(count_em,id) ) THEN CALL wrf_message(mess) ! Write warning message once for each field diff --git a/wrfv2_fire/frame/module_io_quilt.F b/wrfv2_fire/frame/module_io_quilt.F index 7565524f..7ba8fc87 100644 --- a/wrfv2_fire/frame/module_io_quilt.F +++ b/wrfv2_fire/frame/module_io_quilt.F @@ -373,7 +373,7 @@ MODULE module_wrf_quilt ! once (e.g. commands) to the IO server of my group. compute_group_master(j) = (me .EQ. 0) - IF( compute_group_master(j) ) WRITE(*,*) mytask,': ARPDBG : I will talk to IO server in group ',j +! IF( compute_group_master(j) ) WRITE(*,*) mytask,': ARPDBG : I will talk to IO server in group ',j ENDIF ENDIF ENDDO @@ -1786,7 +1786,7 @@ okay_to_w = .false. ENDDO !} while(icurs < obufsize) ! Now, for each field, retrieve headers and patches (data) from the internal -! buffers and collect them all on the I/O quilt server "root" task. +! buffers CALL init_retrieve_pieces_of_field ! Retrieve header and all patches for the first field from the internal ! buffers. @@ -2241,7 +2241,8 @@ okay_to_w = .false. DimNames, & DomainStart , DomainEnd ,& MemoryStart , MemoryEnd ,& - PatchStart , PatchEnd ) + PatchStart , PatchEnd, & + ntasks_io_group-1 ) stored_write_record = .true. !!$ IF(VarName .eq. "PSFC")THEN @@ -2254,16 +2255,17 @@ okay_to_w = .false. ELSE IF ( FieldType .EQ. WRF_INTEGER ) THEN CALL mpi_type_size( MPI_INTEGER, ftypesize, ierr ) #ifdef PNETCDF_QUILT - CALL store_patch_in_outbuf_pnc ( dummybuf, & - obuf(icurs/itypesize), & - TRIM(DateStr), & - TRIM(VarName) , & - FieldType, & - TRIM(MemoryOrder), & + CALL store_patch_in_outbuf_pnc ( dummybuf, & + obuf(icurs/itypesize) , & + TRIM(DateStr) , & + TRIM(VarName) , & + FieldType, & + TRIM(MemoryOrder) , & TRIM(Stagger), DimNames, & DomainStart , DomainEnd , & MemoryStart , MemoryEnd , & - PatchStart , PatchEnd ) + PatchStart , PatchEnd , & + ntasks_io_group-1 ) stored_write_record = .true. #endif ELSE IF ( FieldType .EQ. WRF_LOGICAL ) THEN @@ -3133,8 +3135,9 @@ SUBROUTINE wrf_quilt_set_time ( DataHandle, Data, Status ) ! this data so if PNETCDF_QUILT is defined then we assume that's what's being used. #ifdef PNETCDF_QUILT IF(compute_group_master(1) )THEN -! ARPDBG - actually only want to send one time header to each IO server as -! can't tell that's what they are on the IO servers themselves +! Only want to send one time header to each IO server as +! can't tell that's what they are on the IO servers themselves - therefore use +! the compute_group_master process. CALL int_gen_ti_header_char( hdrbuf, hdrbufsize, itypesize, & DataHandle, "TIMESTAMP", "", Data, int_set_time ) ELSE diff --git a/wrfv2_fire/frame/module_quilt_outbuf_ops.F b/wrfv2_fire/frame/module_quilt_outbuf_ops.F index d3242598..fa797310 100644 --- a/wrfv2_fire/frame/module_quilt_outbuf_ops.F +++ b/wrfv2_fire/frame/module_quilt_outbuf_ops.F @@ -5,7 +5,8 @@ MODULE module_quilt_outbuf_ops ! servers to assemble fields ("quilting") and write them to disk. ! ! - INTEGER, PARAMETER :: tabsize = 1000 + INTEGER, PARAMETER :: tabsize = 5 + ! The number of entries in outpatch_table (up to a maximum of tabsize) INTEGER, SAVE :: num_entries ! ARP, for PNC-enabled quilting, 02/06/2010 @@ -30,7 +31,8 @@ MODULE module_quilt_outbuf_ops INTEGER :: nPatch ! How many of the patches remain active in PatchList INTEGER :: nActivePatch - TYPE(varpatch), DIMENSION(tabsize) :: PatchList + TYPE(varpatch), ALLOCATABLE, DIMENSION(:) :: PatchList +! TYPE(varpatch), DIMENSION(tabsize) :: PatchList END TYPE outpatchlist TYPE(outpatchlist), DIMENSION(tabsize), SAVE :: outpatch_table @@ -85,18 +87,23 @@ CONTAINS outpatch_table(i)%DimNames(1:3) = "" outpatch_table(i)%DomainStart(1:3) = 0 outpatch_table(i)%DomainEnd(1:3) = 0 - outpatch_table(i)%npatch = 0 - outpatch_table(i)%nActivePatch = 0 ! We don't free any memory here - that is done immediately after the ! write of each patch is completed - DO j = 1, tabsize + DO j = 1, outpatch_table(i)%npatch outpatch_table(i)%PatchList(j)%forDeletion = .FALSE. outpatch_table(i)%PatchList(j)%PatchStart(:) = 0 outpatch_table(i)%PatchList(j)%PatchEnd(:) = 0 outpatch_table(i)%PatchList(j)%PatchExtent(:)= 0 - NULLIFY( outpatch_table(i)%PatchList(j)%rptr ) - NULLIFY( outpatch_table(i)%PatchList(j)%iptr ) + IF (ALLOCATED(outpatch_table(i)%PatchList)) THEN + IF (ASSOCIATED(outpatch_table(i)%PatchList(j)%rptr)) & + NULLIFY( outpatch_table(i)%PatchList(j)%rptr ) + IF (ASSOCIATED(outpatch_table(i)%PatchList(j)%iptr)) & + NULLIFY( outpatch_table(i)%PatchList(j)%iptr ) + DEALLOCATE(outpatch_table(i)%PatchList) + ENDIF END DO + outpatch_table(i)%npatch = 0 + outpatch_table(i)%nActivePatch = 0 #else outbuf_table(i)%VarName = "" outbuf_table(i)%DateStr = "" @@ -111,6 +118,7 @@ CONTAINS #endif ENDDO +write(0,*)'initializing num_entries to 0 ' num_entries = 0 END SUBROUTINE init_outbuf @@ -137,7 +145,6 @@ CONTAINS INTEGER :: DomainDesc ! dummy INTEGER :: Status INTEGER :: ipatch, icnt - ! INTEGER, DIMENSION(1) :: count_in, count_out INTEGER, ALLOCATABLE, DIMENSION(:) :: count_buf INTEGER :: min_count LOGICAL :: do_indep_write ! If no. of patches differs between @@ -182,33 +189,20 @@ CONTAINS ! only use pNetCDF in collective mode for the same no. of writes ! on each IO server. Any other patches will have to be written in ! independent mode. -!!$ count_in(1) = outpatch_table(ii)%npatch -!!$ CALL MPI_AllReduce( count_in, count_out, 1, MPI_INTEGER, & -!!$ MPI_MIN, local_comm, Status ) -!!$ WRITE(mess,*) 'ARPDBG: Min. no. of patches is ',count_out(1) -!!$ CALL wrf_message(mess) -!!$ WRITE(mess,*) 'ARPDBG: I have ',count_in(1),' patches.' -!!$ CALL wrf_message(mess) do_indep_write = .FALSE. count_buf(:) = 0 min_count = outpatch_table(ii)%nActivePatch -! WRITE(mess,*) 'ARPDBG: before gather, I have ',min_count,' patches.' -! CALL wrf_message(mess) CALL MPI_AllGather(min_count, 1, MPI_INTEGER, & count_buf, 1, MPI_INTEGER, & local_comm, Status) -! count_buf(mytask+1) = outpatch_table(ii)%npatch -! CALL MPI_AllGather(MPI_IN_PLACE,0, MPI_DATATYPE_NULL, & -! count_buf, ntasks, MPI_INTEGER, & -! local_comm, Status) ! Work out the minimum no. of patches on any IO Server and whether ! or not we will have to enter independent IO mode. min_count = outpatch_table(ii)%nActivePatch DO jj=1,ntasks, 1 IF(count_buf(jj) < min_count) min_count = count_buf(jj) - IF(outpatch_table(ii)%npatch /= count_buf(jj)) do_indep_write = .TRUE. + IF(outpatch_table(ii)%nActivePatch /= count_buf(jj)) do_indep_write = .TRUE. END DO @@ -217,11 +211,6 @@ CONTAINS ! WRITE(mess,*) 'ARPDBG: I have ',count_buf(mytask+1),' patches.' ! CALL wrf_message(mess) -! WRITE(mess,"('Field: ',I3, ' domain start = ',3I4)") ii, outpatch_table(ii)%DomainStart(1:3) -! CALL wrf_message(mess) -! WRITE(mess,"(10x,' domain end = ',3I4)") outpatch_table(ii)%DomainEnd(1:3) -! CALL wrf_message(mess) - IF ( outpatch_table(ii)%FieldType .EQ. WRF_FLOAT ) THEN ! Loop over the patches in this field up to the number that @@ -272,8 +261,8 @@ CONTAINS ! We must do the next few patches (if any) in independent IO ! mode as not all of the IO Servers have the same no. of ! patches. - ! outpatch_table(ii)%npatch holds the no. of live patches for - ! this IO Server + ! outpatch_table(ii)%nActivePatch holds the no. of live patches + ! for this IO Server CALL ext_pnc_start_independent_mode(DataHandle, Status) @@ -719,7 +708,6 @@ integer i,j CALL wrf_error_fatal("stitch_outbuf_patches: unrecognised Field Type") END IF - ! CALL end_timing("stitch_outbuf_patches: deleting replicated patches") RETURN @@ -739,19 +727,15 @@ integer i,j END IF JoinedPatches(:,:) = -1 + ! Initialise these arrays to catch failures in the above allocate on + ! linux-based systems (e.g. Cray XE) where allocation only actually + ! performed when requested memory is touched. + PatchCount(:) = 0 + OldPatchStart(:,:) = 0 + NULLIFY(ibuffer) NULLIFY(rbuffer) -#if 0 -! ! ARPDBG - WRITE(mess,*) "--------------------------" - CALL wrf_message(mess) - WRITE(mess,"('Field ',I3,': domain end = ', 3I4)") & - ibuf, outpatch_table(ibuf)%DomainEnd(1:3) - CALL wrf_message(mess) - WRITE(mess,*) "stitch_outbuf_patches: initial list of patches:" - CALL wrf_message(mess) - DO jpatch=1,outpatch_table(ibuf)%npatch,1 ! Each patch consists of just itself initially @@ -761,20 +745,7 @@ integer i,j ! Store the location of each patch for use after we've decided how to ! stitch them together OldPatchStart(:,jpatch) = outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(:) - - WRITE(mess,"('Patch ',I3,': [',I3,': ',I3,'],[',I3,':',I3,'],[',I3,':',I3,']')") jpatch, & - outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(1), & - outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(1), & - outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(2), & - outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(2), & - outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(3), & - outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(3) - CALL wrf_message(mess) END DO - WRITE(mess,*) "--------------------------" - CALL wrf_message(mess) - ! ARPDBGend -#endif ! Search through patches to find pairs that we can stitch together ipatch = 1 @@ -787,7 +758,7 @@ integer i,j INNER: DO jpatch=ipatch+1,outpatch_table(ibuf)%npatch,1 - IF(outpatch_table(ibuf)%PatchList(ipatch)%forDeletion )THEN + IF(outpatch_table(ibuf)%PatchList(jpatch)%forDeletion )THEN CYCLE INNER END IF @@ -819,8 +790,8 @@ integer i,j outpatch_table(ibuf)%PatchList(ipatch)%PatchStart(1) = & outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(1) CALL merge_patches(ibuf, ipatch, jpatch) + ! Go again... -! CALL wrf_message('Re-starting search...') ipatch = 1 CYCLE OUTER END IF @@ -851,8 +822,8 @@ integer i,j outpatch_table(ibuf)%PatchList(ipatch)%PatchEnd(1) = & outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(1) CALL merge_patches(ibuf, ipatch, jpatch) + ! Go again... -! CALL wrf_message('Re-starting search...') ipatch = 1 CYCLE OUTER END IF @@ -881,8 +852,8 @@ integer i,j outpatch_table(ibuf)%PatchList(ipatch)%PatchStart(2) = & outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(2) CALL merge_patches(ibuf, ipatch, jpatch) + ! Go again... -! CALL wrf_message('Re-starting search...') ipatch = 1 CYCLE OUTER END IF @@ -910,8 +881,8 @@ integer i,j outpatch_table(ibuf)%PatchList(ipatch)%PatchEnd(2) = & outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(2) CALL merge_patches(ibuf, ipatch, jpatch) + ! Go again... -! CALL wrf_message('Re-starting search...') ipatch = 1 CYCLE OUTER END IF @@ -940,8 +911,8 @@ integer i,j outpatch_table(ibuf)%PatchList(ipatch)%PatchStart(3) = & outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(3) CALL merge_patches(ibuf, ipatch, jpatch) + ! Go again... -! CALL wrf_message('Re-starting search...') ipatch = 1 CYCLE OUTER END IF @@ -969,8 +940,8 @@ integer i,j outpatch_table(ibuf)%PatchList(ipatch)%PatchEnd(3) = & outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(3) CALL merge_patches(ibuf, ipatch, jpatch) + ! Go again... -! CALL wrf_message('Re-starting search...') ipatch = 1 CYCLE OUTER END IF @@ -982,24 +953,19 @@ integer i,j END DO OUTER -#if 0 - ! ARPDBG - CALL wrf_message("--------------------------") - CALL wrf_message("Final list of patches:") - npatches = 0 DO jpatch=1,outpatch_table(ibuf)%npatch,1 IF ( outpatch_table(ibuf)%PatchList(jpatch)%forDeletion ) CYCLE - WRITE(mess,"('Patch ',I3,': [',I3,': ',I3,'],[',I3,':',I3,'],[',I3,':',I3,']')") jpatch, outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(1), & - outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(1), & - outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(2), & - outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(2), & - outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(3), & - outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(3) - CALL wrf_message(mess) +! WRITE(mess,"('Patch ',I3,': [',I3,': ',I3,'],[',I3,':',I3,'],[',I3,':',I3,']')") jpatch, outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(1), & +! outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(1), & +! outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(2), & +! outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(2), & +! outpatch_table(ibuf)%PatchList(jpatch)%PatchStart(3), & +! outpatch_table(ibuf)%PatchList(jpatch)%PatchEnd(3) +! CALL wrf_message(mess) ! Count how many patches we're left with npatches = npatches + 1 @@ -1034,7 +1000,7 @@ integer i,j ii = JoinedPatches(ipatch, jpatch) - ! Work out where to put it - the PatchList(i)PatchStart() has been + ! Work out where to put it - the PatchList(i)%PatchStart() has been ! updated to hold the start of the newly quilted patch i. It will ! therefore be less than or equal to the starts of each of the ! constituent patches. @@ -1100,8 +1066,6 @@ integer i,j WRITE(mess,*) "--------------------------" CALL wrf_message(mess) - ! ARPDBGend -#endif ! Record how many patches we're left with outpatch_table(ibuf)%nPatch = npatches @@ -1240,15 +1204,16 @@ END MODULE module_quilt_outbuf_ops ! on inbuf will result; may want to make a module program at some point SUBROUTINE store_patch_in_outbuf_pnc( inbuf_r, inbuf_i, DateStr, VarName , & FieldType, MemoryOrder, Stagger, & - DimNames,& + DimNames , & DomainStart , DomainEnd , & MemoryStart , MemoryEnd , & - PatchStart , PatchEnd ) + PatchStart , PatchEnd , & + ntasks ) ! !
 ! This routine stores a patch in an array within an element of the 
 ! outpatch_table%PatchList data structure.  DateStr, VarName, and 
-! MemoryOrder are used to uniquely identify which element of outbuf_table is 
+! MemoryOrder are used to uniquely identify which element of outpatch_table is 
 ! associated with this array.  If no element is associated, then this routine 
 ! first assigns an unused element and allocates space within that element.  
 ! This routine also stores DateStr, VarName, 
@@ -1260,11 +1225,15 @@ END MODULE module_quilt_outbuf_ops
     USE module_timing
     IMPLICIT NONE
 #include "wrf_io_flags.h"
-    INTEGER ,                INTENT(IN) :: FieldType
-    REAL    , DIMENSION(*) , INTENT(IN) :: inbuf_r
-    INTEGER , DIMENSION(*) , INTENT(IN) :: inbuf_i
-    INTEGER , DIMENSION(3) , INTENT(IN) :: DomainStart , DomainEnd , MemoryStart , MemoryEnd , PatchStart , PatchEnd
-    CHARACTER*(*)    , INTENT(IN) :: DateStr , VarName, MemoryOrder , Stagger, DimNames(3)
+    INTEGER ,               INTENT(IN) :: FieldType
+    REAL    , DIMENSION(*), INTENT(IN) :: inbuf_r
+    INTEGER , DIMENSION(*), INTENT(IN) :: inbuf_i
+    INTEGER , DIMENSION(3), INTENT(IN) :: DomainStart, DomainEnd, MemoryStart,&
+                                          MemoryEnd , PatchStart , PatchEnd
+    CHARACTER*(*)         , INTENT(IN) :: DateStr , VarName, MemoryOrder , &
+                                          Stagger, DimNames(3)
+    INTEGER, INTENT(IN) :: ntasks ! Number of compute tasks associated with 
+                                  ! this IO server
 ! Local
     CHARACTER*256         :: mess
     INTEGER               :: l,m,n,ii,jj,ipatch,ierr
@@ -1293,7 +1262,10 @@ END MODULE module_quilt_outbuf_ops
     ENDDO
     IF ( .NOT. found ) THEN
       num_entries = num_entries + 1
-
+      IF(num_entries > tabsize)THEN
+         WRITE(mess,*) 'Number of entries in outpatch_table has exceeded tabsize (',tabsize,') in module_quilt_outbuf_ops::store_patch_in_outbuf_pnc'
+         CALL wrf_error_fatal(mess)
+      END IF
       outpatch_table(num_entries)%npatch = 0
 
       outpatch_table(num_entries)%VarName     = TRIM(VarName)
@@ -1306,6 +1278,29 @@ END MODULE module_quilt_outbuf_ops
       outpatch_table(num_entries)%DomainStart = DomainStart
       outpatch_table(num_entries)%DomainEnd   = DomainEnd
       outpatch_table(num_entries)%FieldType   = FieldType
+      ! Allocate the table for the list of patches for this output - it
+      ! will have as many entries as there are compute tasks associated with
+      ! this IO server.
+      IF ( ALLOCATED(outpatch_table(num_entries)%PatchList) ) &
+         DEALLOCATE(outpatch_table(num_entries)%PatchList)
+      ALLOCATE(outpatch_table(num_entries)%PatchList(ntasks), Stat=ierr)
+      IF(ierr /= 0)THEN
+         WRITE(mess,*)'num_entries ',num_entries,' ntasks ',ntasks,' ierr ',ierr
+         CALL wrf_message(mess)
+         WRITE(mess,*)'Allocation for ',ntasks, &
+                      ' patches in store_patch_in_outbuf_pnc() failed.'
+         CALL wrf_error_fatal( mess )
+      ENDIF
+      ! Initialise the list of patches
+      DO ii=1, ntasks, 1
+         outpatch_table(num_entries)%PatchList(ii)%forDeletion = .FALSE.
+         NULLIFY(outpatch_table(num_entries)%PatchList(ii)%rptr)
+         NULLIFY(outpatch_table(num_entries)%PatchList(ii)%iptr)
+         outpatch_table(num_entries)%PatchList(ii)%PatchStart(:) = 0
+         outpatch_table(num_entries)%PatchList(ii)%PatchEnd(:) = 0
+         outpatch_table(num_entries)%PatchList(ii)%PatchExtent(:) = 0
+      END DO 
+
       ii = num_entries
 
       WRITE(mess,*)'Adding field entry no. ',num_entries
diff --git a/wrfv2_fire/frame/module_wrf_error.F b/wrfv2_fire/frame/module_wrf_error.F
index ee0e47d5..e9e9d947 100644
--- a/wrfv2_fire/frame/module_wrf_error.F
+++ b/wrfv2_fire/frame/module_wrf_error.F
@@ -20,6 +20,9 @@ CONTAINS
 END MODULE module_wrf_error
 
 SUBROUTINE wrf_message( str )
+#ifdef ESMFIO
+  USE ESMF
+#endif
   IMPLICIT NONE
   CHARACTER*(*) str
 #if defined( DM_PARALLEL ) && ! defined( STUBMPI) 
@@ -28,23 +31,33 @@ SUBROUTINE wrf_message( str )
   FLUSH(0)
 # endif
 #endif
+#ifdef ESMFIO
+  CALL ESMF_LogWrite(TRIM(str),ESMF_LOGMSG_INFO)
+#endif
   print*, TRIM(str)
 END SUBROUTINE wrf_message
 
 ! intentionally write to stderr only
 SUBROUTINE wrf_message2( str )
+#ifdef ESMFIO
+  USE ESMF
+#endif
   IMPLICIT NONE
   CHARACTER*(*) str
   write(0,*) str
 # ifdef _WIN32
   FLUSH(0)
 # endif
+#ifdef ESMFIO
+  CALL ESMF_LogWrite(TRIM(str),ESMF_LOGMSG_INFO)
+#endif
 END SUBROUTINE wrf_message2
 
 SUBROUTINE wrf_error_fatal3( file_str, line, str )
   USE module_wrf_error
 #ifdef ESMFIO
-  USE ESMF_Mod
+! 5.2.0r  USE ESMF_Mod
+  USE ESMF
 #endif
   IMPLICIT NONE
   CHARACTER*(*) file_str
@@ -71,7 +84,8 @@ SUBROUTINE wrf_error_fatal3( file_str, line, str )
   CALL wrf_message2( '-------------------------------------------' )
 #endif
 #ifdef ESMFIO
-  CALL esmf_finalize(terminationflag=ESMF_ABORT)
+! 5.2.0r  CALL esmf_finalize(terminationflag=ESMF_ABORT)
+  CALL esmf_finalize(endflag=ESMF_END_ABORT)
 #endif
   CALL wrf_abort
 END SUBROUTINE wrf_error_fatal3
diff --git a/wrfv2_fire/inc/version_decl b/wrfv2_fire/inc/version_decl
index 63c8fa23..83700964 100644
--- a/wrfv2_fire/inc/version_decl
+++ b/wrfv2_fire/inc/version_decl
@@ -1 +1 @@
-   CHARACTER (LEN=10) :: release_version = 'V3.3      '
+   CHARACTER (LEN=10) :: release_version = 'V3.3.1    '
diff --git a/wrfv2_fire/main/convert_em.F b/wrfv2_fire/main/convert_em.F
index 666f80f2..c34e92c2 100644
--- a/wrfv2_fire/main/convert_em.F
+++ b/wrfv2_fire/main/convert_em.F
@@ -95,9 +95,9 @@ real::t1,t2
    CALL       wrf_debug ( 100 , 'convert_em: calling init_modules ' )
    CALL init_modules(1)   ! Phase 1 returns after MPI_INIT() (if it is called)
 #ifdef NO_LEAP_CALENDAR
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_NOLEAP, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_NOLEAP, rc=rc )
 #else
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_GREGORIAN, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_GREGORIAN, rc=rc )
 #endif
    CALL init_modules(2)   ! Phase 2 resumes after MPI_INIT() (if it is called)
 
diff --git a/wrfv2_fire/main/ideal.F b/wrfv2_fire/main/ideal.F
index 35347d9c..be8e1b21 100644
--- a/wrfv2_fire/main/ideal.F
+++ b/wrfv2_fire/main/ideal.F
@@ -12,7 +12,6 @@ PROGRAM ideal
 #ifdef WRF_CHEM
    USE module_input_chem_data
    USE module_input_chem_bioemiss
-   USE module_input_chem_emissopt3
 #endif
 
    IMPLICIT NONE
@@ -73,9 +72,9 @@ PROGRAM ideal
 
    CALL init_modules(1)   ! Phase 1 returns after MPI_INIT() (if it is called)
 #ifdef NO_LEAP_CALENDAR
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_NOLEAP, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_NOLEAP, rc=rc )
 #else
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_GREGORIAN, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_GREGORIAN, rc=rc )
 #endif
    CALL init_modules(2)   ! Phase 2 resumes after MPI_INIT() (if it is called)
 
@@ -169,7 +168,7 @@ PROGRAM ideal
               message = 'INITIALIZING CHEMISTRY WITH OLD SIMULATION'
               CALL  wrf_message ( message )
 
-              CALL input_ext_chem_file( grid )
+              CALL med_read_wrf_chem_input ( grid , config_flags)
               IF(grid%emiss_opt == ECPTEC .or. grid%emiss_opt == GOCART_ECPTEC   &
                                          .or. grid%biomass_burn_opt == BIOMASSB) THEN
                  message = 'READING EMISSIONS DATA OPT 3'
diff --git a/wrfv2_fire/main/module_wrf_top.F b/wrfv2_fire/main/module_wrf_top.F
index ce606d19..f6fd7643 100644
--- a/wrfv2_fire/main/module_wrf_top.F
+++ b/wrfv2_fire/main/module_wrf_top.F
@@ -139,9 +139,9 @@ CONTAINS
    IF ( .NOT. PRESENT( no_init1 ) ) THEN
      ! Initialize utilities (time manager, etc.)
 #ifdef NO_LEAP_CALENDAR
-     CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_NOLEAP )
+     CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_NOLEAP )
 #else
-     CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_GREGORIAN )
+     CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_GREGORIAN )
 #endif
    ENDIF
    ! Phase 2 resumes after MPI_INIT() (if it is called)
diff --git a/wrfv2_fire/main/ndown_em.F b/wrfv2_fire/main/ndown_em.F
index 2a643811..df5c748e 100644
--- a/wrfv2_fire/main/ndown_em.F
+++ b/wrfv2_fire/main/ndown_em.F
@@ -174,9 +174,9 @@ real :: cf1_c,cf2_c,cf3_c,cfn_c,cfn1_c
 
    CALL init_modules(1)   ! Phase 1 returns after MPI_INIT() (if it is called)
 #ifdef NO_LEAP_CALENDAR
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_NOLEAP, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_NOLEAP, rc=rc )
 #else
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_GREGORIAN, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_GREGORIAN, rc=rc )
 #endif
    CALL init_modules(2)   ! Phase 2 resumes after MPI_INIT() (if it is called)
 
diff --git a/wrfv2_fire/main/nup_em.F b/wrfv2_fire/main/nup_em.F
index 5190e50a..3a8530db 100644
--- a/wrfv2_fire/main/nup_em.F
+++ b/wrfv2_fire/main/nup_em.F
@@ -212,9 +212,9 @@ integer :: ii
 
    CALL init_modules(1)   ! Phase 1 returns after MPI_INIT() (if it is called)
 #ifdef NO_LEAP_CALENDAR
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_NOLEAP, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_NOLEAP, rc=rc )
 #else
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_GREGORIAN, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_GREGORIAN, rc=rc )
 #endif
    CALL init_modules(2)   ! Phase 2 resumes after MPI_INIT() (if it is called)
 
diff --git a/wrfv2_fire/main/real_em.F b/wrfv2_fire/main/real_em.F
index 5a732dd2..34d554f1 100644
--- a/wrfv2_fire/main/real_em.F
+++ b/wrfv2_fire/main/real_em.F
@@ -13,7 +13,11 @@ PROGRAM real_data
         initial_config, get_config_as_buffer, set_config_as_buffer
    USE module_timing
    USE module_state_description, ONLY : realonly
+#ifdef NO_LEAP_CALENDAR
+   USE module_symbols_util, ONLY: wrfu_cal_noleap
+#else
    USE module_symbols_util, ONLY: wrfu_cal_gregorian
+#endif
    USE module_check_a_mundo
 #ifdef WRF_CHEM
    USE module_input_chem_data
@@ -102,9 +106,9 @@ real::t1,t2
    CALL       wrf_debug ( 100 , 'real_em: calling init_modules ' )
    CALL init_modules(1)   ! Phase 1 returns after MPI_INIT() (if it is called)
 #ifdef NO_LEAP_CALENDAR
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_NOLEAP, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_NOLEAP, rc=rc )
 #else
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_GREGORIAN, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_GREGORIAN, rc=rc )
 #endif
    CALL init_modules(2)   ! Phase 2 resumes after MPI_INIT() (if it is called)
 
diff --git a/wrfv2_fire/main/real_nmm.F b/wrfv2_fire/main/real_nmm.F
index 568e376c..e582c6c7 100644
--- a/wrfv2_fire/main/real_nmm.F
+++ b/wrfv2_fire/main/real_nmm.F
@@ -95,7 +95,7 @@ PROGRAM real_data
 
 !!!!   CALL init_modules
    CALL init_modules(1)   ! Phase 1 returns after MPI_INIT() (if it is called)
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_GREGORIAN, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_GREGORIAN, rc=rc )
    CALL init_modules(2)   ! Phase 2 resumes after MPI_INIT() (if it is called)
 
    !  The configuration switches mostly come from the NAMELIST input.
@@ -1120,7 +1120,8 @@ character *24 :: temp24 , temp24b
         IUNIT_GFS = 900 + LOOP - 1
         READ(IUNIT_GFS,iostat=ioerror) PDB,TB,QB,CWMB,UB,VB
         if(ioerror/=0) then
-           call wrf_error_fatal('Unable to read MAKBND output from unit 900.')
+           write(message,*) 'Unable to read MAKBND output from unit ',IUNIT_GFS
+           call wrf_error_fatal(message)
         endif
 
         ! Now copy the data into the temporary boundary arrays, and
diff --git a/wrfv2_fire/main/tc_em.F b/wrfv2_fire/main/tc_em.F
index 55aa0539..f0ae0b4e 100644
--- a/wrfv2_fire/main/tc_em.F
+++ b/wrfv2_fire/main/tc_em.F
@@ -12,7 +12,11 @@ PROGRAM tc_data
         initial_config, get_config_as_buffer, set_config_as_buffer
    USE module_timing
    USE module_state_description, ONLY : realonly
+#ifdef NO_LEAP_CALENDAR
+   USE module_symbols_util, ONLY: wrfu_cal_noleap
+#else
    USE module_symbols_util, ONLY: wrfu_cal_gregorian
+#endif
    USE module_utility, ONLY : WRFU_finalize
 
    IMPLICIT NONE
@@ -91,9 +95,9 @@ PROGRAM tc_data
    CALL       wrf_debug ( 100 , 'real_em: calling init_modules ' )
    CALL init_modules(1)   ! Phase 1 returns after MPI_INIT() (if it is called)
 #ifdef NO_LEAP_CALENDAR
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_NOLEAP, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_NOLEAP, rc=rc )
 #else
-   CALL WRFU_Initialize( defaultCalendar=WRFU_CAL_GREGORIAN, rc=rc )
+   CALL WRFU_Initialize( defaultCalKind=WRFU_CAL_GREGORIAN, rc=rc )
 #endif
    CALL init_modules(2)   ! Phase 2 resumes after MPI_INIT() (if it is called)
 
@@ -2248,7 +2252,6 @@ END SUBROUTINE mass2_Vstag
 
 !-----------------------------------------------------------------------------------------
 ! Take the derivative of psi in the ns direction.
-    upos = - dpsi/dy
     upos(:,:,:) = -999.
     DO k=1,nz
 
diff --git a/wrfv2_fire/main/wrf_ESMFMod.F b/wrfv2_fire/main/wrf_ESMFMod.F
index 03c2652f..ebf2e4cd 100644
--- a/wrfv2_fire/main/wrf_ESMFMod.F
+++ b/wrfv2_fire/main/wrf_ESMFMod.F
@@ -28,7 +28,7 @@ MODULE module_metadatautils
 !
 !TODO:  Refactor to remove duplication of hard-coded names.  
 !
-   USE ESMF_Mod
+   USE ESMF
 
    IMPLICIT NONE
 
@@ -192,7 +192,7 @@ CONTAINS
    ! ESMF_States into a single ESMF_State.  If times differ, an attempt 
    ! is made to reconcile them.  
    SUBROUTINE GetTimesFromStates( state, startTime, stopTime, couplingInterval )
-   USE ESMF_Mod
+   USE ESMF
      TYPE(ESMF_State),        INTENT(INOUT) :: state
      TYPE(ESMF_Time),         INTENT(INOUT) :: startTime
      TYPE(ESMF_Time),         INTENT(INOUT) :: stopTime
@@ -200,7 +200,7 @@ CONTAINS
      ! locals
      INTEGER :: rc
      INTEGER :: numItems, numStates, i, istate
-     TYPE(ESMF_StateItemType), ALLOCATABLE :: itemTypes(:)
+     TYPE(ESMF_StateItem_Flag), ALLOCATABLE :: itemTypes(:)
      TYPE(ESMF_State) :: tmpState
      CHARACTER (len=ESMF_MAXSTR), ALLOCATABLE :: itemNames(:)
      TYPE(ESMF_Time),         ALLOCATABLE :: startTimes(:)
@@ -223,7 +223,7 @@ CONTAINS
      ! allocate an array to hold the names of all items
      ALLOCATE( itemNames(numItems) )
      ! get the item types and names
-     CALL ESMF_StateGet(state, stateitemtypeList=itemTypes, &
+     CALL ESMF_StateGet(state, itemtypeList=itemTypes, &
                         itemNameList=itemNames, rc=rc)
      IF ( rc /= ESMF_SUCCESS) THEN
        WRITE(str,*) 'ESMF_StateGet itemTypes failed with rc = ', rc
@@ -262,8 +262,8 @@ CONTAINS
        IF ( istate .EQ. 1 ) THEN
         ! this presupposes that 1 of the child states exist and has
         ! valid times in it.  Use that one.
-          CALL write(mess,'WARNING: Only ',TRIM(itemNames(1)), &
-                          ' is valid and has time info in it.  Using that.')
+          WRITE(mess,*)'WARNING: Only ',TRIM(itemNames(1)),&
+                       ' is valid and has time info in it.  Using that.'
           CALL wrf_message(mess) 
           CALL ESMF_StateGet( state, itemName=TRIM(itemNames(1)), &
                               nestedState=tmpState, rc=rc )
@@ -325,21 +325,30 @@ CONTAINS
          stopTime = stopTimes(i)
          couplingInterval = couplingIntervals(i)
        ELSE
-         IF ( startTimes(i) /= startTime ) THEN
-           CALL wrf_message ( 'ReconcileTimes:  inconsistent startTimes. Using first.' )
-           startTimes(i) = startTime
+!jm         IF ( startTimes(i) /= startTime ) THEN
+!jm           CALL wrf_message ( 'ReconcileTimes:  inconsistent startTimes. Using first.' )
+!jm           startTimes(i) = startTime
+!jm         ENDIF
+!jm         IF ( stopTimes(i) /= stopTime ) THEN
+!jm           CALL wrf_message ( 'ReconcileTimes:  inconsistent stopTimes. Using first.' )
+!jm           stopTimes(i) = stopTime
+!jm         ENDIF
+         IF ( startTimes(i) > startTime ) THEN
+           CALL wrf_message ( 'ReconcileTimes:  inconsistent startTimes. Using later.' )
+           startTime = startTimes(i)
          ENDIF
-         IF ( stopTimes(i) /= stopTime ) THEN
-           CALL wrf_message ( 'ReconcileTimes:  inconsistent stopTimes. Using first.' )
-           stopTimes(i) = stopTime
+         IF ( stopTimes(i) < stopTime ) THEN
+           CALL wrf_message ( 'ReconcileTimes:  inconsistent stopTimes. Using earlier.' )
+           stopTime = stopTimes(i)
          ENDIF
          IF ( couplingIntervals(i) /= couplingInterval ) THEN
            CALL wrf_message ( 'ReconcileTimes:  inconsistent couplingIntervals. Using first.' )
            couplingIntervals(i) = couplingInterval
          ENDIF
        ENDIF
-
      ENDDO
+     stopTimes = stopTime
+     startTimes = startTime
 
    END SUBROUTINE ReconcileTimes
 
@@ -484,7 +493,7 @@ MODULE module_wrf_component_top
 ! when WRF is run as an ESMF component.  
 !
 
-   USE ESMF_Mod
+   USE ESMF
    USE module_wrf_top, ONLY : wrf_init, wrf_run, wrf_finalize
    USE module_domain, ONLY : head_grid, get_ijk_from_grid
    USE module_state_description
@@ -659,33 +668,35 @@ CONTAINS
      INTEGER :: ips, ipe, jps, jpe, kps, kpe
      INTEGER :: domdesc
      LOGICAL :: bdy_mask(4)
-     TYPE(ESMF_StateType) :: statetype
      INTEGER :: itemCount, i
+     TYPE(ESMF_StateIntent_Flag) :: stateintent
      CHARACTER (ESMF_MAXSTR) :: statename
      CHARACTER (ESMF_MAXSTR), ALLOCATABLE :: itemNames(:)
-     TYPE(ESMF_StateItemType), ALLOCATABLE :: itemTypes(:)
+     TYPE(ESMF_StateItem_Flag), ALLOCATABLE :: itemTypes(:)
 
      CALL wrf_debug ( 100, 'wrf_component_init2():  begin' )
+
      ! check exportState
      CALL ESMF_StateGet( exportState, itemCount=itemCount, &
-                         statetype=statetype, rc=rc )
+                         stateintent=stateintent, rc=rc )
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal("wrf_component_init2:  ESMF_StateGet(exportState) failed" )
      ENDIF
      WRITE (str,*) 'wrf_component_init2: exportState itemCount = ', itemCount
      CALL wrf_debug ( 100 , TRIM(str) )
-     IF ( statetype /= ESMF_STATE_EXPORT ) THEN
+     IF ( stateintent /= ESMF_STATEINTENT_EXPORT ) THEN
        CALL wrf_error_fatal("wrf_component_init2:  exportState is not an export state" )
      ENDIF
+
      ! check importState
      CALL ESMF_StateGet( importState, itemCount=itemCount, &
-                         statetype=statetype, rc=rc )
+                         stateintent=stateintent, rc=rc )
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal("wrf_component_init2:  ESMF_StateGet(importState) failed" )
      ENDIF
      WRITE (str,*) 'wrf_component_init2: importState itemCount = ', itemCount
      CALL wrf_debug ( 100 , TRIM(str) )
-     IF ( statetype /= ESMF_STATE_IMPORT ) THEN
+     IF ( stateintent /= ESMF_STATEINTENT_IMPORT ) THEN
        CALL wrf_error_fatal("wrf_component_init2:  importState is not an import state" )
      ENDIF
 
@@ -709,11 +720,11 @@ CONTAINS
      WRITE (str,*) 'wrf_component_init2: EXAMINING importState...'
      CALL wrf_debug ( 100 , TRIM(str) )
      CALL ESMF_StateGet( importState, itemCount=itemCount, &
-                         statetype=statetype, name=statename, rc=rc )
+                         stateintent=stateintent, name=statename, rc=rc )
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal("wrf_component_init2:  ESMF_StateGet(importState) failed B" )
      ENDIF
-     IF ( statetype /= ESMF_STATE_IMPORT ) THEN
+     IF ( stateintent /= ESMF_STATEINTENT_IMPORT ) THEN
        CALL wrf_error_fatal("wrf_component_init2:  importState is not an import state" )
      ENDIF
      WRITE (str,*) 'wrf_component_init2: importState <',TRIM(statename), &
@@ -721,7 +732,7 @@ CONTAINS
      CALL wrf_debug ( 100 , TRIM(str) )
      ALLOCATE ( itemNames(itemCount), itemTypes(itemCount) )
      CALL ESMF_StateGet( importState, itemNameList=itemNames, &
-                         stateitemtypeList=itemTypes, rc=rc )
+                         itemtypeList=itemTypes, rc=rc )
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal("wrf_component_init2:  ESMF_StateGet(importState) failed C" )
      ENDIF
@@ -739,11 +750,11 @@ CONTAINS
      WRITE (str,*) 'wrf_component_init2: EXAMINING exportState...'
      CALL wrf_debug ( 100 , TRIM(str) )
      CALL ESMF_StateGet( exportState, itemCount=itemCount, &
-                         statetype=statetype, name=statename, rc=rc )
+                         stateintent=stateintent, name=statename, rc=rc )
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal("wrf_component_init2:  ESMF_StateGet(exportState) failed B" )
      ENDIF
-     IF ( statetype /= ESMF_STATE_EXPORT ) THEN
+     IF ( stateintent /= ESMF_STATEINTENT_EXPORT ) THEN
        CALL wrf_error_fatal("wrf_component_init2:  exportState is not an export state" )
      ENDIF
      WRITE (str,*) 'wrf_component_init2: exportState <',TRIM(statename), &
@@ -751,7 +762,7 @@ CONTAINS
      CALL wrf_debug ( 100 , TRIM(str) )
      ALLOCATE ( itemNames(itemCount), itemTypes(itemCount) )
      CALL ESMF_StateGet( exportState, itemNameList=itemNames, &
-                         stateitemtypeList=itemTypes, rc=rc )
+                         itemtypeList=itemTypes, rc=rc )
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal("wrf_component_init2:  ESMF_StateGet(exportState) failed C" )
      ENDIF
@@ -1038,7 +1049,7 @@ CONTAINS
      CALL model_to_grid_config_rec ( grid%id , model_config_rec , config_flags )
      CALL set_scalar_indices_from_config ( grid%id , idum1 , idum2 )
 
-     stream = 0
+     stream = 0 
      ierr = 0
 
 #include "med_open_esmf_calls.inc"
@@ -1059,7 +1070,7 @@ MODULE module_wrf_setservices
                                        wrf_component_init2, &
                                        wrf_component_run,   &
                                        wrf_component_finalize
-   USE ESMF_Mod
+   USE ESMF
 
    IMPLICIT NONE
 
@@ -1095,23 +1106,23 @@ CONTAINS
 
      rc = ESMF_SUCCESS
      ! Register the callback routines.
-     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_SETINIT, &
-                                     wrf_component_init1, 1, rc)
+     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_INITIALIZE, &
+                                     wrf_component_init1, phase=1, rc=rc)
      IF ( rc /= ESMF_SUCCESS) THEN
         CALL wrf_error_fatal ( 'wrf_register:  ESMF_GridCompSetEntryPoint(wrf_component_init1) failed' )
      ENDIF
-     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_SETINIT, &
-                                     wrf_component_init2, 2, rc)
+     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_INITIALIZE, &
+                                     wrf_component_init2, phase=2, rc=rc)
      IF ( rc /= ESMF_SUCCESS) THEN
         CALL wrf_error_fatal ( 'wrf_register:  ESMF_GridCompSetEntryPoint(wrf_component_init2) failed' )
      ENDIF
-     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_SETRUN, &
-                                     wrf_component_run, ESMF_SINGLEPHASE, rc)
+     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_RUN, &
+                                     wrf_component_run,  rc=rc)
      IF ( rc /= ESMF_SUCCESS) THEN
         CALL wrf_error_fatal ( 'wrf_register:  ESMF_GridCompSetEntryPoint(wrf_component_run) failed' )
      ENDIF
-     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_SETFINAL, &
-                                     wrf_component_finalize, ESMF_SINGLEPHASE, rc)
+     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_FINALIZE, &
+                                     wrf_component_finalize,  rc=rc)
      IF ( rc /= ESMF_SUCCESS) THEN
         CALL wrf_error_fatal ( 'wrf_register:  ESMF_GridCompSetEntryPoint(wrf_component_finalize) failed' )
      ENDIF
diff --git a/wrfv2_fire/main/wrf_SST_ESMF.F b/wrfv2_fire/main/wrf_SST_ESMF.F
index f53a9286..cff9bc36 100644
--- a/wrfv2_fire/main/wrf_SST_ESMF.F
+++ b/wrfv2_fire/main/wrf_SST_ESMF.F
@@ -28,7 +28,10 @@ MODULE module_sst_component_top
 ! routines that are called when SST is run as an ESMF component.  
 !
 
-   USE ESMF_Mod
+! Updated for ESMF 5.2.0r  -- see:
+!  http://www.earthsystemmodeling.org/esmf_releases/public/ESMF_5_2_0r/InterfaceChanges520to520r.pdf
+!   USE ESMF_Mod  
+   USE ESMF
    USE module_esmf_extensions
    USE module_metadatautils, ONLY: AttachTimesToState
 
@@ -219,8 +222,8 @@ CONTAINS
 !     stuffs the file data into the SST exportState.  
 !
 
-     #include 
-     #include 
+#include 
+#include 
 
      ! Local variables
      CHARACTER (LEN=19) :: date_string
@@ -449,8 +452,8 @@ CONTAINS
        ENDDO
      ENDDO LANDMASK_COMPARE
      IF ( landmask_ok ) THEN
-       WRITE(str,*) 'compare_data: LANDMASK compares OK'
-       CALL wrf_debug ( 100 , TRIM(str) )
+       WRITE(str,*) 'TESTING data returned from WRF through ESMF: LANDMASK compares OK'
+       CALL wrf_debug ( 0 , TRIM(str) )
      ELSE
        CALL wrf_error_fatal ( TRIM(str) )
      ENDIF
@@ -470,8 +473,8 @@ CONTAINS
        ENDDO
      ENDDO SST_COMPARE
      IF ( sst_ok ) THEN
-       WRITE(str,*) 'compare_data: SST compares OK'
-       CALL wrf_debug ( 100 , TRIM(str) )
+       WRITE(str,*) 'TESTING data returned from WRF through ESMF: SST compares OK'
+       CALL wrf_debug ( 0 , TRIM(str) )
      ELSE
        CALL wrf_error_fatal ( TRIM(str) )
      ENDIF
@@ -609,7 +612,7 @@ CONTAINS
 !write(0,*)__FILE__,__LINE__,ips,jps,ipe,jpe
      out_sst_field = ESMF_FieldCreate(                 &
                        esmfgrid, tmp_data_out_sst,     &
-                       copyflag=ESMF_DATA_REF,         &
+                       datacopyflag=ESMF_DATACOPY_REFERENCE,         &
                        staggerloc=ESMF_STAGGERLOC_CENTER,          &
                        name=TRIM(datanames(SST_INDX)), &
                        rc=rc )
@@ -646,7 +649,7 @@ CONTAINS
      CALL wrf_debug ( 100, 'sst_component_init2: calling ESMF_FieldCreate(out_landmask_field)' )
      out_landmask_field = ESMF_FieldCreate(                      &
                             esmfgrid, tmp_data_out_landmask,     &
-                            copyflag=ESMF_DATA_REF,              &
+                            datacopyflag=ESMF_DATACOPY_REFERENCE,              &
                             staggerloc=ESMF_STAGGERLOC_CENTER,          &
                             name=TRIM(datanames(LANDMASK_INDX)), &
 !                            lbounds=(/ips,jps/),                 &
@@ -676,7 +679,7 @@ CONTAINS
      CALL wrf_debug ( 100, 'sst_component_init2: calling ESMF_FieldCreate(in_sst_field)' )
      in_sst_field = ESMF_FieldCreate(                 &
                       esmfgrid, tmp_data_in_sst,      &
-                      copyflag=ESMF_DATA_REF,         &
+                      datacopyflag=ESMF_DATACOPY_REFERENCE,         &
                       staggerloc=ESMF_STAGGERLOC_CENTER,          &
                       name=TRIM(datanames(SST_INDX)), &
 !                      lbounds=(/ips,jps/),            &
@@ -706,7 +709,7 @@ CONTAINS
      CALL wrf_debug ( 100, 'sst_component_init2: calling ESMF_FieldCreate(in_landmask_field)' )
      in_landmask_field = ESMF_FieldCreate(                      &
                            esmfgrid, tmp_data_in_landmask,      &
-                           copyflag=ESMF_DATA_REF,              &
+                           datacopyflag=ESMF_DATACOPY_REFERENCE,              &
                            staggerloc=ESMF_STAGGERLOC_CENTER,          &
                            name=TRIM(datanames(LANDMASK_INDX)), &
 !                           lbounds=(/ips,jps/),                 &
@@ -731,20 +734,20 @@ CONTAINS
      ENDIF
 
      ! attach ESMF_Field to importState
-     CALL ESMF_StateAdd( importState, in_sst_field, rc=rc )
+     CALL ESMF_StateAdd( importState, fieldList=(/in_sst_field/), rc=rc )
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal ( 'ESMF_StateAdd(in_sst_field) failed' )
      ENDIF
-     CALL ESMF_StateAdd( importState, in_landmask_field, rc=rc )
+     CALL ESMF_StateAdd( importState, fieldList=(/in_landmask_field/), rc=rc )
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal ( 'ESMF_StateAdd(in_landmask_field) failed' )
      ENDIF
      ! attach ESMF_Field to exportState
-     CALL ESMF_StateAdd( exportState, out_sst_field, rc=rc )
+     CALL ESMF_StateAdd( exportState, fieldList=(/out_sst_field/), rc=rc )
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal ( 'ESMF_StateAdd(out_sst_field) failed' )
      ENDIF
-     CALL ESMF_StateAdd( exportState, out_landmask_field, rc=rc )
+     CALL ESMF_StateAdd( exportState, fieldList=(/out_landmask_field/), rc=rc )
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal ( 'ESMF_StateAdd(out_landmask_field) failed' )
      ENDIF
@@ -933,7 +936,9 @@ MODULE module_sst_setservices
                                        sst_component_run1,   &
                                        sst_component_run2,   &
                                        sst_component_finalize
-   USE ESMF_Mod
+!  Updated for ESMF 5.2.0r 
+!   USE ESMF_Mod
+   USE ESMF
 
    IMPLICIT NONE
 
@@ -970,32 +975,32 @@ CONTAINS
 
      finalrc = ESMF_SUCCESS
      ! Register the callback routines.
-     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_SETINIT, &
-                                     sst_component_init1, 1, rc)
+     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_INITIALIZE, &
+                                     sst_component_init1, phase=1, rc=rc)
      IF ( rc /= ESMF_SUCCESS) THEN
         WRITE(str,*) 'ESMF_GridCompSetEntryPoint(sst_component_init1) failed with rc = ', rc
         CALL wrf_error_fatal ( TRIM(str) )
      ENDIF
-     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_SETINIT, &
-                                     sst_component_init2, 2, rc)
+     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_INITIALIZE, &
+                                     sst_component_init2, phase=2, rc=rc)
      IF ( rc /= ESMF_SUCCESS) THEN
         WRITE(str,*) 'ESMF_GridCompSetEntryPoint(sst_component_init2) failed with rc = ', rc
         CALL wrf_error_fatal ( TRIM(str) )
      ENDIF
-     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_SETRUN, &
-                                     sst_component_run1, 1, rc)
+     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_RUN, &
+                                     sst_component_run1, phase=1, rc=rc)
      IF ( rc /= ESMF_SUCCESS) THEN
         WRITE(str,*) 'ESMF_GridCompSetEntryPoint(sst_component_run1) failed with rc = ', rc
         CALL wrf_error_fatal ( TRIM(str) )
      ENDIF
-     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_SETRUN, &
-                                     sst_component_run2, 2, rc)
+     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_RUN, &
+                                     sst_component_run2, phase=2, rc=rc)
      IF ( rc /= ESMF_SUCCESS) THEN
         WRITE(str,*) 'ESMF_GridCompSetEntryPoint(sst_component_run2) failed with rc = ', rc
         CALL wrf_error_fatal ( TRIM(str) )
      ENDIF
-     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_SETFINAL, &
-                                     sst_component_finalize, ESMF_SINGLEPHASE, rc)
+     call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_FINALIZE, &
+                                     sst_component_finalize, rc=rc)
      IF ( rc /= ESMF_SUCCESS) THEN
         WRITE(str,*) 'ESMF_GridCompSetEntryPoint(sst_component_finalize) failed with rc = ', rc
         CALL wrf_error_fatal ( TRIM(str) )
@@ -1027,7 +1032,9 @@ END MODULE module_sst_setservices
 
 MODULE module_wrfsst_coupler
 
-    USE ESMF_Mod
+! Updated for ESMF 5.2.0r
+!    USE ESMF_Mod
+    USE ESMF
 
     IMPLICIT NONE
     
@@ -1076,18 +1083,18 @@ CONTAINS
 
       ! Register the callback routines.
 
-      call ESMF_CplCompSetEntryPoint(comp, ESMF_SETINIT, WRFSSTCpl_init, &
-                                     ESMF_SINGLEPHASE, rc)
+      call ESMF_CplCompSetEntryPoint(comp, ESMF_METHOD_INITIALIZE, WRFSSTCpl_init, &
+                                     rc=rc)
       IF ( rc /= ESMF_SUCCESS ) THEN
         CALL wrf_error_fatal ( 'ESMF_CplCompSetEntryPoint(WRFSSTCpl_init) failed' )
       ENDIF
-      call ESMF_CplCompSetEntryPoint(comp, ESMF_SETRUN, WRFSSTCpl_run, &
-                                     ESMF_SINGLEPHASE, rc)
+      call ESMF_CplCompSetEntryPoint(comp, ESMF_METHOD_RUN, WRFSSTCpl_run, &
+                                     rc=rc)
       IF ( rc /= ESMF_SUCCESS ) THEN
         CALL wrf_error_fatal ( 'ESMF_CplCompSetEntryPoint(WRFSSTCpl_run) failed' )
       ENDIF
-      call ESMF_CplCompSetEntryPoint(comp, ESMF_SETFINAL, WRFSSTCpl_final, &
-                                     ESMF_SINGLEPHASE, rc)
+      call ESMF_CplCompSetEntryPoint(comp, ESMF_METHOD_FINALIZE, WRFSSTCpl_final, &
+                                     rc=rc)
       IF ( rc /= ESMF_SUCCESS ) THEN
         CALL wrf_error_fatal ( 'ESMF_CplCompSetEntryPoint(WRFSSTCpl_final) failed' )
       ENDIF
@@ -1152,7 +1159,8 @@ CONTAINS
 
 
       ELSE
-        CALL wrf_error_fatal ( 'WRFSSTCpl_init:  invalid importState name' )
+        WRITE(str,*)'WRFSSTCpl_init:  invalid importState name: ',TRIM(importstatename)
+        CALL wrf_error_fatal ( TRIM(str) )
       ENDIF
 
       ! set up field names
@@ -1169,6 +1177,7 @@ CONTAINS
 
 
     SUBROUTINE WRFSSTCpl_run(comp, importState, exportState, clock, rc)
+      USE ESMF
       TYPE(ESMF_CplComp), INTENT(INOUT) :: comp
       TYPE(ESMF_State), INTENT(INOUT) :: importState, exportState
       TYPE(ESMF_Clock), INTENT(INOUT) :: clock
@@ -1189,10 +1198,6 @@ CONTAINS
 ! provided by the ESMF core team.  
 
       ! Local variables
-character*256 :: mename
-character*256 :: melist(100)
-integer :: mecount
-TYPE(ESMF_StateItemType) :: metypelist(100)
       TYPE(ESMF_Field) :: src_field, dst_field
       TYPE(ESMF_Array) :: src_array, dst_array
       TYPE(ESMF_RouteHandle) :: routehandle
@@ -1202,6 +1207,7 @@ TYPE(ESMF_StateItemType) :: metypelist(100)
       CHARACTER(LEN=ESMF_MAXSTR) :: SST_exportStatename, WRF_exportStatename
       INTEGER :: i
       CHARACTER(LEN=256) :: directionString
+      LOGICAL :: neededFlag(1)
 
       WRITE(str,*) 'WRFSSTCpl_run: begin'
       CALL wrf_debug ( 100 , TRIM(str) )
@@ -1232,7 +1238,8 @@ TYPE(ESMF_StateItemType) :: metypelist(100)
         fromWRF = .FALSE.
         directionString = 'SSTtoWRF'
       ELSE
-        CALL wrf_error_fatal ( 'WRFSSTCpl_run:  invalid importState name' )
+        WRITE(str,*)'WRFSSTCpl_run:  invalid importState name: ',TRIM(importstatename)
+        CALL wrf_error_fatal ( TRIM(str) )
       ENDIF
       WRITE(str,*) 'WRFSSTCpl_run: fromWRF = ',fromWRF
       CALL wrf_debug ( 100 , TRIM(str) )
@@ -1253,16 +1260,6 @@ TYPE(ESMF_StateItemType) :: metypelist(100)
                      '> from import state'
         CALL wrf_debug ( 100 , TRIM(str) )
 
-!CALL ESMF_StateGet( importState, name=mename, itemCount=mecount, itemNameList=melist, stateitemtypelist=metypelist, rc=rc )
-!write(0,*)'importState mename ',trim(mename)
-!write(0,*)'importState mecount ',mecount
-!do i = 1,mecount
-!write(0,*)i,trim(melist(i))
-!enddo
-!do i = 1,mecount
-!write(0,*)i,metypelist(i)
-!enddo
-
         CALL ESMF_StateGet( importState, TRIM(datanames(1)), src_field, &
                                  rc=rc )
         IF ( rc /= ESMF_SUCCESS ) THEN
@@ -1277,16 +1274,6 @@ TYPE(ESMF_StateItemType) :: metypelist(100)
                      '> from export state'
         CALL wrf_debug ( 100 , TRIM(str) )
 
-!CALL ESMF_StateGet( exportState, name=mename, itemCount=mecount, itemNameList=melist, stateitemtypelist=metypelist, rc=rc )
-!write(0,*)'Exportstate mename ',trim(mename)
-!write(0,*)'Exportstate mecount ',mecount
-!do i = 1,mecount
-!write(0,*)i,trim(melist(i))
-!enddo
-!do i = 1,mecount
-!write(0,*)i,metypelist(i)
-!enddo
-
         CALL ESMF_StateGet( exportState, TRIM(datanames(1)), dst_field, &
                                  rc=rc )
         IF ( rc /= ESMF_SUCCESS ) THEN
@@ -1335,12 +1322,13 @@ TYPE(ESMF_StateItemType) :: metypelist(100)
           fromSST_rh_ready = .TRUE.
         ENDIF
         DO i=1, datacount
-          WRITE(str,*) 'WRFSSTCpl_run: calling ESMF_StateSetNeeded(importState, ',TRIM(datanames(i)),')'
+          WRITE(str,*) 'WRFSSTCpl_run: calling ESMF_AttributeSet(importState, ',TRIM(datanames(i))//':needed',')'
           CALL wrf_debug ( 100 , TRIM(str) )
-          CALL ESMF_StateSetNeeded( importState, TRIM(datanames(i)), &
-                                    ESMF_NEEDED, rc=rc )
+!5.2.0r          CALL ESMF_StateSetNeeded( importState, TRIM(datanames(i)), &
+!5.2.0r                                    ESMF_NEEDED, rc=rc )
+          CALL ESMF_AttributeSet( importState, name=TRIM(datanames(i))//':needed',value=.true.,rc=rc)
           IF ( rc /= ESMF_SUCCESS ) THEN
-            WRITE(str,*) 'WRFSSTCpl_run:  ESMF_StateSetNeeded(',TRIM(datanames(i)),') failed'
+            WRITE(str,*) 'WRFSSTCpl_run:  ESMF_AttributeSet(',TRIM(datanames(i))//':needed',') failed'
             CALL wrf_error_fatal ( str )
           ENDIF
         ENDDO
@@ -1363,14 +1351,25 @@ TYPE(ESMF_StateItemType) :: metypelist(100)
         WRITE(str,*) 'WRFSSTCpl_run: grabbing field <',TRIM(datanames(i)),'>'
         CALL wrf_debug ( 100 , TRIM(str) )
         ! check isneeded flag here
-        IF ( .NOT. ESMF_StateIsNeeded( importState, TRIM(datanames(i)), rc=rc ) ) THEN 
-          IF ( rc /= ESMF_SUCCESS ) THEN
-            WRITE(str,*) 'WRFSSTCpl_run:  ESMF_StateIsNeeded(',TRIM(datanames(i)),') failed'
-            CALL wrf_error_fatal ( str )
+!5.2.0r        IF ( .NOT. ESMF_StateIsNeeded( importState, TRIM(datanames(i)), rc=rc ) ) THEN 
+!5.2.0r         IF ( rc /= ESMF_SUCCESS ) THEN
+!5.2.0r            WRITE(str,*) 'WRFSSTCpl_run:  ESMF_StateIsNeeded(',TRIM(datanames(i)),') failed'
+!5.2.0r            CALL wrf_error_fatal ( str )
+!5.2.0r          ENDIF
+!5.2.0r          WRITE(str,*) 'WRFSSTCpl_run: skipping field <',TRIM(datanames(i)),'>'
+!5.2.0r          CALL wrf_debug ( 100 , TRIM(str) )
+!5.2.0r          CYCLE
+!5.2.0r        ENDIF
+        CALL ESMF_AttributeGet(importState,name=TRIM(datanames(i))//':needed',valueList=neededFlag,rc=rc)
+        IF ( rc == ESMF_SUCCESS ) THEN
+          IF ( .NOT. neededFlag(1) ) THEN
+            WRITE(str,*) 'WRFSSTCpl_run: skipping field <',TRIM(datanames(i)),'>'
+            CALL wrf_debug ( 100 , TRIM(str) )
+            CYCLE
           ENDIF
-          WRITE(str,*) 'WRFSSTCpl_run: skipping field <',TRIM(datanames(i)),'>'
-          CALL wrf_debug ( 100 , TRIM(str) )
-          CYCLE
+        ELSE
+          WRITE(str,*) 'WRFSSTCpl_run:  ESMF_AttributeGet(',TRIM(datanames(i))//':needed',') failed'
+          CALL wrf_error_fatal ( str )
         ENDIF
 
         WRITE(str,*) 'WRFSSTCpl_run: processing field <',TRIM(datanames(i)),'>'
@@ -1563,7 +1562,9 @@ PROGRAM wrf_SST_ESMF
    ! WRF-SST coupler registration routine
    USE module_wrfsst_coupler, ONLY: WRFSSTCpl_register
    ! ESMF module, defines all ESMF data types and procedures
-   USE ESMF_Mod
+! Updated for ESMF 5.2.0r
+!   USE ESMF_Mod
+   USE ESMF
    ! Not-yet-implemented ESMF features
    USE module_esmf_extensions
    ! Component-independent utilities
@@ -1612,9 +1613,9 @@ integer(ESMF_KIND_I4) :: timevals(6)
    ! Initialize ESMF, get the default Global VM, and set
    ! the default calendar to be Gregorian.
 #ifdef NO_LEAP_CALENDAR
-   CALL ESMF_Initialize( vm=vm, defaultCalendar=ESMF_CAL_NOLEAP, defaultlogtype=ESMF_LOG_MULTI,rc=rc )
+   CALL ESMF_Initialize( vm=vm, defaultCalKind=ESMF_CALKIND_NOLEAP, logkindflag=ESMF_LOGKIND_MULTI,rc=rc )
 #else
-   CALL ESMF_Initialize( vm=vm, defaultCalendar=ESMF_CAL_GREGORIAN, defaultlogtype=ESMF_LOG_MULTI,rc=rc )
+   CALL ESMF_Initialize( vm=vm, defaultCalKind=ESMF_CALKIND_GREGORIAN, logkindflag=ESMF_LOGKIND_MULTI,rc=rc )
 #endif
    IF ( rc /= ESMF_SUCCESS ) THEN
      PRINT *, 'wrf_SST_ESMF:  ESMF_Initialize failed'
@@ -1642,39 +1643,39 @@ integer(ESMF_KIND_I4) :: timevals(6)
    ENDIF
 
    ! Create empty import and export states for WRF
-   importStateWRF = ESMF_StateCreate(stateName="WRF Import State", statetype=ESMF_STATE_IMPORT, rc=rc)
+   importStateWRF = ESMF_StateCreate(name="WRF Import State", stateintent=ESMF_STATEINTENT_IMPORT, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      PRINT *, 'wrf_SST_ESMF:  ESMF_StateCreate(WRF Import State) failed'
    ENDIF
-   exportStateWRF = ESMF_StateCreate(stateName="WRF Export State", statetype=ESMF_STATE_EXPORT, rc=rc)
+   exportStateWRF = ESMF_StateCreate(name="WRF Export State", stateintent=ESMF_STATEINTENT_EXPORT, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      PRINT *, 'wrf_SST_ESMF:  ESMF_StateCreate(WRF Export State) failed'
    ENDIF
 
    ! Create empty import and export states for SST
-   importStateSST = ESMF_StateCreate(stateName="SST Import State", statetype=ESMF_STATE_IMPORT, rc=rc)
+   importStateSST = ESMF_StateCreate(name="SST Import State", stateintent=ESMF_STATEINTENT_IMPORT, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      PRINT *, 'wrf_SST_ESMF:  ESMF_StateCreate(SST Import State) failed'
    ENDIF
-   exportStateSST = ESMF_StateCreate(stateName="SST Export State", statetype=ESMF_STATE_EXPORT, rc=rc)
+   exportStateSST = ESMF_StateCreate(name="SST Export State", stateintent=ESMF_STATEINTENT_EXPORT, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      PRINT *, 'wrf_SST_ESMF:  ESMF_StateCreate(SST Export State) failed'
    ENDIF
 
    ! Register the WRF Gridded Component
-   CALL ESMF_GridCompSetServices(compGriddedWRF, WRF_register, rc)
+   CALL ESMF_GridCompSetServices(compGriddedWRF, WRF_register, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      PRINT *, 'wrf_SST_ESMF:  ESMF_GridCompSetServices(compGriddedWRF) failed'
    ENDIF
 
    ! Register the SST Gridded Component
-   CALL ESMF_GridCompSetServices(compGriddedSST, SST_register, rc)
+   CALL ESMF_GridCompSetServices(compGriddedSST, SST_register, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      PRINT *, 'wrf_SST_ESMF:  ESMF_GridCompSetServices(compGriddedSST) failed'
    ENDIF
 
    ! Register the WRF-SST Coupler Component
-   CALL ESMF_CplCompSetServices(compCplWRFSST, WRFSSTCpl_register, rc)
+   CALL ESMF_CplCompSetServices(compCplWRFSST, WRFSSTCpl_register, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      PRINT *, 'wrf_SST_ESMF:  ESMF_CplCompSetServices failed'
    ENDIF
@@ -1710,8 +1711,8 @@ integer(ESMF_KIND_I4) :: timevals(6)
    ! Phase 1 init returns WRF time and decomposition information as
    ! exportState metadata.
    PRINT *, 'DEBUG wrf_SST_ESMF:  calling phase-1 WRF init (wrf_component_init1)'
-   CALL ESMF_GridCompInitialize(compGriddedWRF, importStateWRF, &
-                                exportStateWRF, driverClock, phase=1, rc=rc)
+   CALL ESMF_GridCompInitialize(compGriddedWRF, importstate=importStateWRF, &
+                                exportstate=exportStateWRF, clock=driverClock, phase=1, rc=rc)
 thecount = size(timevals)
 call esmf_attributeget(exportstatewrf,'ComponentCouplingInterval',timevals,itemcount=thecount,rc=rc)
 !write(0,*) 'exportStateWRF year ',timevals(1),__LINE__
@@ -1729,8 +1730,8 @@ call esmf_attributeget(exportstatewrf,'ComponentCouplingInterval',timevals,itemc
    ! Phase 1 init returns SST time information as
    ! exportState metadata.
    PRINT *, 'DEBUG wrf_SST_ESMF:  calling phase-1 SST init (sst_component_init1)'
-   CALL ESMF_GridCompInitialize(compGriddedSST, importStateSST, &
-                                exportStateSST, driverClock, phase=1, rc=rc)
+   CALL ESMF_GridCompInitialize(compGriddedSST, importstate=importStateSST, &
+                                exportstate=exportStateSST, clock=driverClock, phase=1, rc=rc)
 thecount = size(timevals)
 call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemcount=thecount,rc=rc)
 !write(0,*) 'exportStateSST year ',timevals(1),__LINE__
@@ -1753,13 +1754,9 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_StateCreate(tmpState) failed' )
    ENDIF
-   CALL ESMF_StateAdd( tmpState, exportStateWRF, rc )
-   IF ( rc /= ESMF_SUCCESS ) THEN
-     CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_StateAdd(exportStateWRF) failed' )
-   ENDIF
-   CALL ESMF_StateAdd( tmpState, exportStateSST, rc )
+   CALL ESMF_StateAdd( tmpState, nestedStateList=(/exportStateWRF,exportStateSST/), rc=rc )
    IF ( rc /= ESMF_SUCCESS ) THEN
-     CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_StateAdd(exportStateSST) failed' )
+     CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_StateAdd(exportStateWRF,exportStateSST) failed' )
    ENDIF
    CALL GetTimesFromStates( tmpState, startTime, stopTime, couplingInterval )
    CALL ESMF_TimeIntervalGet( couplingInterval, TimeString=couplingIntervalString, &
@@ -1768,12 +1765,12 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_TimeIntervalGet failed' )
    ENDIF
    CALL wrf_debug( 100, 'wrf_SST_ESMF:  couplingInterval = '//TRIM(couplingIntervalString) )
-   CALL ESMF_StateDestroy( tmpState, rc )
+   CALL ESMF_StateDestroy( tmpState, rc=rc )
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_StateDestroy(tmpState) failed' )
    ENDIF
    ! update driver clock
-   CALL ESMF_ClockDestroy(driverClock, rc)
+   CALL ESMF_ClockDestroy(driverClock, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_ClockDestroy failed' )
    ENDIF
@@ -1789,15 +1786,15 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
 
    ! initialize WRF-SST Coupler
    PRINT *, 'DEBUG wrf_SST_ESMF:  calling phase-1 CPL init (WRFSSTCpl_init)'
-   CALL ESMF_CplCompInitialize(compCplWRFSST, exportStateWRF, &
-                               importStateSST, driverClock, rc=rc)
+   CALL ESMF_CplCompInitialize(compCplWRFSST, importstate=exportStateWRF, &
+                               exportstate=importStateSST, clock=driverClock, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_CplCompInitialize(WRF -> SST) failed' )
    ENDIF
 
 ! TBH:  this bit is not needed, but would be in general
-!   CALL ESMF_CplCompInitialize(compCplWRFSST, exportStateSST, &
-!                               importStateWRF, driverClock, rc=rc)
+!   CALL ESMF_CplCompInitialize(compCplWRFSST, importstate=exportStateSST, &
+!                               exportstate=importStateWRF, clock=driverClock, rc=rc)
 !   IF ( rc /= ESMF_SUCCESS ) THEN
 !     CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_CplCompInitialize(SST -> WRF) failed' )
 !   ENDIF
@@ -1805,8 +1802,8 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
    ! initialize SST, phase 2
    WRITE(str,'(A)') 'PROGRAM wrf_SST_ESMF: Calling phase-2 init for SST (sst_component_init2)'
    CALL wrf_debug ( 100 , TRIM(str) )
-   CALL ESMF_GridCompInitialize(compGriddedSST, importStateSST, &
-                                exportStateSST, driverClock, phase=2, rc=rc)
+   CALL ESMF_GridCompInitialize(compGriddedSST, importstate=importStateSST, &
+                                exportstate=exportStateSST, clock=driverClock, phase=2, rc=rc)
    WRITE(str,'(A)') 'PROGRAM wrf_SST_ESMF: back from phase-2 init for SST'
    CALL wrf_debug ( 100 , TRIM(str) )
    IF ( rc /= ESMF_SUCCESS ) THEN
@@ -1817,8 +1814,8 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
    ! Phase 2 init sets up WRF importState and exportState.
    WRITE(str,'(A)') 'PROGRAM wrf_SST_ESMF: Calling phase-2 init for WRF (wrf_component_init2)'
    CALL wrf_debug ( 100 , TRIM(str) )
-   CALL ESMF_GridCompInitialize(compGriddedWRF, importStateWRF, &
-                                exportStateWRF, driverClock, phase=2, rc=rc)
+   CALL ESMF_GridCompInitialize(compGriddedWRF, importstate=importStateWRF, &
+                                exportstate=exportStateWRF, clock=driverClock, phase=2, rc=rc)
    WRITE(str,'(A)') 'PROGRAM wrf_SST_ESMF: back from phase-2 init for WRF'
    CALL wrf_debug ( 100 , TRIM(str) )
    IF ( rc /= ESMF_SUCCESS ) THEN
@@ -1830,7 +1827,7 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
    ! Run...
    ! main time-stepping loop
    timestepdebug = 0
-   DO WHILE ( .NOT. ESMF_ClockIsStopTime(driverClock, rc) )
+   DO WHILE ( .NOT. ESMF_ClockIsStopTime(driverClock, rc=rc) )
 
      timestepdebug = timestepdebug + 1
      WRITE(str,'(A,I8)') 'PROGRAM wrf_SST_ESMF: Top of time-stepping loop, timestepdebug = ',timestepdebug
@@ -1841,8 +1838,8 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
      ! Run SST phase 1
      WRITE(str,'(A)') 'PROGRAM wrf_SST_ESMF: Calling phase-1 run for SST (sst_component_run1)'
      CALL wrf_debug ( 100 , TRIM(str) )
-     CALL ESMF_GridCompRun(compGriddedSST, importStateSST, exportStateSST, &
-                           driverClock, phase=1, rc=rc)
+     CALL ESMF_GridCompRun(compGriddedSST, importstate=importStateSST, exportstate=exportStateSST, &
+                           clock=driverClock, phase=1, rc=rc)
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_GridCompRun(SST phase 1) failed' )
      ENDIF
@@ -1852,8 +1849,8 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
      ! couple SST export -> WRF import
      WRITE(str,'(A)') 'PROGRAM wrf_SST_ESMF: Calling run for CPL SST->WRF (WRFSSTCpl_run)'
      CALL wrf_debug ( 100 , TRIM(str) )
-     CALL ESMF_CplCompRun(compCplWRFSST, exportStateSST, &
-                          importStateWRF, driverClock, rc=rc)
+     CALL ESMF_CplCompRun(compCplWRFSST, importstate=exportStateSST, &
+                          exportstate=importStateWRF, clock=driverClock, rc=rc)
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_CplCompRun(SST -> WRF) failed' )
      ENDIF
@@ -1863,8 +1860,8 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
      ! Run WRF
      WRITE(str,'(A)') 'PROGRAM wrf_SST_ESMF: Calling run for WRF (wrf_component_run)'
      CALL wrf_debug ( 100 , TRIM(str) )
-     CALL ESMF_GridCompRun(compGriddedWRF, importStateWRF, exportStateWRF, &
-                           driverClock, rc=rc)
+     CALL ESMF_GridCompRun(compGriddedWRF, importstate=importStateWRF, exportstate=exportStateWRF, &
+                           clock=driverClock, rc=rc)
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_GridCompRun(WRF) failed' )
      ENDIF
@@ -1874,8 +1871,8 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
      ! couple WRF export -> SST import
      WRITE(str,'(A)') 'PROGRAM wrf_SST_ESMF: Calling run for CPL WRF->SST (WRFSSTCpl_run)'
      CALL wrf_debug ( 100 , TRIM(str) )
-     CALL ESMF_CplCompRun(compCplWRFSST, exportStateWRF, &
-                          importStateSST, driverClock, rc=rc)
+     CALL ESMF_CplCompRun(compCplWRFSST, importstate=exportStateWRF, &
+                          exportstate=importStateSST, clock=driverClock, rc=rc)
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_CplCompRun(WRF -> SST) failed' )
      ENDIF
@@ -1885,8 +1882,8 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
      ! Run SST phase 2
      WRITE(str,'(A)') 'PROGRAM wrf_SST_ESMF: Calling phase-2 run for SST (sst_component_run2)'
      CALL wrf_debug ( 100 , TRIM(str) )
-     CALL ESMF_GridCompRun(compGriddedSST, importStateSST, exportStateSST, &
-                           driverClock, phase=2, rc=rc)
+     CALL ESMF_GridCompRun(compGriddedSST, importstate=importStateSST, exportstate=exportStateSST, &
+                           clock=driverClock, phase=2, rc=rc)
      IF ( rc /= ESMF_SUCCESS ) THEN
        CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_GridCompRun(SST phase 2) failed' )
      ENDIF
@@ -1912,50 +1909,50 @@ call esmf_attributeget(exportstatesst,'ComponentCouplingInterval',timevals,itemc
    CALL wrf_debug ( 100 , TRIM(str) )
 
    ! clean up SST
-   CALL ESMF_GridCompFinalize(compGriddedSST, importStateSST, exportStateSST, &
-                              driverClock, rc=rc)
+   CALL ESMF_GridCompFinalize(compGriddedSST, importstate=importStateSST, exportstate=exportStateSST, &
+                              clock=driverClock, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_GridCompFinalize(compGriddedSST) failed' )
    ENDIF
  
    ! clean up compCplWRFSST
-   CALL ESMF_CplCompFinalize( compCplWRFSST, exportStateWRF, importStateSST, &
-                              driverClock, rc=rc)
+   CALL ESMF_CplCompFinalize( compCplWRFSST, importstate=exportStateWRF, exportstate=importStateSST, &
+                              clock=driverClock, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_CplCompFinalize(compCplWRFSST) failed' )
    ENDIF
  
    ! clean up WRF
    ! must do this AFTER clean up of SST since SST uses WRF IOAPI
-   CALL ESMF_GridCompFinalize(compGriddedWRF, importStateWRF, exportStateWRF, &
-                              driverClock, rc=rc)
+   CALL ESMF_GridCompFinalize(compGriddedWRF, importstate=importStateWRF, exportstate=exportStateWRF, &
+                              clock=driverClock, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_GridCompFinalize(compGriddedWRF) failed' )
    ENDIF
  
    ! Clean up
 
-   CALL ESMF_GridCompDestroy(compGriddedWRF, rc)
+   CALL ESMF_GridCompDestroy(compGriddedWRF, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_GridCompDestroy(compGriddedWRF) failed' )
    ENDIF
-   CALL ESMF_StateDestroy(importStateWRF, rc)
+   CALL ESMF_StateDestroy(importStateWRF, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_StateDestroy(importStateWRF) failed' )
    ENDIF
-   CALL ESMF_StateDestroy(exportStateWRF, rc)
+   CALL ESMF_StateDestroy(exportStateWRF, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_StateDestroy(exportStateWRF) failed' )
    ENDIF
-   CALL ESMF_StateDestroy(importStateSST, rc)
+   CALL ESMF_StateDestroy(importStateSST, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_StateDestroy(importStateSST) failed' )
    ENDIF
-   CALL ESMF_StateDestroy(exportStateSST, rc)
+   CALL ESMF_StateDestroy(exportStateSST, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_StateDestroy(exportStateSST) failed' )
    ENDIF
-   CALL ESMF_ClockDestroy(driverClock, rc)
+   CALL ESMF_ClockDestroy(driverClock, rc=rc)
    IF ( rc /= ESMF_SUCCESS ) THEN
      CALL wrf_error_fatal ( 'wrf_SST_ESMF:  ESMF_ClockDestroy(driverClock) failed' )
    ENDIF
diff --git a/wrfv2_fire/phys/Makefile b/wrfv2_fire/phys/Makefile
index fb46a9fa..501af06b 100644
--- a/wrfv2_fire/phys/Makefile
+++ b/wrfv2_fire/phys/Makefile
@@ -45,6 +45,7 @@ MODULES = \
 	module_cu_gd.o \
 	module_cu_nsas.o \
 	module_cu_sas.o \
+	module_cu_osas.o \
 	module_mp_kessler.o \
 	module_mp_lin.o  \
 	module_mp_sbu_ylin.o  \
@@ -278,6 +279,10 @@ module_cu_sas.o: module_gfs_machine.o \
 		 module_gfs_funcphys.o \
 		 module_gfs_physcons.o
 
+module_cu_osas.o: module_gfs_machine.o \
+		 module_gfs_funcphys.o \
+		 module_gfs_physcons.o
+
 module_cu_tiedtke.o:module_gfs_machine.o \
 		module_gfs_funcphys.o \
 		module_gfs_physcons.o
@@ -388,6 +393,7 @@ module_physics_init.o : \
 		module_cu_gd.o			\
 		module_cu_nsas.o		\
 		module_cu_sas.o			\
+		module_cu_osas.o		\
 		module_cu_camzm_driver.o        \
 		module_cu_camuwshcu.o		\
 		module_mp_sbu_ylin.o		\
@@ -445,6 +451,7 @@ module_cumulus_driver.o: \
 		module_cu_gd.o \
 		module_cu_nsas.o \
 		module_cu_sas.o \
+		module_cu_osas.o \
 		module_cu_camzm_driver.o \
 		module_cu_tiedtke.o \
 		../frame/module_state_description.o \
diff --git a/wrfv2_fire/phys/module_bl_acm.F b/wrfv2_fire/phys/module_bl_acm.F
index a48c3c13..d3b9ed48 100755
--- a/wrfv2_fire/phys/module_bl_acm.F
+++ b/wrfv2_fire/phys/module_bl_acm.F
@@ -266,7 +266,7 @@ CONTAINS
 !... Integer
       INTEGER :: KL, jtf, ktf, itf, KMIX
 !...
-        character*256 :: message
+        character*512 :: message
 !-----initialize vertical tendencies and
 !
       do i = its,ite
diff --git a/wrfv2_fire/phys/module_bl_ysu.F b/wrfv2_fire/phys/module_bl_ysu.F
index 8027b07e..cbce0de8 100644
--- a/wrfv2_fire/phys/module_bl_ysu.F
+++ b/wrfv2_fire/phys/module_bl_ysu.F
@@ -679,7 +679,8 @@ contains
        hgamt(i) = min(gamfac*hfx(i)/cp,gamcrt)
        hgamq(i) = min(gamfac*qfx(i),gamcrq)
        vpert = (hgamt(i)+ep1*thx(i,1)*hgamq(i))/bfac*afac
-       thermal(i) = thermal(i)+max(vpert,0.)
+! thermal perturbation limited in surface layer (from H. Shin, May 2011)
+       thermal(i) = thermal(i)+max(vpert,0.)*min(za(i,1)/(sfcfrac*hpbl(i)),1.0)
        hgamt(i) = max(hgamt(i),0.0)
        hgamq(i) = max(hgamq(i),0.0)
        brint    = -15.9*ust(i)*ust(i)/wspd(i)*wstar3(i)/(wscale(i)**4.)
diff --git a/wrfv2_fire/phys/module_cu_bmj.F b/wrfv2_fire/phys/module_cu_bmj.F
index 9fdd7d4f..e9f27312 100644
--- a/wrfv2_fire/phys/module_cu_bmj.F
+++ b/wrfv2_fire/phys/module_cu_bmj.F
@@ -79,6 +79,7 @@ CONTAINS
      &                 ,ITS,ITE,JTS,JTE,KTS,KTE                         &
      &                 ,DT,ITIMESTEP,STEPCU                             &
      &                 ,CUDT, CURR_SECS, ADAPT_STEP_FLAG                &
+     &                 ,CUDTACTTIME                                     & 
      &                 ,RAINCV,PRATEC,CUTOP,CUBOT,KPBL                  &
      &                 ,TH,T,QV                                         &
      &                 ,PINT,PMID,PI,RHO,DZ8W                           &
@@ -121,7 +122,8 @@ CONTAINS
 ! Adaptive time-step variables
       REAL,  INTENT(IN   ) :: CUDT
       REAL,  INTENT(IN   ) :: CURR_SECS
-      LOGICAL,INTENT(IN   ) :: ADAPT_STEP_FLAG
+      LOGICAL,OPTIONAL,INTENT(IN   ) :: ADAPT_STEP_FLAG
+      REAL,  INTENT (INOUT) :: CUDTACTTIME       
 !
 !-----------------------------------------------------------------------
 !***
@@ -136,7 +138,7 @@ CONTAINS
 !
       INTEGER :: I,J,K,KFLIP,LMH
 
-      LOGICAL :: run_param
+      LOGICAL :: run_param , doing_adapt_dt , decided
 !     
 !***  Begin debugging convection
       REAL :: DELQ,DELT,PLYR
@@ -154,22 +156,67 @@ CONTAINS
 !
 !***  CHECK TO SEE IF THIS IS A CONVECTION TIMESTEP
 !                                                                        
-      if (adapt_step_flag) then
-         if ( (ITIMESTEP .eq. 0) .or. (cudt .eq. 0) .or. &
-         ( CURR_SECS + dt >= ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then
-         run_param = .TRUE.
-      else
-         run_param = .FALSE.
-      endif
-      
-      else
-         if (MOD(ITIMESTEP,STEPCU) .EQ. 0 .or. ITIMESTEP .eq. 0) then
-            run_param = .TRUE.
-         else
-            run_param = .FALSE.
-         endif
-      endif
-      
+
+!  Initialization for adaptive time step.
+
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+         IF ( cudtacttime .EQ. 0. ) THEN
+            cudtacttime = curr_secs + cudt*60.
+         END IF
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.
+!                ITIMESTEP=1
+!    Test 2:  If the user asked for the cumulus to be run every time step, then yes.
+!                CUDT=0 or STEPCU=1
+!    Test 3:  If not adaptive dt, and this is on the requested cumulus frequency, then yes.
+!                MOD(ITIMESTEP,STEPCU)=0
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.
+!                CURR_SECS >= CUDTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+!  If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
+!  cumulus run.
+
+   decided = .FALSE.
+   run_param = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( itimestep .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(itimestep,stepcu) .EQ. 0 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. cudtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+      cudtacttime = curr_secs + cudt*60
+   END IF
+
 !-----------------------------------------------------------------------
 !                                                                      
 !***  COMPUTE CONVECTION EVERY STEPCU*DT/60.0 MINUTES
diff --git a/wrfv2_fire/phys/module_cu_camzm_driver.F b/wrfv2_fire/phys/module_cu_camzm_driver.F
index a829f6d2..bf582904 100644
--- a/wrfv2_fire/phys/module_cu_camzm_driver.F
+++ b/wrfv2_fire/phys/module_cu_camzm_driver.F
@@ -25,6 +25,7 @@ SUBROUTINE camzm_driver(                                      &
              ,u_phy, v_phy, hfx, qfx, cldfra                  &
              ,tpert_camuwpbl                                  &
              ,dx, dt, stepcu, cudt, curr_secs, adapt_step_flag&
+             ,cudtacttime                                     & 
              ,cape_out, mu_out, md_out, zmdt, zmdq            &
              ,rliq_out, dlf_out                               &
              ,pconvb, pconvt, cubot, cutop, raincv, pratec    &
@@ -144,10 +145,13 @@ SUBROUTINE camzm_driver(                                      &
                                  dt, & !domain time step (s)
                                  dx    !grid spacing (m)
 
+  REAL, INTENT (INOUT) :: &
+                        cudtacttime    !for adaptive time stepping, next to to run scheme (s)   
+
   INTEGER, DIMENSION( ims:ime, jms:jme), INTENT(IN) :: &
                                kpbl    !index of PBL level
 
-  LOGICAL, INTENT(IN) :: &
+  LOGICAL, INTENT(IN), OPTIONAL :: &
                     adapt_step_flag    !using adaptive time steps?
 
 ! Local variables...
@@ -242,25 +246,70 @@ SUBROUTINE camzm_driver(                                      &
   INTEGER :: ncol          !number of atmospheric columns in chunk
   LOGICAL, DIMENSION(3) :: l_qt    !logical switches for constituent tendency presence
   LOGICAL, DIMENSION(2) :: l_windt !logical switches for wind tendency presence
-  LOGICAL :: run_param     !flag for handling alternate cumulus call freq.
+  LOGICAL :: run_param , & !flag for handling alternate cumulus call freq.
+             doing_adapt_dt , decided
 !
 ! Check to see if this is a convection timestep...
 !
-  if (adapt_step_flag) then
-     if ( (itimestep==0) .or. (cudt<=0) .or. &
-          ( curr_secs+dt >= ( int(curr_secs/( cudt*60 )) + 1 )*cudt*60 ) ) then
-        run_param = .TRUE.
-     else
-        run_param = .FALSE.
-     endif
 
-  else
-     if (mod(itimestep,stepcu)==0 .or. itimestep==0) then
-        run_param = .TRUE.
-     else
-        run_param = .FALSE.
-     endif
-  endif
+!  Initialization for adaptive time step.
+
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+         IF ( cudtacttime .EQ. 0. ) THEN
+            cudtacttime = curr_secs + cudt*60.
+         END IF
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.
+!                ITIMESTEP=1
+!    Test 2:  If the user asked for the cumulus to be run every time step, then yes.
+!                CUDT=0 or STEPCU=1
+!    Test 3:  If not adaptive dt, and this is on the requested cumulus frequency, then yes.
+!                MOD(ITIMESTEP,STEPCU)=0
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.
+!                CURR_SECS >= CUDTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+!  If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
+!  cumulus run.
+
+   decided = .FALSE.
+   run_param = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( itimestep .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(itimestep,stepcu) .EQ. 0 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. cudtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+      cudtacttime = curr_secs + cudt*60
+   END IF
 
   !Leave the subroutine if it is not yet time to call the cumulus param
   if( .not. run_param ) return
diff --git a/wrfv2_fire/phys/module_cu_g3.F b/wrfv2_fire/phys/module_cu_g3.F
index a3f8a5f6..3277a895 100644
--- a/wrfv2_fire/phys/module_cu_g3.F
+++ b/wrfv2_fire/phys/module_cu_g3.F
@@ -4361,7 +4361,7 @@ CONTAINS
 !------- LIQUID WATER CONTENT IN cloud after rainout
 !
         clw_all(i,k)=QC(I,K)-QRCH
-        QRC(I,K)=(QC(I,K)-QRCH)/(1.+C0*DZ)
+        QRC(I,K)=(QC(I,K)-QRCH)/(1.+C0*DZ*zu(i,k))
         if(qrc(i,k).lt.0.)then
           qrc(i,k)=0.
         endif
diff --git a/wrfv2_fire/phys/module_cu_gd.F b/wrfv2_fire/phys/module_cu_gd.F
index fcd0422a..b87af250 100755
--- a/wrfv2_fire/phys/module_cu_gd.F
+++ b/wrfv2_fire/phys/module_cu_gd.F
@@ -269,10 +269,12 @@ CONTAINS
       enddo
       enddo
       DO I = its,itf
-         umean(i)=umean(i)/pmean(i)
-         vmean(i)=vmean(i)/pmean(i)
-         direction(i)=(atan2(umean(i),vmean(i))+3.1415926)*57.29578
-         if(direction(i).gt.360.)direction(i)=direction(i)-360.
+         if(pmean(i).gt.0)then
+            umean(i)=umean(i)/pmean(i)
+            vmean(i)=vmean(i)/pmean(i)
+            direction(i)=(atan2(umean(i),vmean(i))+3.1415926)*57.29578
+            if(direction(i).gt.360.)direction(i)=direction(i)-360.
+         endif
       ENDDO
       DO K=kts,ktf-1
       DO I = its,itf
@@ -4026,7 +4028,7 @@ CONTAINS
 !------- LIQUID WATER CONTENT IN cloud after rainout
 !
         clw_all(i,k)=QC(I,K)-QRCH
-        QRC(I,K)=(QC(I,K)-QRCH)/(1.+C0*DZ)
+        QRC(I,K)=(QC(I,K)-QRCH)/(1.+C0*DZ*zu(i,k))
         if(qrc(i,k).lt.0.)then
           qrc(i,k)=0.
         endif
diff --git a/wrfv2_fire/phys/module_cu_kf.F b/wrfv2_fire/phys/module_cu_kf.F
index c7b2952f..59a6c708 100644
--- a/wrfv2_fire/phys/module_cu_kf.F
+++ b/wrfv2_fire/phys/module_cu_kf.F
@@ -15,6 +15,7 @@ CONTAINS
               ,ims,ime, jms,jme, kms,kme                     &
               ,its,ite, jts,jte, kts,kte                     &
               ,DT,KTAU,DX,CUDT,CURR_SECS,ADAPT_STEP_FLAG     &
+              ,CUDTACTTIME                                   & 
               ,rho                                           &
               ,RAINCV,PRATEC,NCA                             &
               ,U,V,TH,T,W,QV,dz8w,Pcps,pi                    &
@@ -59,7 +60,8 @@ CONTAINS
    REAL,  INTENT(IN   ) :: DT, DX
    REAL,  INTENT(IN   ) :: CUDT
    REAL,  INTENT(IN   ) :: CURR_SECS
-   LOGICAL,INTENT(IN  ) :: ADAPT_STEP_FLAG
+   LOGICAL,OPTIONAL, INTENT(IN  ) :: ADAPT_STEP_FLAG
+   REAL,  INTENT (INOUT) :: CUDTACTTIME       
 
    REAL, DIMENSION( ims:ime , jms:jme ),                     &
           INTENT(INOUT) ::                                   &
@@ -133,7 +135,7 @@ CONTAINS
 ! adjustable time step changes
    REAL    :: lastdt = -1.0
    REAL    :: W0AVGfctr, W0fctr, W0den
-   LOGICAL :: run_param
+   LOGICAL :: run_param , doing_adapt_dt , decided
 
 !----------------------------------------------------------------------
 
@@ -204,29 +206,65 @@ CONTAINS
       ENDDO
    ENDDO
    lastdt = dt
-!                                                                      
-!...CHECK FOR CONVECTIVE INITIATION EVERY 5 MINUTES (OR NTST/2)...      
-!                                                                     
-
-!
-! Modified for adaptive time step
-!
-   if (ADAPT_STEP_FLAG) then
-     if ( (KTAU .eq. 1) .or. (cudt .eq. 0) .or. &
-          ( CURR_SECS + dt >= &
-          ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then
-        run_param = .TRUE.
-     else
-        run_param = .FALSE.
-     endif
 
-   else
-      if (MOD(KTAU,NTST) .EQ. 0 .or. KTAU .eq. 1) then
-         run_param = .TRUE.
-      else
-         run_param = .FALSE.
-      endif
-   endif
+!  Initialization for adaptive time step.
+
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+         IF ( cudtacttime .EQ. 0. ) THEN
+            cudtacttime = curr_secs + cudt*60.
+         END IF
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.  
+!                KTAU=1
+!    Test 2:  If the user asked for the cumulus to be run every time step, then yes.  
+!                CUDT=0 or STEPCU=1
+!    Test 3:  If not adaptive dt, and this is on the requested cumulus frequency, then yes.  
+!                MOD(KTAU,NST)=0
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.  
+!                CURR_SECS >= CUDTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+!  If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
+!  cumulus run.
+
+   decided = .FALSE.
+   run_param = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( ktau .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(ktau,ntst) .EQ. 0 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. cudtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+      cudtacttime = curr_secs + cudt*60
+   END IF
 
    IF (run_param) then
      DO J = jts,jte  
diff --git a/wrfv2_fire/phys/module_cu_kfeta.F b/wrfv2_fire/phys/module_cu_kfeta.F
index c6c0b231..ce3cbde2 100644
--- a/wrfv2_fire/phys/module_cu_kfeta.F
+++ b/wrfv2_fire/phys/module_cu_kfeta.F
@@ -27,6 +27,7 @@ CONTAINS
              ,its,ite, jts,jte, kts,kte                      &
              ,trigger                                        &
              ,DT,KTAU,DX,CUDT,CURR_SECS,ADAPT_STEP_FLAG      &
+             ,CUDTACTTIME                                    & 
              ,rho,RAINCV,PRATEC,NCA                          &
              ,U,V,TH,T,W,dz8w,Pcps,pi                        &
              ,W0AVG,XLV0,XLV1,XLS0,XLS1,CP,R,G,EP1           &
@@ -77,7 +78,8 @@ CONTAINS
    REAL,  INTENT(IN   ) :: DT, DX
    REAL,  INTENT(IN   ) :: CUDT
    REAL,  INTENT(IN   ) :: CURR_SECS
-   LOGICAL,INTENT(IN   ) :: ADAPT_STEP_FLAG
+   LOGICAL,OPTIONAL,INTENT(IN   ) :: ADAPT_STEP_FLAG
+   REAL,  INTENT (INOUT) :: CUDTACTTIME       
 !
    REAL, DIMENSION( ims:ime , jms:jme ),                     &
           INTENT(INOUT) ::                           RAINCV
@@ -164,7 +166,7 @@ CONTAINS
    INTEGER :: i,j,k,NTST
    REAL    :: lastdt = -1.0
    REAL    :: W0AVGfctr, W0fctr, W0den
-   LOGICAL :: run_param
+   LOGICAL :: run_param , doing_adapt_dt , decided
    
 !
    DXSQ=DX*DX
@@ -213,27 +215,65 @@ CONTAINS
       ENDDO
    ENDDO
    lastdt = dt
-!
-!...CHECK FOR CONVECTIVE INITIATION EVERY 5 MINUTES (OR NTST/2)...
-!
-! Modified for adaptive time step
-!
-   if (ADAPT_STEP_FLAG) then
-      if ( (KTAU .eq. 1) .or. (cudt .eq. 0) .or. &
-           ( CURR_SECS + dt >= &
-           ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then
-         run_param = .TRUE.
-      else
-         run_param = .FALSE.
-      endif
 
-   else
-      if (MOD(KTAU,NTST) .EQ. 0 .or. KTAU .eq. 1) then
-         run_param = .TRUE.
-      else
-         run_param = .FALSE.
-      endif
-   endif
+!  Initialization for adaptive time step.
+
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+         IF ( cudtacttime .EQ. 0. ) THEN
+            cudtacttime = curr_secs + cudt*60.
+         END IF
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.
+!                KTAU=1
+!    Test 2:  If the user asked for the cumulus to be run every time step, then yes.
+!                CUDT=0 or STEPCU=1
+!    Test 3:  If not adaptive dt, and this is on the requested cumulus frequency, then yes.
+!                MOD(KTAU,NST)=0
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.
+!                CURR_SECS >= CUDTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+!  If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
+!  cumulus run.
+
+   decided = .FALSE.
+   run_param = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( ktau .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(ktau,ntst) .EQ. 0 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. cudtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+      cudtacttime = curr_secs + cudt*60
+   END IF
 
    if (run_param) then
 
diff --git a/wrfv2_fire/phys/module_cu_nsas.F b/wrfv2_fire/phys/module_cu_nsas.F
index 1c4f6c20..e720db58 100644
--- a/wrfv2_fire/phys/module_cu_nsas.F
+++ b/wrfv2_fire/phys/module_cu_nsas.F
@@ -8,6 +8,7 @@ CONTAINS
 !-------------------------------------------------------------------------------
    subroutine cu_nsas(dt,p3di,p3d,pi3d,qc3d,qi3d,rho3d,itimestep,stepcu,       &
                      hbot,htop,cu_act_flag,cudt,curr_secs,adapt_step_flag,     &
+                     cudtacttime,                                              & 
                      rthcuten,rqvcuten,rqccuten,rqicuten,                      &
                      rucuten,rvcuten,                                          &
                      qv3d,t3d,raincv,pratec,xland,dz8w,w,u3d,v3d,              &
@@ -103,7 +104,9 @@ CONTAINS
             intent(inout) ::                                      cu_act_flag
   real, intent(   in) ::                                                 cudt
   real, intent(   in) ::                                            curr_secs
-  logical, intent(    in) ::                                  adapt_step_flag
+  logical, intent(    in) , optional ::                       adapt_step_flag
+
+  real, intent (inout) ::                                         cudtacttime
 !
   real,     dimension( ims:ime, jms:jme )                                    , &
              intent(in   )   ::                                          hpbl, &
@@ -135,43 +138,83 @@ CONTAINS
   integer, dimension (its:ite)  ::                                       kbot, &
                                                                          ktop, &
                                                                           kuo
-  logical ::  run_param
+  logical :: run_param , doing_adapt_dt , decided
   integer ::  i,j,k,kp
 !
 !-------------------------------------------------------------------------------
 ! microphysics scheme --> ncloud 
-   if (mp_physics .eq. 1) then
+   if (mp_physics .eq. 0) then
      ncloud = 0
-   elseif ( mp_physics .eq. 2 .or. mp_physics .eq. 3 ) then
-     ncloud = 2
-   elseif ( mp_physics .eq. 5 ) then
-     ncloud = 3 
-   elseif ( mp_physics .eq. 4 .or. mp_physics .eq. 14 ) then
-     ncloud = 4
-   elseif ( mp_physics .eq. 9) then
-     ncloud = 6
+   elseif ( mp_physics .eq. 1 .or. mp_physics .eq. 3 ) then
+     ncloud = 1
    else
-     ncloud = 5
+     ncloud = 2
    endif  
 !
 !-------------------------------------------------------------------------------
 !
 !*** check to see if this is a convection timestep
 !
-      if (adapt_step_flag) then
-        if ( (itimestep .eq. 0) .or. (cudt .eq. 0) .or.                        &
-          (curr_secs + dt >= (int(curr_secs/(cudt*60))+1)*cudt*60)) then
-          run_param = .true.
-        else
-          run_param = .false.
-        endif
-      else
-        if (MOD(itimestep,stepcu) .EQ. 0 .or. itimestep .eq. 0) then
-          run_param = .true.
-        else
-          run_param = .false.
-        endif
-      endif
+
+!  Initialization for adaptive time step.
+
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+         IF ( cudtacttime .EQ. 0. ) THEN
+            cudtacttime = curr_secs + cudt*60.
+         END IF
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.
+!                ITIMESTEP=1
+!    Test 2:  If the user asked for the cumulus to be run every time step, then yes.
+!                CUDT=0 or STEPCU=1
+!    Test 3:  If not adaptive dt, and this is on the requested cumulus frequency, then yes.
+!                MOD(ITIMESTEP,STEPCU)=0
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.
+!                CURR_SECS >= CUDTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+!  If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
+!  cumulus run.
+
+   decided = .FALSE.
+   run_param = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( itimestep .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(itimestep,stepcu) .EQ. 0 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. cudtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+      cudtacttime = curr_secs + cudt*60
+   END IF
+
 !-------------------------------------------------------------------------------
    if(run_param) then
       do j=jts,jte
@@ -378,7 +421,7 @@ CONTAINS
 !   slimsk   - real (ims:ime) land(1),sea(0), ice(2) flag
 !   dot      - real (ims:ime,kms:kme) vertical velocity
 !   jcap     - integer spectral truncation
-!   ncloud   - integer number of hydrometeors
+!   ncloud   - integer no_cloud(0),no_ice(1),cloud+ice(2)
 !   lat      - integer  current latitude index
 !
 ! output argument list:
@@ -2046,7 +2089,7 @@ CONTAINS
            if (k.ge.kbcon(i).and.k.le.ktcon(i)) then
              tem  = dellal(i,k) * xmb(i) * dt2
              tem1 = max(0.0, min(1.0, (tcr-t1(i,k))*tcrf))
-             if (ncloud.ge.4) then
+             if (ncloud.ge.2) then
                qi2(i,k) = qi2(i,k) + tem * tem1            ! ice
                qc2(i,k) = qc2(i,k) + tem *(1.0-tem1)       ! water
              else
diff --git a/wrfv2_fire/phys/module_cu_sas.F b/wrfv2_fire/phys/module_cu_osas.F
similarity index 96%
copy from wrfv2_fire/phys/module_cu_sas.F
copy to wrfv2_fire/phys/module_cu_osas.F
index 30e9cd02..ce971950 100755
--- a/wrfv2_fire/phys/module_cu_sas.F
+++ b/wrfv2_fire/phys/module_cu_osas.F
@@ -1,10 +1,10 @@
 !!
-MODULE module_cu_sas 
+MODULE module_cu_osas 
 
 CONTAINS
 
 !-----------------------------------------------------------------
-      SUBROUTINE CU_SAS(DT,ITIMESTEP,STEPCU,                        &
+      SUBROUTINE CU_OSAS(DT,ITIMESTEP,STEPCU,                        &
                  RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,               &
                  RUCUTEN,RVCUTEN,                                   & ! gopal's doing for SAS
                  RAINCV,PRATEC,HTOP,HBOT,                           &
@@ -16,6 +16,7 @@ CONTAINS
 #endif
                  P_QI,P_FIRST_SCALAR,                               & 
                  CUDT, CURR_SECS, ADAPT_STEP_FLAG,                  &
+                 CUDTACTTIME,                                       & 
                  ids,ide, jds,jde, kds,kde,                         &
                  ims,ime, jms,jme, kms,kme,                         &
                  its,ite, jts,jte, kts,kte                          )
@@ -163,7 +164,8 @@ CONTAINS
 ! Adaptive time-step variables
       REAL,  INTENT(IN   ) :: CUDT
       REAL,  INTENT(IN   ) :: CURR_SECS
-      LOGICAL,INTENT(IN   ) :: ADAPT_STEP_FLAG
+      LOGICAL,INTENT(IN   ) , OPTIONAL :: ADAPT_STEP_FLAG
+      REAL,  INTENT (INOUT) :: CUDTACTTIME       
 
 !--------------------------- LOCAL VARS ------------------------------
 
@@ -221,7 +223,7 @@ CONTAINS
                                         KX,                             &
                                         NCLOUD 
 
-      LOGICAL :: run_param
+      LOGICAL :: run_param , doing_adapt_dt , decided
 
       DATA IGPVS/0/
 
@@ -229,21 +231,65 @@ CONTAINS
 !
 !***  CHECK TO SEE IF THIS IS A CONVECTION TIMESTEP
 !
-      if (adapt_step_flag) then
-         if ( (ITIMESTEP .eq. 0) .or. (cudt .eq. 0) .or. &
-         ( CURR_SECS + dt >= ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then
-         run_param = .TRUE.
-      else
-         run_param = .FALSE.
-      endif
-
-      else
-         if (MOD(ITIMESTEP,STEPCU) .EQ. 0 .or. ITIMESTEP .eq. 0) then
-            run_param = .TRUE.
-         else
-            run_param = .FALSE.
-         endif
-      endif
+
+!  Initialization for adaptive time step.
+
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+         IF ( cudtacttime .EQ. 0. ) THEN
+            cudtacttime = curr_secs + cudt*60.
+         END IF
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.
+!                ITIMESTEP=1
+!    Test 2:  If the user asked for the cumulus to be run every time step, then yes.
+!                CUDT=0 or STEPCU=1
+!    Test 3:  If not adaptive dt, and this is on the requested cumulus frequency, then yes.
+!                MOD(ITIMESTEP,STEPCU)=0
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.
+!                CURR_SECS >= CUDTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+!  If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
+!  cumulus run.
+
+   decided = .FALSE.
+   run_param = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( itimestep .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(itimestep,stepcu) .EQ. 0 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. cudtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+      cudtacttime = curr_secs + cudt*60
+   END IF
 
 !-----------------------------------------------------------------------
 
@@ -367,7 +413,7 @@ CONTAINS
       ENDDO
 
 
-      CALL SASCNV(IM,IM,KX,JCAP,DELT,DEL,PRSL,PS,PHIL,                  &
+      CALL OSASCNV(IM,IM,KX,JCAP,DELT,DEL,PRSL,PS,PHIL,                  &
                   QL,Q1,T1,U1,V1,RCS,CLDWRK,RN,KBOT,                    &
                   KTOP,KUO,SLIMSK,DOT,XKT2,NCLOUD) 
 
@@ -428,10 +474,10 @@ CONTAINS
 
    ENDIF
 
-   END SUBROUTINE CU_SAS
+   END SUBROUTINE CU_OSAS
 
 !====================================================================
-   SUBROUTINE sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,          &
+   SUBROUTINE osasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,          &
                       RUCUTEN,RVCUTEN,                              &   ! gopal's doing for SAS
                       RESTART,P_QC,P_QI,P_FIRST_SCALAR,             &
                       allowed_to_read,                              &
@@ -501,17 +547,16 @@ CONTAINS
      ENDIF
    ENDIF
 
-      END SUBROUTINE sasinit
+      END SUBROUTINE osasinit
 
 ! ------------------------------------------------------------------------
 
-      SUBROUTINE SASCNV(IM,IX,KM,JCAP,DELT,DEL,PRSL,PS,PHIL,QL,         &
-!     SUBROUTINE SASCNV(IM,IX,KM,JCAP,DLT,DEL,PRSL,PHIL,QL,             &
+      SUBROUTINE OSASCNV(IM,IX,KM,JCAP,DELT,DEL,PRSL,PS,PHIL,QL,         &
      &       Q1,T1,U1,V1,RCS,CLDWRK,RN,KBOT,KTOP,KUO,SLIMSK,            &
      &       DOT,XKT2,ncloud)
 !  for cloud water version
 !     parameter(ncloud=0)
-!     SUBROUTINE SASCNV(KM,JCAP,DELT,DEL,SL,SLK,PS,QL,
+!     SUBROUTINE OSASCNV(KM,JCAP,DELT,DEL,SL,SLK,PS,QL,
 !    &       Q1,T1,U1,V1,RCS,CLDWRK,RN,KBOT,KTOP,KUO,SLIMSK,
 !    &       DOT,xkt2,ncloud)
 !
@@ -2221,7 +2266,7 @@ CONTAINS
       ENDDO
 !!
       RETURN
-   END SUBROUTINE SASCNV
+   END SUBROUTINE OSASCNV
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -2543,4 +2588,4 @@ CONTAINS
             DEALLOCATE(seed)
       END SUBROUTINE 
 #endif
-      END MODULE module_cu_sas
+      END MODULE module_cu_osas
diff --git a/wrfv2_fire/phys/module_cu_sas.F b/wrfv2_fire/phys/module_cu_sas.F
index 30e9cd02..f5646f57 100755
--- a/wrfv2_fire/phys/module_cu_sas.F
+++ b/wrfv2_fire/phys/module_cu_sas.F
@@ -6,7 +6,7 @@ CONTAINS
 !-----------------------------------------------------------------
       SUBROUTINE CU_SAS(DT,ITIMESTEP,STEPCU,                        &
                  RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,               &
-                 RUCUTEN,RVCUTEN,                                   & ! gopal's doing for SAS
+                 RUCUTEN,RVCUTEN,                                   & 
                  RAINCV,PRATEC,HTOP,HBOT,                           &
                  U3D,V3D,W,T3D,QV3D,QC3D,QI3D,PI3D,RHO3D,           &
                  DZ8W,PCPS,P8W,XLAND,CU_ACT_FLAG,                   &
@@ -16,6 +16,7 @@ CONTAINS
 #endif
                  P_QI,P_FIRST_SCALAR,                               & 
                  CUDT, CURR_SECS, ADAPT_STEP_FLAG,                  &
+                 CUDTACTTIME,                                       & 
                  ids,ide, jds,jde, kds,kde,                         &
                  ims,ime, jms,jme, kms,kme,                         &
                  its,ite, jts,jte, kts,kte                          )
@@ -123,11 +124,11 @@ CONTAINS
                                         RQVCUTEN,                       &
                                         RTHCUTEN
       REAL, DIMENSION(ims:ime, jms:jme, kms:kme), INTENT(INOUT) ::      &
-                                        RUCUTEN,                        &  ! gopal's doing for SAS
-                                        RVCUTEN                            ! gopal's doing for SAS 
+                                        RUCUTEN,                        &  
+                                        RVCUTEN                             
 #if (NMM_CORE == 1)
       REAL,    INTENT(IN) ::    MOMMIX
-      REAL, DIMENSION( ims:ime , jms:jme ),                             &
+   REAL, DIMENSION( ims:ime , jms:jme ),                                &
                          INTENT(IN) :: STORE_RAND
 
 #endif
@@ -163,7 +164,8 @@ CONTAINS
 ! Adaptive time-step variables
       REAL,  INTENT(IN   ) :: CUDT
       REAL,  INTENT(IN   ) :: CURR_SECS
-      LOGICAL,INTENT(IN   ) :: ADAPT_STEP_FLAG
+      LOGICAL,INTENT(IN   ) , OPTIONAL :: ADAPT_STEP_FLAG
+      REAL,  INTENT (INOUT) :: CUDTACTTIME       
 
 !--------------------------- LOCAL VARS ------------------------------
 
@@ -207,7 +209,7 @@ CONTAINS
       INTEGER, DIMENSION(its:ite) ::                                    &
                                         KBOT,                           &
                                         KTOP,                           &
-                                        KUO
+                                        KCNV
 
       INTEGER ::                                                        &
                                         I,                              &
@@ -221,7 +223,7 @@ CONTAINS
                                         KX,                             &
                                         NCLOUD 
 
-      LOGICAL :: run_param
+      LOGICAL :: run_param , doing_adapt_dt , decided
 
       DATA IGPVS/0/
 
@@ -229,21 +231,65 @@ CONTAINS
 !
 !***  CHECK TO SEE IF THIS IS A CONVECTION TIMESTEP
 !
-      if (adapt_step_flag) then
-         if ( (ITIMESTEP .eq. 0) .or. (cudt .eq. 0) .or. &
-         ( CURR_SECS + dt >= ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then
-         run_param = .TRUE.
-      else
-         run_param = .FALSE.
-      endif
 
-      else
-         if (MOD(ITIMESTEP,STEPCU) .EQ. 0 .or. ITIMESTEP .eq. 0) then
-            run_param = .TRUE.
-         else
-            run_param = .FALSE.
-         endif
-      endif
+!  Initialization for adaptive time step.
+
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+         IF ( cudtacttime .EQ. 0. ) THEN
+            cudtacttime = curr_secs + cudt*60.
+         END IF
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.
+!                ITIMESTEP=1
+!    Test 2:  If the user asked for the cumulus to be run every time step, then yes.
+!                CUDT=0 or STEPCU=1
+!    Test 3:  If not adaptive dt, and this is on the requested cumulus frequency, then yes.
+!                MOD(ITIMESTEP,STEPCU)=0
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.
+!                CURR_SECS >= CUDTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+!  If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
+!  cumulus run.
+
+   decided = .FALSE.
+   run_param = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( itimestep .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(itimestep,stepcu) .EQ. 0 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. cudtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+      cudtacttime = curr_secs + cudt*60
+   END IF
 
 !-----------------------------------------------------------------------
 
@@ -303,6 +349,8 @@ CONTAINS
 
 ! --------------- end compute zi and zl -------------------------------------
 
+
+
 !    Based on some important findings from Morris Bender, XKT2 was defined in
 !    terms of random number instead of random number based cloud tops
 !    Also, these random numbers are stored and are changed only once in
@@ -312,7 +360,7 @@ CONTAINS
 
 #if (EM_CORE == 1)
 !    XKT2 was defined in terms of random number instead of random number based cloud tops
-!    ZCX   
+!    ZCX
      call init_random_seed()
      call random_number(XKT2)
 #ifdef REGTEST
@@ -320,7 +368,7 @@ CONTAINS
      xkt2 = 0.1
 #endif
 #endif
-!   
+!
 #if (NMM_CORE == 1)
       DO i=its,ite
          XKT2(i) = STORE_RAND(i,j)
@@ -366,15 +414,18 @@ CONTAINS
         ENDDO
       ENDDO
 
-
-      CALL SASCNV(IM,IM,KX,JCAP,DELT,DEL,PRSL,PS,PHIL,                  &
+      CALL SASCNVN(IM,IM,KX,JCAP,DELT,DEL,PRSL,PS,PHIL,                  &
                   QL,Q1,T1,U1,V1,RCS,CLDWRK,RN,KBOT,                    &
-                  KTOP,KUO,SLIMSK,DOT,XKT2,NCLOUD) 
+                  KTOP,KCNV,SLIMSK,DOT,NCLOUD)
+
+!      CALL SASCNV(IM,IM,KX,JCAP,DELT,DEL,PRSL,PS,PHIL,                  &
+!                  QL,Q1,T1,U1,V1,RCS,CLDWRK,RN,KBOT,                    &
+!                  KTOP,KCNV,SLIMSK,DOT,XKT2,NCLOUD) 
 
 !!!   make more like GFDL ... eliminate shallow convection.....
-!!!   CALL SHALCV(IM,IM,KX,DELT,DEL,PRSI,PRSL,PRSLK,KUO,Q1,T1,DPSHC)
+!!!   CALL SHALCV(IM,IM,KX,DELT,DEL,PRSI,PRSL,PRSLK,KCNV,Q1,T1,DPSHC)
 #if (EM_CORE == 1)
-      CALL SHALCV(IM,IM,KX,DELT,DEL,PRSI,PRSL,PRSLK,KUO,Q1,T1,DPSHC)
+      CALL SHALCV(IM,IM,KX,DELT,DEL,PRSI,PRSL,PRSLK,KCNV,Q1,T1,DPSHC)
 #endif
 
       DO I=ITS,ITE
@@ -401,8 +452,10 @@ CONTAINS
 #if (NMM_CORE == 1)
       DO K=KTS,KTE
         DO I=ITS,ITE
-         RUCUTEN(I,J,K)=MOMMIX*(U1(I,K)-U3D(I,K,J))*RDELT
-         RVCUTEN(I,J,K)=MOMMIX*(V1(I,K)-V3D(I,K,J))*RDELT
+!         RUCUTEN(I,J,K)=MOMMIX*(U1(I,K)-U3D(I,K,J))*RDELT
+!         RVCUTEN(I,J,K)=MOMMIX*(V1(I,K)-V3D(I,K,J))*RDELT
+         RUCUTEN(I,J,K)=(U1(I,K)-U3D(I,K,J))*RDELT
+         RVCUTEN(I,J,K)=(V1(I,K)-V3D(I,K,J))*RDELT
         ENDDO
       ENDDO
 #endif
@@ -432,7 +485,7 @@ CONTAINS
 
 !====================================================================
    SUBROUTINE sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,          &
-                      RUCUTEN,RVCUTEN,                              &   ! gopal's doing for SAS
+                      RUCUTEN,RVCUTEN,                              &   
                       RESTART,P_QC,P_QI,P_FIRST_SCALAR,             &
                       allowed_to_read,                              &
                       ids, ide, jds, jde, kds, kde,                 &
@@ -474,8 +527,8 @@ CONTAINS
      DO i=its,itf
        RTHCUTEN(i,k,j)=0.
        RQVCUTEN(i,k,j)=0.
-       RUCUTEN(i,j,k)=0.   ! gopal's doing for SAS
-       RVCUTEN(i,j,k)=0.    ! gopal's doing for SAS
+       RUCUTEN(i,j,k)=0.   
+       RVCUTEN(i,j,k)=0.    
      ENDDO
      ENDDO
      ENDDO
@@ -2526,21 +2579,2955 @@ CONTAINS
       RETURN
       END SUBROUTINE MSTADBT3
 
-#if (EM_CORE == 1)
-!   random seeds - ZCX    
-      SUBROUTINE init_random_seed()
-            INTEGER :: i, n, clock
-            INTEGER, DIMENSION(:), ALLOCATABLE :: seed
-
-            CALL RANDOM_SEED(size = n)
-            ALLOCATE(seed(n))
-
-            CALL SYSTEM_CLOCK(COUNT=clock)
-
-            seed = clock + 37 * (/ (i - 1, i = 1, n) /)
-            CALL RANDOM_SEED(PUT = seed)
-
-            DEALLOCATE(seed)
-      END SUBROUTINE 
+      subroutine sascnvn(im,ix,km,jcap,delt,del,prsl,ps,phil,ql,   & 
+     &     q1,t1,u1,v1,rcs,cldwrk,rn,kbot,ktop,kcnv,slimsk,        &
+     &     dot,ncloud)                         
+!     &     dot,ncloud,ud_mf,dd_mf,dt_mf)                         
+!    &     dot,ncloud,ud_mf,dd_mf,dt_mf,me)
+!
+!      use machine , only : kind_phys
+!      use funcphys , only : fpvs
+!      use physcons, grav => con_g, cp => con_cp, hvap => con_hvap  &
+      USE MODULE_GFS_MACHINE, ONLY : kind_phys
+      USE MODULE_GFS_FUNCPHYS, ONLY : fpvs
+      USE MODULE_GFS_PHYSCONS, grav => con_g, cp => con_cp         &
+     &,             hvap => con_hvap                               &
+     &,             rv => con_rv, fv => con_fvirt, t0c => con_t0c  &
+     &,             cvap => con_cvap, cliq => con_cliq             &
+     &,             eps => con_eps, epsm1 => con_epsm1
+      implicit none
+!
+      integer            im, ix,  km, jcap, ncloud,                &
+     &                   kbot(im), ktop(im), kcnv(im) 
+!    &,                  me
+      real(kind=kind_phys) delt
+      real(kind=kind_phys) ps(im),     del(ix,km),  prsl(ix,km),   &
+     &                     ql(ix,km,2),q1(ix,km),   t1(ix,km),     &
+     &                     u1(ix,km),  v1(ix,km),   rcs(im),       &
+     &                     cldwrk(im), rn(im),      slimsk(im),    &
+     &                     dot(ix,km), phil(ix,km)
+! hchuang code change mass flux output
+!     &,                    ud_mf(im,km),dd_mf(im,km),dt_mf(im,km)
+!
+      integer              i, j, indx, jmn, k, kk, latd, lond, km1
+!
+      real(kind=kind_phys) clam, cxlamu, xlamde, xlamdd
+! 
+      real(kind=kind_phys) adw,     aup,     aafac,                &
+     &                     beta,    betal,   betas,                &
+     &                     c0,      cpoel,   dellat,  delta,       &
+     &                     desdt,   deta,    detad,   dg,          &
+     &                     dh,      dhh,     dlnsig,  dp,          &
+     &                     dq,      dqsdp,   dqsdt,   dt,          &
+     &                     dt2,     dtmax,   dtmin,   dv1h,        &
+     &                     dv1q,    dv2h,    dv2q,    dv1u,        &
+     &                     dv1v,    dv2u,    dv2v,    dv3q,        &
+     &                     dv3h,    dv3u,    dv3v,                 &
+     &                     dz,      dz1,     e1,      edtmax,      &
+     &                     edtmaxl, edtmaxs, el2orc,  elocp,       &
+     &                     es,      etah,    cthk,    dthk,        &
+     &                     evef,    evfact,  evfactl, fact1,       &
+     &                     fact2,   factor,  fjcap,   fkm,         &
+     &                     g,       gamma,   pprime,               &
+     &                     qlk,     qrch,    qs,      c1,          &
+     &                     rain,    rfact,   shear,   tem1,        &
+     &                     tem2,    terr,    val,     val1,        &
+     &                     val2,    w1,      w1l,     w1s,         &
+     &                     w2,      w2l,     w2s,     w3,          &
+     &                     w3l,     w3s,     w4,      w4l,         &
+     &                     w4s,     xdby,    xpw,     xpwd,        &
+     &                     xqrch,   mbdt,    tem,                  &
+     &                     ptem,    ptem1,   pgcon                 
+!
+      integer              kb(im), kbcon(im), kbcon1(im),          &
+     &                     ktcon(im), ktcon1(im),                  &
+     &                     jmin(im), lmin(im), kbmax(im),          &
+     &                     kbm(im), kmax(im)
+!
+      real(kind=kind_phys) aa1(im),     acrt(im),   acrtfct(im),   &
+     &                     delhbar(im), delq(im),   delq2(im),     &
+     &                     delqbar(im), delqev(im), deltbar(im),   &
+     &                     deltv(im),   dtconv(im), edt(im),       &
+     &                     edto(im),    edtx(im),   fld(im),       &
+     &                     hcdo(im,km), hmax(im),   hmin(im),      &
+     &                     ucdo(im,km), vcdo(im,km),aa2(im),       &
+     &                     pbcdif(im),  pdot(im),   po(im,km),     &
+     &                     pwavo(im),   pwevo(im),  xlamud(im),    &
+     &                     qcdo(im,km), qcond(im),  qevap(im),     &
+     &                     rntot(im),   vshear(im), xaa0(im),      &
+     &                     xk(im),      xlamd(im),                 &
+     &                     xmb(im),     xmbmax(im), xpwav(im),     &
+     &                     xpwev(im),   delubar(im),delvbar(im)
+!cj
+      real(kind=kind_phys) cincr, cincrmax, cincrmin
+      real(kind=kind_phys) xmbmx1
+!cj
+!c  physical parameters
+      parameter(g=grav)
+      parameter(cpoel=cp/hvap,elocp=hvap/cp,                       &
+     &          el2orc=hvap*hvap/(rv*cp))
+      parameter(terr=0.,c0=.002,c1=.002,delta=fv)
+      parameter(fact1=(cvap-cliq)/rv,fact2=hvap/rv-fact1*t0c)
+      parameter(cthk=150.,cincrmax=180.,cincrmin=120.,dthk=25.)
+!c  local variables and arrays
+      real(kind=kind_phys) pfld(im,km),to(im,km), qo(im,km),       &
+     &                     uo(im,km),  vo(im,km), qeso(im,km)
+!c  cloud water
+      real(kind=kind_phys)qlko_ktcon(im),dellal(im,km),tvo(im,km), &
+     &                dbyo(im,km), zo(im,km),    xlamue(im,km),    &
+     &                fent1(im,km),fent2(im,km), frh(im,km),       &
+     &                heo(im,km),  heso(im,km),                    &
+     &                qrcd(im,km), dellah(im,km), dellaq(im,km),   &
+     &                dellau(im,km),dellav(im,km), hcko(im,km),    &
+     &                ucko(im,km), vcko(im,km),   qcko(im,km),     &
+     &                eta(im,km),  etad(im,km),   zi(im,km),       &
+     &                qrcdo(im,km),pwo(im,km),    pwdo(im,km),     &
+     &                tx1(im),     sumx(im)
+!    &,               rhbar(im)
+!
+      logical totflg, cnvflg(im), flg(im)
+!
+      real(kind=kind_phys) pcrit(15), acritt(15), acrit(15)
+!     save pcrit, acritt
+      data pcrit/850.,800.,750.,700.,650.,600.,550.,500.,450.,400.,&
+     &           350.,300.,250.,200.,150./
+      data acritt/.0633,.0445,.0553,.0664,.075,.1082,.1521,.2216,  &
+     &           .3151,.3677,.41,.5255,.7663,1.1686,1.6851/
+!c  gdas derived acrit
+!c     data acritt/.203,.515,.521,.566,.625,.665,.659,.688,
+!c    &            .743,.813,.886,.947,1.138,1.377,1.896/
+      real(kind=kind_phys) tf, tcr, tcrf
+      parameter (tf=233.16, tcr=263.16, tcrf=1.0/(tcr-tf))
+!
+!c-----------------------------------------------------------------------
+!
+      km1 = km - 1
+!c
+!c  initialize arrays
+!c
+      do i=1,im
+        kcnv(i)=0
+        cnvflg(i) = .true.
+        rn(i)=0.
+        kbot(i)=km+1
+        ktop(i)=0
+        kbcon(i)=km
+        ktcon(i)=1
+        dtconv(i) = 3600.
+        cldwrk(i) = 0.
+        pdot(i) = 0.
+        pbcdif(i)= 0.
+        lmin(i) = 1
+        jmin(i) = 1
+        qlko_ktcon(i) = 0.
+        edt(i)  = 0.
+        edto(i) = 0.
+        edtx(i) = 0.
+        acrt(i) = 0.
+        acrtfct(i) = 1.
+        aa1(i)  = 0.
+        aa2(i)  = 0.
+        xaa0(i) = 0.
+        pwavo(i)= 0.
+        pwevo(i)= 0.
+        xpwav(i)= 0.
+        xpwev(i)= 0.
+        vshear(i) = 0.
+      enddo
+! hchuang code change
+!      do k = 1, km
+!        do i = 1, im
+!          ud_mf(i,k) = 0.
+!          dd_mf(i,k) = 0.
+!          dt_mf(i,k) = 0.
+!        enddo
+!      enddo
+!c
+      do k = 1, 15
+        acrit(k) = acritt(k) * (975. - pcrit(k))
+      enddo
+      dt2 = delt
+      val   =         1200.
+      dtmin = max(dt2, val )
+      val   =         3600.
+      dtmax = max(dt2, val )
+!c  model tunable parameters are all here
+      mbdt    = 10.
+      edtmaxl = .3
+      edtmaxs = .3
+      clam    = .1
+      aafac   = .1
+!     betal   = .15
+!     betas   = .15
+      betal   = .05
+      betas   = .05
+!c     evef    = 0.07
+      evfact  = 0.3
+      evfactl = 0.3
+#if ( EM_CORE == 1 )
+!  HAWAII TEST - ZCX
+      BETAl   = .05
+      betas   = .05
+      evfact  = 0.5
+      evfactl = 0.5
 #endif
-      END MODULE module_cu_sas
+!
+      cxlamu  = 1.0e-4
+      xlamde  = 1.0e-4
+      xlamdd  = 1.0e-4
+!
+!     pgcon   = 0.7     ! Gregory et al. (1997, QJRMS)
+      pgcon   = 0.55    ! Zhang & Wu (2003,JAS)
+      fjcap   = (float(jcap) / 126.) ** 2
+      val     =           1.
+      fjcap   = max(fjcap,val)
+      fkm     = (float(km) / 28.) ** 2
+      fkm     = max(fkm,val)
+      w1l     = -8.e-3 
+      w2l     = -4.e-2
+      w3l     = -5.e-3 
+      w4l     = -5.e-4
+      w1s     = -2.e-4
+      w2s     = -2.e-3
+      w3s     = -1.e-3
+      w4s     = -2.e-5
+!c
+!c  define top layer for search of the downdraft originating layer
+!c  and the maximum thetae for updraft
+!c
+      do i=1,im
+        kbmax(i) = km
+        kbm(i)   = km
+        kmax(i)  = km
+        tx1(i)   = 1.0 / ps(i)
+      enddo
+!     
+      do k = 1, km
+        do i=1,im
+          IF (prSL(I,K)*tx1(I) .GT. 0.04) KMAX(I)  = MIN(KM,K + 1)
+!2011bugfix          if (prsl(i,k)*tx1(i) .gt. 0.04) kmax(i)  = k + 1
+          if (prsl(i,k)*tx1(i) .gt. 0.45) kbmax(i) = k + 1
+          if (prsl(i,k)*tx1(i) .gt. 0.70) kbm(i)   = k + 1
+        enddo
+      enddo
+      do i=1,im
+        kbmax(i) = min(kbmax(i),kmax(i))
+        kbm(i)   = min(kbm(i),kmax(i))
+      enddo
+!c
+!c  hydrostatic height assume zero terr and initially assume
+!c    updraft entrainment rate as an inverse function of height 
+!c
+      do k = 1, km
+        do i=1,im
+          zo(i,k) = phil(i,k) / g
+        enddo
+      enddo
+      do k = 1, km1
+        do i=1,im
+          zi(i,k) = 0.5*(zo(i,k)+zo(i,k+1))
+          xlamue(i,k) = clam / zi(i,k)
+        enddo
+      enddo
+!c
+!c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!c   convert surface pressure to mb from cb
+!c
+      do k = 1, km
+        do i = 1, im
+          if (k .le. kmax(i)) then
+            pfld(i,k) = prsl(i,k) * 10.0
+            eta(i,k)  = 1.
+            fent1(i,k)= 1.
+            fent2(i,k)= 1.
+            frh(i,k)  = 0.
+            hcko(i,k) = 0.
+            qcko(i,k) = 0.
+            ucko(i,k) = 0.
+            vcko(i,k) = 0.
+            etad(i,k) = 1.
+            hcdo(i,k) = 0.
+            qcdo(i,k) = 0.
+            ucdo(i,k) = 0.
+            vcdo(i,k) = 0.
+            qrcd(i,k) = 0.
+            qrcdo(i,k)= 0.
+            dbyo(i,k) = 0.
+            pwo(i,k)  = 0.
+            pwdo(i,k) = 0.
+            dellal(i,k) = 0.
+            to(i,k)   = t1(i,k)
+            qo(i,k)   = q1(i,k)
+            uo(i,k)   = u1(i,k) * rcs(i)
+            vo(i,k)   = v1(i,k) * rcs(i)
+          endif
+        enddo
+      enddo
+!c
+!c  column variables
+!c  p is pressure of the layer (mb)
+!c  t is temperature at t-dt (k)..tn
+!c  q is mixing ratio at t-dt (kg/kg)..qn
+!c  to is temperature at t+dt (k)... this is after advection and turbulan
+!c  qo is mixing ratio at t+dt (kg/kg)..q1
+!c
+      do k = 1, km
+        do i=1,im
+          if (k .le. kmax(i)) then
+            qeso(i,k) = 0.01 * fpvs(to(i,k))      ! fpvs is in pa
+            qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
+            val1      =             1.e-8
+            qeso(i,k) = max(qeso(i,k), val1)
+            val2      =           1.e-10
+            qo(i,k)   = max(qo(i,k), val2 )
+!           qo(i,k)   = min(qo(i,k),qeso(i,k))
+!           tvo(i,k)  = to(i,k) + delta * to(i,k) * qo(i,k)
+          endif
+        enddo
+      enddo
+!c
+!c  compute moist static energy
+!c
+      do k = 1, km
+        do i=1,im
+          if (k .le. kmax(i)) then
+!           tem       = g * zo(i,k) + cp * to(i,k)
+            tem       = phil(i,k) + cp * to(i,k)
+            heo(i,k)  = tem  + hvap * qo(i,k)
+            heso(i,k) = tem  + hvap * qeso(i,k)
+!c           heo(i,k)  = min(heo(i,k),heso(i,k))
+          endif
+        enddo
+      enddo
+!c
+!c  determine level with largest moist static energy
+!c  this is the level where updraft starts
+!c
+      do i=1,im
+        hmax(i) = heo(i,1)
+        kb(i)   = 1
+      enddo
+      do k = 2, km
+        do i=1,im
+          if (k .le. kbm(i)) then
+            if(heo(i,k).gt.hmax(i)) then
+              kb(i)   = k
+              hmax(i) = heo(i,k)
+            endif
+          endif
+        enddo
+      enddo
+!c
+      do k = 1, km1
+        do i=1,im
+          if (k .le. kmax(i)-1) then
+            dz      = .5 * (zo(i,k+1) - zo(i,k))
+            dp      = .5 * (pfld(i,k+1) - pfld(i,k))
+            es      = 0.01 * fpvs(to(i,k+1))      ! fpvs is in pa
+            pprime  = pfld(i,k+1) + epsm1 * es
+            qs      = eps * es / pprime
+            dqsdp   = - qs / pprime
+            desdt   = es * (fact1 / to(i,k+1) + fact2 / (to(i,k+1)**2))
+            dqsdt   = qs * pfld(i,k+1) * desdt / (es * pprime)
+            gamma   = el2orc * qeso(i,k+1) / (to(i,k+1)**2)
+            dt      = (g * dz + hvap * dqsdp * dp) / (cp * (1. + gamma))
+            dq      = dqsdt * dt + dqsdp * dp
+            to(i,k) = to(i,k+1) + dt
+            qo(i,k) = qo(i,k+1) + dq
+            po(i,k) = .5 * (pfld(i,k) + pfld(i,k+1))
+          endif
+        enddo
+      enddo
+!
+      do k = 1, km1
+        do i=1,im
+          if (k .le. kmax(i)-1) then
+            qeso(i,k) = 0.01 * fpvs(to(i,k))      ! fpvs is in pa
+            qeso(i,k) = eps * qeso(i,k) / (po(i,k) + epsm1*qeso(i,k))
+            val1      =             1.e-8
+            qeso(i,k) = max(qeso(i,k), val1)
+            val2      =           1.e-10
+            qo(i,k)   = max(qo(i,k), val2 )
+!           qo(i,k)   = min(qo(i,k),qeso(i,k))
+            val1      = 1.0
+            frh(i,k)  = 1. - min(qo(i,k)/qeso(i,k), val1)
+            heo(i,k)  = .5 * g * (zo(i,k) + zo(i,k+1)) +      &
+     &                  cp * to(i,k) + hvap * qo(i,k)
+            heso(i,k) = .5 * g * (zo(i,k) + zo(i,k+1)) +      &
+     &                  cp * to(i,k) + hvap * qeso(i,k)
+            uo(i,k)   = .5 * (uo(i,k) + uo(i,k+1))
+            vo(i,k)   = .5 * (vo(i,k) + vo(i,k+1))
+          endif
+        enddo
+      enddo
+!c
+!c  look for the level of free convection as cloud base
+!c
+      do i=1,im
+        flg(i)   = .true.
+        kbcon(i) = kmax(i)
+      enddo
+      do k = 1, km1
+        do i=1,im
+          if (flg(i).and.k.le.kbmax(i)) then
+            if(k.gt.kb(i).and.heo(i,kb(i)).gt.heso(i,k)) then
+              kbcon(i) = k
+              flg(i)   = .false.
+            endif
+          endif
+        enddo
+      enddo
+!c
+      do i=1,im
+        if(kbcon(i).eq.kmax(i)) cnvflg(i) = .false.
+      enddo
+!!
+      totflg = .true.
+      do i=1,im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c  determine critical convective inhibition
+!c  as a function of vertical velocity at cloud base.
+!c
+      do i=1,im
+        if(cnvflg(i)) then
+          pdot(i)  = 10.* dot(i,kbcon(i))
+        endif
+      enddo
+      do i=1,im
+        if(cnvflg(i)) then
+          if(slimsk(i).eq.1.) then
+            w1 = w1l
+            w2 = w2l
+            w3 = w3l
+            w4 = w4l
+          else
+            w1 = w1s
+            w2 = w2s
+            w3 = w3s
+            w4 = w4s
+          endif
+          if(pdot(i).le.w4) then
+            tem = (pdot(i) - w4) / (w3 - w4)
+          elseif(pdot(i).ge.-w4) then
+            tem = - (pdot(i) + w4) / (w4 - w3)
+          else
+            tem = 0.
+          endif
+          val1    =             -1.
+          tem = max(tem,val1)
+          val2    =             1.
+          tem = min(tem,val2)
+          tem = 1. - tem
+          tem1= .5*(cincrmax-cincrmin)
+          cincr = cincrmax - tem * tem1
+          pbcdif(i) = pfld(i,kb(i)) - pfld(i,kbcon(i))
+          if(pbcdif(i).gt.cincr) then
+             cnvflg(i) = .false.
+          endif
+        endif
+      enddo
+!!
+      totflg = .true.
+      do i=1,im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c  assume that updraft entrainment rate above cloud base is
+!c    same as that at cloud base
+!c
+      do k = 2, km1
+        do i=1,im
+          if(cnvflg(i).and.                            &
+     &      (k.gt.kbcon(i).and.k.lt.kmax(i))) then
+              xlamue(i,k) = xlamue(i,kbcon(i))
+          endif
+        enddo
+      enddo
+!c
+!c  assume the detrainment rate for the updrafts to be same as
+!c  the entrainment rate at cloud base
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          xlamud(i) = xlamue(i,kbcon(i))
+        endif
+      enddo
+!c
+!c  functions rapidly decreasing with height, mimicking a cloud ensemble
+!c    (Bechtold et al., 2008)
+!c
+      do k = 2, km1
+        do i=1,im
+          if(cnvflg(i).and.                          &
+     &      (k.gt.kbcon(i).and.k.lt.kmax(i))) then
+              tem = qeso(i,k)/qeso(i,kbcon(i))
+              fent1(i,k) = tem**2
+              fent2(i,k) = tem**3
+          endif
+        enddo
+      enddo
+!c
+!c  final entrainment rate as the sum of turbulent part and organized entrainment
+!c    depending on the environmental relative humidity
+!c    (Bechtold et al., 2008)
+!c
+      do k = 2, km1
+        do i=1,im
+          if(cnvflg(i).and.                         &
+     &      (k.ge.kbcon(i).and.k.lt.kmax(i))) then
+              tem = cxlamu * frh(i,k) * fent2(i,k)
+              xlamue(i,k) = xlamue(i,k)*fent1(i,k) + tem
+          endif
+        enddo
+      enddo
+!c
+!c  determine updraft mass flux for the subcloud layers
+!c
+      do k = km1, 1, -1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.lt.kbcon(i).and.k.ge.kb(i)) then
+              dz       = zi(i,k+1) - zi(i,k)
+              ptem     = 0.5*(xlamue(i,k)+xlamue(i,k+1))-xlamud(i)
+              eta(i,k) = eta(i,k+1) / (1. + ptem * dz)
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c  compute mass flux above cloud base
+!c
+      do k = 2, km1
+        do i = 1, im
+         if(cnvflg(i))then
+           if(k.gt.kbcon(i).and.k.lt.kmax(i)) then
+              dz       = zi(i,k) - zi(i,k-1)
+              ptem     = 0.5*(xlamue(i,k)+xlamue(i,k-1))-xlamud(i)
+              eta(i,k) = eta(i,k-1) * (1 + ptem * dz)
+           endif
+         endif
+        enddo
+      enddo
+!c
+!c  compute updraft cloud properties
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          indx         = kb(i)
+          hcko(i,indx) = heo(i,indx)
+          ucko(i,indx) = uo(i,indx)
+          vcko(i,indx) = vo(i,indx)
+          pwavo(i)     = 0.
+        endif
+      enddo
+!c
+!c  cloud property is modified by the entrainment process
+!c
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.lt.kmax(i)) then
+              dz   = zi(i,k) - zi(i,k-1)
+              tem  = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
+              tem1 = 0.5 * xlamud(i) * dz
+              factor = 1. + tem - tem1
+              ptem = 0.5 * tem + pgcon
+              ptem1= 0.5 * tem - pgcon
+              hcko(i,k) = ((1.-tem1)*hcko(i,k-1)+tem*0.5*     &
+     &                     (heo(i,k)+heo(i,k-1)))/factor
+              ucko(i,k) = ((1.-tem1)*ucko(i,k-1)+ptem*uo(i,k) &
+     &                     +ptem1*uo(i,k-1))/factor
+              vcko(i,k) = ((1.-tem1)*vcko(i,k-1)+ptem*vo(i,k) &
+     &                     +ptem1*vo(i,k-1))/factor
+              dbyo(i,k) = hcko(i,k) - heso(i,k)
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c   taking account into convection inhibition due to existence of
+!c    dry layers below cloud base
+!c
+      do i=1,im
+        flg(i) = cnvflg(i)
+        kbcon1(i) = kmax(i)
+      enddo
+      do k = 2, km1
+      do i=1,im
+        if (flg(i).and.k.lt.kmax(i)) then
+          if(k.ge.kbcon(i).and.dbyo(i,k).gt.0.) then
+            kbcon1(i) = k
+            flg(i)    = .false.
+          endif
+        endif
+      enddo
+      enddo
+      do i=1,im
+        if(cnvflg(i)) then
+          if(kbcon1(i).eq.kmax(i)) cnvflg(i) = .false.
+        endif
+      enddo
+      do i=1,im
+        if(cnvflg(i)) then
+          tem = pfld(i,kbcon(i)) - pfld(i,kbcon1(i))
+          if(tem.gt.dthk) then
+             cnvflg(i) = .false.
+          endif
+        endif
+      enddo
+!!
+      totflg = .true.
+      do i = 1, im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c  determine first guess cloud top as the level of zero buoyancy
+!c
+      do i = 1, im
+        flg(i) = cnvflg(i)
+        ktcon(i) = 1
+      enddo
+      do k = 2, km1
+      do i = 1, im
+        if (flg(i).and.k .lt. kmax(i)) then
+          if(k.gt.kbcon1(i).and.dbyo(i,k).lt.0.) then
+             ktcon(i) = k
+             flg(i)   = .false.
+          endif
+        endif
+      enddo
+      enddo
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          tem = pfld(i,kbcon(i))-pfld(i,ktcon(i))
+          if(tem.lt.cthk) cnvflg(i) = .false.
+        endif
+      enddo
+!!
+      totflg = .true.
+      do i = 1, im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c  search for downdraft originating level above theta-e minimum
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+           hmin(i) = heo(i,kbcon1(i))
+           lmin(i) = kbmax(i)
+           jmin(i) = kbmax(i)
+        endif
+      enddo
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i) .and. k .le. kbmax(i)) then
+            if(k.gt.kbcon1(i).and.heo(i,k).lt.hmin(i)) then
+               lmin(i) = k + 1
+               hmin(i) = heo(i,k)
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c  make sure that jmin(i) is within the cloud
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          jmin(i) = min(lmin(i),ktcon(i)-1)
+          jmin(i) = max(jmin(i),kbcon1(i)+1)
+          if(jmin(i).ge.ktcon(i)) cnvflg(i) = .false.
+        endif
+      enddo
+!c
+!c  specify upper limit of mass flux at cloud base
+!c
+!      val1 = 0.5        ! qingfu test
+      val1 = 0.2        ! qingfu test
+!      val1 = 0.1        ! qingfu test
+      do i = 1, im
+        if(cnvflg(i)) then
+!         xmbmax(i) = .1
+!
+          k = kbcon(i)
+          dp = 1000. * del(i,k)
+          xmbmax(i) = dp / (g * dt2)
+          xmbmax(i) = min(val1,xmbmax(i))
+!
+!         tem = dp / (g * dt2)
+!         xmbmax(i) = min(tem, xmbmax(i))
+        endif
+      enddo
+!c
+!c  compute cloud moisture property and precipitation
+!c
+      do i = 1, im
+        if (cnvflg(i)) then
+          aa1(i) = 0.
+          qcko(i,kb(i)) = qo(i,kb(i))
+!         rhbar(i) = 0.
+        endif
+      enddo
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.lt.ktcon(i)) then
+              dz    = zi(i,k) - zi(i,k-1)
+              gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+              qrch = qeso(i,k)                             &
+     &             + gamma * dbyo(i,k) / (hvap * (1. + gamma))
+!cj
+              tem  = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
+              tem1 = 0.5 * xlamud(i) * dz
+              factor = 1. + tem - tem1
+              qcko(i,k) = ((1.-tem1)*qcko(i,k-1)+tem*0.5*  &
+     &                     (qo(i,k)+qo(i,k-1)))/factor
+!cj
+              dq = eta(i,k) * (qcko(i,k) - qrch)
+!c
+!             rhbar(i) = rhbar(i) + qo(i,k) / qeso(i,k)
+!c
+!c  check if there is excess moisture to release latent heat
+!c
+              if(k.ge.kbcon(i).and.dq.gt.0.) then
+                etah = .5 * (eta(i,k) + eta(i,k-1))
+                if(ncloud.gt.0..and.k.gt.jmin(i)) then
+                  dp = 1000. * del(i,k)
+                  qlk = dq / (eta(i,k) + etah * (c0 + c1) * dz)
+                  dellal(i,k) = etah * c1 * dz * qlk * g / dp
+                else
+                  qlk = dq / (eta(i,k) + etah * c0 * dz)
+                endif
+                aa1(i) = aa1(i) - dz * g * qlk
+                qcko(i,k) = qlk + qrch
+                pwo(i,k) = etah * c0 * dz * qlk
+                pwavo(i) = pwavo(i) + pwo(i,k)
+              endif
+            endif
+          endif
+        enddo
+      enddo
+!c
+!     do i = 1, im
+!       if(cnvflg(i)) then
+!         indx = ktcon(i) - kb(i) - 1
+!         rhbar(i) = rhbar(i) / float(indx)
+!       endif
+!     enddo
+!c
+!c  calculate cloud work function
+!c
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.ge.kbcon(i).and.k.lt.ktcon(i)) then
+              dz1 = zo(i,k+1) - zo(i,k)
+              gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+              rfact =  1. + delta * cp * gamma            &
+     &                 * to(i,k) / hvap
+              aa1(i) = aa1(i) +                           &
+     &                 dz1 * (g / (cp * to(i,k)))         &
+     &                 * dbyo(i,k) / (1. + gamma)         &
+     &                 * rfact
+              val = 0.
+              aa1(i)=aa1(i)+                              &
+     &                 dz1 * g * delta *                  &
+     &                 max(val,(qeso(i,k) - qo(i,k)))
+            endif
+          endif
+        enddo
+      enddo
+      do i = 1, im
+        if(cnvflg(i).and.aa1(i).le.0.) cnvflg(i) = .false.
+      enddo
+!!
+      totflg = .true.
+      do i=1,im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c  estimate the onvective overshooting as the level 
+!c    where the [aafac * cloud work function] becomes zero,
+!c    which is the final cloud top
+!c
+      do i = 1, im
+        if (cnvflg(i)) then
+          aa2(i) = aafac * aa1(i)
+        endif
+      enddo
+!c
+      do i = 1, im
+        flg(i) = cnvflg(i)
+        ktcon1(i) = kmax(i) - 1
+      enddo
+      do k = 2, km1
+        do i = 1, im
+          if (flg(i)) then
+            if(k.ge.ktcon(i).and.k.lt.kmax(i)) then
+              dz1 = zo(i,k+1) - zo(i,k)
+              gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+              rfact =  1. + delta * cp * gamma          &
+     &                 * to(i,k) / hvap
+              aa2(i) = aa2(i) +                         &
+     &                 dz1 * (g / (cp * to(i,k)))       &
+     &                 * dbyo(i,k) / (1. + gamma)       &
+     &                 * rfact
+              if(aa2(i).lt.0.) then
+                ktcon1(i) = k
+                flg(i) = .false.
+              endif
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c  compute cloud moisture property, detraining cloud water 
+!c    and precipitation in overshooting layers 
+!c
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.ge.ktcon(i).and.k.lt.ktcon1(i)) then
+              dz    = zi(i,k) - zi(i,k-1)
+              gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+              qrch = qeso(i,k)                              &
+     &             + gamma * dbyo(i,k) / (hvap * (1. + gamma))
+!cj
+              tem  = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
+              tem1 = 0.5 * xlamud(i) * dz
+              factor = 1. + tem - tem1
+              qcko(i,k) = ((1.-tem1)*qcko(i,k-1)+tem*0.5*   &
+     &                     (qo(i,k)+qo(i,k-1)))/factor
+!cj
+              dq = eta(i,k) * (qcko(i,k) - qrch)
+!c
+!c  check if there is excess moisture to release latent heat
+!c
+              if(dq.gt.0.) then
+                etah = .5 * (eta(i,k) + eta(i,k-1))
+                if(ncloud.gt.0.) then
+                  dp = 1000. * del(i,k)
+                  qlk = dq / (eta(i,k) + etah * (c0 + c1) * dz)
+                  dellal(i,k) = etah * c1 * dz * qlk * g / dp
+                else
+                  qlk = dq / (eta(i,k) + etah * c0 * dz)
+                endif
+                qcko(i,k) = qlk + qrch
+                pwo(i,k) = etah * c0 * dz * qlk
+                pwavo(i) = pwavo(i) + pwo(i,k)
+              endif
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c exchange ktcon with ktcon1
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          kk = ktcon(i)
+          ktcon(i) = ktcon1(i)
+          ktcon1(i) = kk
+        endif
+      enddo
+!c
+!c  this section is ready for cloud water
+!c
+      if(ncloud.gt.0) then
+!c
+!c  compute liquid and vapor separation at cloud top
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          k = ktcon(i) - 1
+          gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+          qrch = qeso(i,k)                              &
+     &         + gamma * dbyo(i,k) / (hvap * (1. + gamma))
+          dq = qcko(i,k) - qrch
+!c
+!c  check if there is excess moisture to release latent heat
+!c
+          if(dq.gt.0.) then
+            qlko_ktcon(i) = dq
+            qcko(i,k) = qrch
+          endif
+        endif
+      enddo
+      endif
+!c
+!ccccc if(lat.eq.latd.and.lon.eq.lond.and.cnvflg(i)) then
+!ccccc   print *, ' aa1(i) before dwndrft =', aa1(i)
+!ccccc endif
+!c
+!c------- downdraft calculations
+!c
+!c--- compute precipitation efficiency in terms of windshear
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          vshear(i) = 0.
+        endif
+      enddo
+      do k = 2, km
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.le.ktcon(i)) then
+              shear= sqrt((uo(i,k)-uo(i,k-1)) ** 2      &
+     &                  + (vo(i,k)-vo(i,k-1)) ** 2)
+              vshear(i) = vshear(i) + shear
+            endif
+          endif
+        enddo
+      enddo
+      do i = 1, im
+        if(cnvflg(i)) then
+          vshear(i) = 1.e3 * vshear(i) / (zi(i,ktcon(i))-zi(i,kb(i)))
+          e1=1.591-.639*vshear(i)                       &
+     &       +.0953*(vshear(i)**2)-.00496*(vshear(i)**3)
+          edt(i)=1.-e1
+          val =         .9
+          edt(i) = min(edt(i),val)
+          val =         .0
+          edt(i) = max(edt(i),val)
+          edto(i)=edt(i)
+          edtx(i)=edt(i)
+        endif
+      enddo
+!c
+!c  determine detrainment rate between 1 and kbcon
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          sumx(i) = 0.
+        endif
+      enddo
+      do k = 1, km1
+      do i = 1, im
+        if(cnvflg(i).and.k.ge.1.and.k.lt.kbcon(i)) then
+          dz = zi(i,k+1) - zi(i,k)
+          sumx(i) = sumx(i) + dz
+        endif
+      enddo
+      enddo
+      do i = 1, im
+        beta = betas
+        if(slimsk(i).eq.1.) beta = betal
+        if(cnvflg(i)) then
+          dz  = (sumx(i)+zi(i,1))/float(kbcon(i))
+          tem = 1./float(kbcon(i))
+          xlamd(i) = (1.-beta**tem)/dz
+        endif
+      enddo
+!c
+!c  determine downdraft mass flux
+!c
+      do k = km1, 1, -1
+        do i = 1, im
+          if (cnvflg(i) .and. k .le. kmax(i)-1) then
+           if(k.lt.jmin(i).and.k.ge.kbcon(i)) then
+              dz        = zi(i,k+1) - zi(i,k)
+              ptem      = xlamdd - xlamde
+              etad(i,k) = etad(i,k+1) * (1. - ptem * dz)
+           else if(k.lt.kbcon(i)) then
+              dz        = zi(i,k+1) - zi(i,k)
+              ptem      = xlamd(i) + xlamdd - xlamde
+              etad(i,k) = etad(i,k+1) * (1. - ptem * dz)
+           endif
+          endif
+        enddo
+      enddo
+!c
+!c--- downdraft moisture properties
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          jmn = jmin(i)
+          hcdo(i,jmn) = heo(i,jmn)
+          qcdo(i,jmn) = qo(i,jmn)
+          qrcdo(i,jmn)= qeso(i,jmn)
+          ucdo(i,jmn) = uo(i,jmn)
+          vcdo(i,jmn) = vo(i,jmn)
+          pwevo(i) = 0.
+        endif
+      enddo
+!cj
+      do k = km1, 1, -1
+        do i = 1, im
+          if (cnvflg(i) .and. k.lt.jmin(i)) then
+              dz = zi(i,k+1) - zi(i,k)
+              if(k.ge.kbcon(i)) then
+                 tem  = xlamde * dz
+                 tem1 = 0.5 * xlamdd * dz
+              else
+                 tem  = xlamde * dz
+                 tem1 = 0.5 * (xlamd(i)+xlamdd) * dz
+              endif
+              factor = 1. + tem - tem1
+              ptem = 0.5 * tem - pgcon
+              ptem1= 0.5 * tem + pgcon
+              hcdo(i,k) = ((1.-tem1)*hcdo(i,k+1)+tem*0.5*       &
+     &                     (heo(i,k)+heo(i,k+1)))/factor
+              ucdo(i,k) = ((1.-tem1)*ucdo(i,k+1)+ptem*uo(i,k+1) &
+     &                     +ptem1*uo(i,k))/factor
+              vcdo(i,k) = ((1.-tem1)*vcdo(i,k+1)+ptem*vo(i,k+1) &
+     &                     +ptem1*vo(i,k))/factor
+              dbyo(i,k) = hcdo(i,k) - heso(i,k)
+          endif
+        enddo
+      enddo
+!c
+      do k = km1, 1, -1
+        do i = 1, im
+          if (cnvflg(i).and.k.lt.jmin(i)) then
+              gamma      = el2orc * qeso(i,k) / (to(i,k)**2)
+              qrcdo(i,k) = qeso(i,k)+                          &
+     &                (1./hvap)*(gamma/(1.+gamma))*dbyo(i,k)
+!             detad      = etad(i,k+1) - etad(i,k)
+!cj
+              dz = zi(i,k+1) - zi(i,k)
+              if(k.ge.kbcon(i)) then
+                 tem  = xlamde * dz
+                 tem1 = 0.5 * xlamdd * dz
+              else
+                 tem  = xlamde * dz
+                 tem1 = 0.5 * (xlamd(i)+xlamdd) * dz
+              endif
+              factor = 1. + tem - tem1
+              qcdo(i,k) = ((1.-tem1)*qcdo(i,k+1)+tem*0.5*     &
+     &                     (qo(i,k)+qo(i,k+1)))/factor
+!cj
+!             pwdo(i,k)  = etad(i,k+1) * qcdo(i,k+1) -
+!    &                     etad(i,k) * qrcdo(i,k)
+!             pwdo(i,k)  = pwdo(i,k) - detad *
+!    &                    .5 * (qrcdo(i,k) + qrcdo(i,k+1))
+!cj
+              pwdo(i,k)  = etad(i,k+1) * (qcdo(i,k) - qrcdo(i,k))
+              qcdo(i,k)  = qrcdo(i,k)
+              pwevo(i)   = pwevo(i) + pwdo(i,k)
+          endif
+        enddo
+      enddo
+!c
+!c--- final downdraft strength dependent on precip
+!c--- efficiency (edt), normalized condensate (pwav), and
+!c--- evaporate (pwev)
+!c
+      do i = 1, im
+        edtmax = edtmaxl
+        if(slimsk(i).eq.0.) edtmax = edtmaxs
+        if(cnvflg(i)) then
+          if(pwevo(i).lt.0.) then
+            edto(i) = -edto(i) * pwavo(i) / pwevo(i)
+            edto(i) = min(edto(i),edtmax)
+          else
+            edto(i) = 0.
+          endif
+        endif
+      enddo
+!c
+!c--- downdraft cloudwork functions
+!c
+      do k = km1, 1, -1
+        do i = 1, im
+          if (cnvflg(i) .and. k .lt. jmin(i)) then
+              gamma = el2orc * qeso(i,k) / to(i,k)**2
+              dhh=hcdo(i,k)
+              dt=to(i,k)
+              dg=gamma
+              dh=heso(i,k)
+              dz=-1.*(zo(i,k+1)-zo(i,k))
+              aa1(i)=aa1(i)+edto(i)*dz*(g/(cp*dt))*((dhh-dh)/(1.+dg)) &
+     &               *(1.+delta*cp*dg*dt/hvap)
+              val=0.
+              aa1(i)=aa1(i)+edto(i)*                    &
+     &        dz*g*delta*max(val,(qeso(i,k)-qo(i,k)))
+          endif
+        enddo
+      enddo
+      do i = 1, im
+        if(cnvflg(i).and.aa1(i).le.0.) then
+           cnvflg(i) = .false.
+        endif
+      enddo
+!!
+      totflg = .true.
+      do i=1,im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c--- what would the change be, that a cloud with unit mass
+!c--- will do to the environment?
+!c
+      do k = 1, km
+        do i = 1, im
+          if(cnvflg(i) .and. k .le. kmax(i)) then
+            dellah(i,k) = 0.
+            dellaq(i,k) = 0.
+            dellau(i,k) = 0.
+            dellav(i,k) = 0.
+          endif
+        enddo
+      enddo
+      do i = 1, im
+        if(cnvflg(i)) then
+          dp = 1000. * del(i,1)
+          dellah(i,1) = edto(i) * etad(i,1) * (hcdo(i,1)     &
+     &                   - heo(i,1)) * g / dp
+          dellaq(i,1) = edto(i) * etad(i,1) * (qcdo(i,1)     &
+     &                   - qo(i,1)) * g / dp
+          dellau(i,1) = edto(i) * etad(i,1) * (ucdo(i,1)     &
+     &                   - uo(i,1)) * g / dp
+          dellav(i,1) = edto(i) * etad(i,1) * (vcdo(i,1)     &
+     &                   - vo(i,1)) * g / dp
+        endif
+      enddo
+!c
+!c--- changed due to subsidence and entrainment
+!c
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i).and.k.lt.ktcon(i)) then
+              aup = 1.
+              if(k.le.kb(i)) aup = 0.
+              adw = 1.
+              if(k.gt.jmin(i)) adw = 0.
+              dp = 1000. * del(i,k)
+              dz = zi(i,k) - zi(i,k-1)
+!c
+              dv1h = heo(i,k)
+              dv2h = .5 * (heo(i,k) + heo(i,k-1))
+              dv3h = heo(i,k-1)
+              dv1q = qo(i,k)
+              dv2q = .5 * (qo(i,k) + qo(i,k-1))
+              dv3q = qo(i,k-1)
+              dv1u = uo(i,k)
+              dv2u = .5 * (uo(i,k) + uo(i,k-1))
+              dv3u = uo(i,k-1)
+              dv1v = vo(i,k)
+              dv2v = .5 * (vo(i,k) + vo(i,k-1))
+              dv3v = vo(i,k-1)
+!c
+              tem  = 0.5 * (xlamue(i,k)+xlamue(i,k-1))
+              tem1 = xlamud(i)
+!c
+              if(k.le.kbcon(i)) then
+                ptem  = xlamde
+                ptem1 = xlamd(i)+xlamdd
+              else
+                ptem  = xlamde
+                ptem1 = xlamdd
+              endif
+!cj
+              dellah(i,k) = dellah(i,k) +                           &
+     &     ((aup*eta(i,k)-adw*edto(i)*etad(i,k))*dv1h               &
+     &    - (aup*eta(i,k-1)-adw*edto(i)*etad(i,k-1))*dv3h           &
+     &    - (aup*tem*eta(i,k-1)+adw*edto(i)*ptem*etad(i,k))*dv2h*dz &
+     &    +  aup*tem1*eta(i,k-1)*.5*(hcko(i,k)+hcko(i,k-1))*dz      &
+     &    +  adw*edto(i)*ptem1*etad(i,k)*.5*(hcdo(i,k)+hcdo(i,k-1)) &
+     &         *dz) *g/dp
+!cj
+              dellaq(i,k) = dellaq(i,k) +                             &
+     &     ((aup*eta(i,k)-adw*edto(i)*etad(i,k))*dv1q                 &
+     &    - (aup*eta(i,k-1)-adw*edto(i)*etad(i,k-1))*dv3q             &
+     &    - (aup*tem*eta(i,k-1)+adw*edto(i)*ptem*etad(i,k))*dv2q*dz   &
+     &    +  aup*tem1*eta(i,k-1)*.5*(qcko(i,k)+qcko(i,k-1))*dz        &
+     &    +  adw*edto(i)*ptem1*etad(i,k)*.5*(qrcdo(i,k)+qrcdo(i,k-1)) &
+     &         *dz) *g/dp
+!23456789012345678901234567890123456789012345678901234567890123456789012
+!cj
+              dellau(i,k) = dellau(i,k) +                             &
+     &     ((aup*eta(i,k)-adw*edto(i)*etad(i,k))*dv1u                 &
+     &    - (aup*eta(i,k-1)-adw*edto(i)*etad(i,k-1))*dv3u             &
+     &    - (aup*tem*eta(i,k-1)+adw*edto(i)*ptem*etad(i,k))*dv2u*dz   &
+     &    +  aup*tem1*eta(i,k-1)*.5*(ucko(i,k)+ucko(i,k-1))*dz        &
+     &    + adw*edto(i)*ptem1*etad(i,k)*.5*(ucdo(i,k)+ucdo(i,k-1))*dz &
+     &    -  pgcon*(aup*eta(i,k-1)-adw*edto(i)*etad(i,k))*(dv1u-dv3u) &
+     &         ) *g/dp
+!cj
+              dellav(i,k) = dellav(i,k) +                             &
+     &     ((aup*eta(i,k)-adw*edto(i)*etad(i,k))*dv1v                 &
+     &    - (aup*eta(i,k-1)-adw*edto(i)*etad(i,k-1))*dv3v             &
+     &    - (aup*tem*eta(i,k-1)+adw*edto(i)*ptem*etad(i,k))*dv2v*dz   &
+     &    +  aup*tem1*eta(i,k-1)*.5*(vcko(i,k)+vcko(i,k-1))*dz        &
+     &    + adw*edto(i)*ptem1*etad(i,k)*.5*(vcdo(i,k)+vcdo(i,k-1))*dz &
+     &    -  pgcon*(aup*eta(i,k-1)-adw*edto(i)*etad(i,k))*(dv1v-dv3v) &
+     &         ) *g/dp
+!cj
+          endif
+        enddo
+      enddo
+!c
+!c------- cloud top
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          indx = ktcon(i)
+          dp = 1000. * del(i,indx)
+          dv1h = heo(i,indx-1)
+          dellah(i,indx) = eta(i,indx-1) *                    &
+     &                     (hcko(i,indx-1) - dv1h) * g / dp
+          dv1q = qo(i,indx-1)
+          dellaq(i,indx) = eta(i,indx-1) *                    &
+     &                     (qcko(i,indx-1) - dv1q) * g / dp
+          dv1u = uo(i,indx-1)
+          dellau(i,indx) = eta(i,indx-1) *                    &
+     &                     (ucko(i,indx-1) - dv1u) * g / dp
+          dv1v = vo(i,indx-1)
+          dellav(i,indx) = eta(i,indx-1) *                    &
+     &                     (vcko(i,indx-1) - dv1v) * g / dp
+!c
+!c  cloud water
+!c
+          dellal(i,indx) = eta(i,indx-1) *                    &
+     &                     qlko_ktcon(i) * g / dp
+        endif
+      enddo
+!c
+!c------- final changed variable per unit mass flux
+!c
+      do k = 1, km
+        do i = 1, im
+          if (cnvflg(i).and.k .le. kmax(i)) then
+            if(k.gt.ktcon(i)) then
+              qo(i,k) = q1(i,k)
+              to(i,k) = t1(i,k)
+            endif
+            if(k.le.ktcon(i)) then
+              qo(i,k) = dellaq(i,k) * mbdt + q1(i,k)
+              dellat = (dellah(i,k) - hvap * dellaq(i,k)) / cp
+              to(i,k) = dellat * mbdt + t1(i,k)
+              val   =           1.e-10
+              qo(i,k) = max(qo(i,k), val  )
+            endif
+          endif
+        enddo
+      enddo
+!c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!c
+!c--- the above changed environment is now used to calulate the
+!c--- effect the arbitrary cloud (with unit mass flux)
+!c--- would have on the stability,
+!c--- which then is used to calculate the real mass flux,
+!c--- necessary to keep this change in balance with the large-scale
+!c--- destabilization.
+!c
+!c--- environmental conditions again, first heights
+!c
+      do k = 1, km
+        do i = 1, im
+          if(cnvflg(i) .and. k .le. kmax(i)) then
+            qeso(i,k) = 0.01 * fpvs(to(i,k))      ! fpvs is in pa
+            qeso(i,k) = eps * qeso(i,k) / (pfld(i,k)+epsm1*qeso(i,k))
+            val       =             1.e-8
+            qeso(i,k) = max(qeso(i,k), val )
+!           tvo(i,k)  = to(i,k) + delta * to(i,k) * qo(i,k)
+          endif
+        enddo
+      enddo
+!c
+!c--- moist static energy
+!c
+      do k = 1, km1
+        do i = 1, im
+          if(cnvflg(i) .and. k .le. kmax(i)-1) then
+            dz = .5 * (zo(i,k+1) - zo(i,k))
+            dp = .5 * (pfld(i,k+1) - pfld(i,k))
+            es = 0.01 * fpvs(to(i,k+1))      ! fpvs is in pa
+            pprime = pfld(i,k+1) + epsm1 * es
+            qs = eps * es / pprime
+            dqsdp = - qs / pprime
+            desdt = es * (fact1 / to(i,k+1) + fact2 / (to(i,k+1)**2))
+            dqsdt = qs * pfld(i,k+1) * desdt / (es * pprime)
+            gamma = el2orc * qeso(i,k+1) / (to(i,k+1)**2)
+            dt = (g * dz + hvap * dqsdp * dp) / (cp * (1. + gamma))
+            dq = dqsdt * dt + dqsdp * dp
+            to(i,k) = to(i,k+1) + dt
+            qo(i,k) = qo(i,k+1) + dq
+            po(i,k) = .5 * (pfld(i,k) + pfld(i,k+1))
+          endif
+        enddo
+      enddo
+      do k = 1, km1
+        do i = 1, im
+          if(cnvflg(i) .and. k .le. kmax(i)-1) then
+            qeso(i,k) = 0.01 * fpvs(to(i,k))      ! fpvs is in pa
+            qeso(i,k) = eps * qeso(i,k) / (po(i,k) + epsm1 * qeso(i,k))
+            val1      =             1.e-8
+            qeso(i,k) = max(qeso(i,k), val1)
+            val2      =           1.e-10
+            qo(i,k)   = max(qo(i,k), val2 )
+!           qo(i,k)   = min(qo(i,k),qeso(i,k))
+            heo(i,k)   = .5 * g * (zo(i,k) + zo(i,k+1)) +     &
+     &                    cp * to(i,k) + hvap * qo(i,k)
+            heso(i,k) = .5 * g * (zo(i,k) + zo(i,k+1)) +      &
+     &                  cp * to(i,k) + hvap * qeso(i,k)
+          endif
+        enddo
+      enddo
+      do i = 1, im
+        if(cnvflg(i)) then
+          k = kmax(i)
+          heo(i,k) = g * zo(i,k) + cp * to(i,k) + hvap * qo(i,k)
+          heso(i,k) = g * zo(i,k) + cp * to(i,k) + hvap * qeso(i,k)
+!c         heo(i,k) = min(heo(i,k),heso(i,k))
+        endif
+      enddo
+!c
+!c**************************** static control
+!c
+!c------- moisture and cloud work functions
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          xaa0(i) = 0.
+          xpwav(i) = 0.
+        endif
+      enddo
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          indx = kb(i)
+          hcko(i,indx) = heo(i,indx)
+          qcko(i,indx) = qo(i,indx)
+        endif
+      enddo
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.le.ktcon(i)) then
+              dz = zi(i,k) - zi(i,k-1)
+              tem  = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
+              tem1 = 0.5 * xlamud(i) * dz
+              factor = 1. + tem - tem1
+              hcko(i,k) = ((1.-tem1)*hcko(i,k-1)+tem*0.5*    &
+     &                     (heo(i,k)+heo(i,k-1)))/factor
+            endif
+          endif
+        enddo
+      enddo
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.lt.ktcon(i)) then
+              dz = zi(i,k) - zi(i,k-1)
+              gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+              xdby = hcko(i,k) - heso(i,k)
+              xqrch = qeso(i,k)                             &
+     &              + gamma * xdby / (hvap * (1. + gamma))
+!cj
+              tem  = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
+              tem1 = 0.5 * xlamud(i) * dz
+              factor = 1. + tem - tem1
+              qcko(i,k) = ((1.-tem1)*qcko(i,k-1)+tem*0.5*   &
+     &                     (qo(i,k)+qo(i,k-1)))/factor
+!cj
+              dq = eta(i,k) * (qcko(i,k) - xqrch)
+!c
+              if(k.ge.kbcon(i).and.dq.gt.0.) then
+                etah = .5 * (eta(i,k) + eta(i,k-1))
+                if(ncloud.gt.0..and.k.gt.jmin(i)) then
+                  qlk = dq / (eta(i,k) + etah * (c0 + c1) * dz)
+                else
+                  qlk = dq / (eta(i,k) + etah * c0 * dz)
+                endif
+                if(k.lt.ktcon1(i)) then
+                  xaa0(i) = xaa0(i) - dz * g * qlk
+                endif
+                qcko(i,k) = qlk + xqrch
+                xpw = etah * c0 * dz * qlk
+                xpwav(i) = xpwav(i) + xpw
+              endif
+            endif
+            if(k.ge.kbcon(i).and.k.lt.ktcon1(i)) then
+              dz1 = zo(i,k+1) - zo(i,k)
+              gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+              rfact =  1. + delta * cp * gamma          &
+     &                 * to(i,k) / hvap
+              xaa0(i) = xaa0(i)                         &
+     &                + dz1 * (g / (cp * to(i,k)))      &
+     &                * xdby / (1. + gamma)             &
+     &                * rfact
+              val=0.
+              xaa0(i)=xaa0(i)+                          &
+     &                 dz1 * g * delta *                &
+     &                 max(val,(qeso(i,k) - qo(i,k)))
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c------- downdraft calculations
+!c
+!c--- downdraft moisture properties
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          jmn = jmin(i)
+          hcdo(i,jmn) = heo(i,jmn)
+          qcdo(i,jmn) = qo(i,jmn)
+          qrcd(i,jmn) = qeso(i,jmn)
+          xpwev(i) = 0.
+        endif
+      enddo
+!cj
+      do k = km1, 1, -1
+        do i = 1, im
+          if (cnvflg(i) .and. k.lt.jmin(i)) then
+              dz = zi(i,k+1) - zi(i,k)
+              if(k.ge.kbcon(i)) then
+                 tem  = xlamde * dz
+                 tem1 = 0.5 * xlamdd * dz
+              else
+                 tem  = xlamde * dz
+                 tem1 = 0.5 * (xlamd(i)+xlamdd) * dz
+              endif
+              factor = 1. + tem - tem1
+              hcdo(i,k) = ((1.-tem1)*hcdo(i,k+1)+tem*0.5*      &
+     &                     (heo(i,k)+heo(i,k+1)))/factor
+          endif
+        enddo
+      enddo
+!cj
+      do k = km1, 1, -1
+        do i = 1, im
+          if (cnvflg(i) .and. k .lt. jmin(i)) then
+              dq = qeso(i,k)
+              dt = to(i,k)
+              gamma    = el2orc * dq / dt**2
+              dh       = hcdo(i,k) - heso(i,k)
+              qrcd(i,k)=dq+(1./hvap)*(gamma/(1.+gamma))*dh
+!             detad    = etad(i,k+1) - etad(i,k)
+!cj
+              dz = zi(i,k+1) - zi(i,k)
+              if(k.ge.kbcon(i)) then
+                 tem  = xlamde * dz
+                 tem1 = 0.5 * xlamdd * dz
+              else
+                 tem  = xlamde * dz
+                 tem1 = 0.5 * (xlamd(i)+xlamdd) * dz
+              endif
+              factor = 1. + tem - tem1
+              qcdo(i,k) = ((1.-tem1)*qcdo(i,k+1)+tem*0.5*     &
+     &                     (qo(i,k)+qo(i,k+1)))/factor
+!cj
+!             xpwd     = etad(i,k+1) * qcdo(i,k+1) -
+!    &                   etad(i,k) * qrcd(i,k)
+!             xpwd     = xpwd - detad *
+!    &                 .5 * (qrcd(i,k) + qrcd(i,k+1))
+!cj
+              xpwd     = etad(i,k+1) * (qcdo(i,k) - qrcd(i,k))
+              qcdo(i,k)= qrcd(i,k)
+              xpwev(i) = xpwev(i) + xpwd
+          endif
+        enddo
+      enddo
+!c
+      do i = 1, im
+        edtmax = edtmaxl
+        if(slimsk(i).eq.0.) edtmax = edtmaxs
+        if(cnvflg(i)) then
+          if(xpwev(i).ge.0.) then
+            edtx(i) = 0.
+          else
+            edtx(i) = -edtx(i) * xpwav(i) / xpwev(i)
+            edtx(i) = min(edtx(i),edtmax)
+          endif
+        endif
+      enddo
+!c
+!c
+!c--- downdraft cloudwork functions
+!c
+!c
+      do k = km1, 1, -1
+        do i = 1, im
+          if (cnvflg(i) .and. k.lt.jmin(i)) then
+              gamma = el2orc * qeso(i,k) / to(i,k)**2
+              dhh=hcdo(i,k)
+              dt= to(i,k)
+              dg= gamma
+              dh= heso(i,k)
+              dz=-1.*(zo(i,k+1)-zo(i,k))
+              xaa0(i)=xaa0(i)+edtx(i)*dz*(g/(cp*dt))*((dhh-dh)/(1.+dg)) &
+     &                *(1.+delta*cp*dg*dt/hvap)
+              val=0.
+              xaa0(i)=xaa0(i)+edtx(i)*                         &
+     &        dz*g*delta*max(val,(qeso(i,k)-qo(i,k)))
+          endif
+        enddo
+      enddo
+!c
+!c  calculate critical cloud work function
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          if(pfld(i,ktcon(i)).lt.pcrit(15))then
+            acrt(i)=acrit(15)*(975.-pfld(i,ktcon(i)))          &
+     &              /(975.-pcrit(15))
+          else if(pfld(i,ktcon(i)).gt.pcrit(1))then
+            acrt(i)=acrit(1)
+          else
+            k =  int((850. - pfld(i,ktcon(i)))/50.) + 2
+            k = min(k,15)
+            k = max(k,2)
+            acrt(i)=acrit(k)+(acrit(k-1)-acrit(k))*            &
+     &           (pfld(i,ktcon(i))-pcrit(k))/(pcrit(k-1)-pcrit(k))
+          endif
+        endif
+      enddo
+      do i = 1, im
+        if(cnvflg(i)) then
+          if(slimsk(i).eq.1.) then
+            w1 = w1l
+            w2 = w2l
+            w3 = w3l
+            w4 = w4l
+          else
+            w1 = w1s
+            w2 = w2s
+            w3 = w3s
+            w4 = w4s
+          endif
+!c
+!c  modify critical cloud workfunction by cloud base vertical velocity
+!c
+          if(pdot(i).le.w4) then
+            acrtfct(i) = (pdot(i) - w4) / (w3 - w4)
+          elseif(pdot(i).ge.-w4) then
+            acrtfct(i) = - (pdot(i) + w4) / (w4 - w3)
+          else
+            acrtfct(i) = 0.
+          endif
+          val1    =             -1.
+          acrtfct(i) = max(acrtfct(i),val1)
+          val2    =             1.
+          acrtfct(i) = min(acrtfct(i),val2)
+          acrtfct(i) = 1. - acrtfct(i)
+!c
+!c  modify acrtfct(i) by colume mean rh if rhbar(i) is greater than 80 percent
+!c
+!c         if(rhbar(i).ge..8) then
+!c           acrtfct(i) = acrtfct(i) * (.9 - min(rhbar(i),.9)) * 10.
+!c         endif
+!c
+!c  modify adjustment time scale by cloud base vertical velocity
+!c
+          val1=0.
+          dtconv(i) = dt2 + max((1800. - dt2),val1) *         &
+     &                (pdot(i) - w2) / (w1 - w2)
+!c         dtconv(i) = max(dtconv(i), dt2)
+!c         dtconv(i) = 1800. * (pdot(i) - w2) / (w1 - w2)
+          dtconv(i) = max(dtconv(i),dtmin)
+          dtconv(i) = min(dtconv(i),dtmax)
+!c
+        endif
+      enddo
+!c
+!c--- large scale forcing
+!c
+      xmbmx1=-1.e20
+      do i= 1, im
+        if(cnvflg(i)) then
+          fld(i)=(aa1(i)-acrt(i)* acrtfct(i))/dtconv(i)
+          if(fld(i).le.0.) cnvflg(i) = .false.
+        endif
+        if(cnvflg(i)) then
+!c         xaa0(i) = max(xaa0(i),0.)
+          xk(i) = (xaa0(i) - aa1(i)) / mbdt
+          if(xk(i).ge.0.) cnvflg(i) = .false.
+        endif
+!c
+!c--- kernel, cloud base mass flux
+!c
+        if(cnvflg(i)) then
+          xmb(i) = -fld(i) / xk(i)
+          xmb(i) = min(xmb(i),xmbmax(i))
+          xmbmx1=max(xmbmx1,xmb(i))
+        endif
+      enddo
+!      if(xmbmx1.gt.0.4)print*,'qingfu test xmbmx1=',xmbmx1
+!!
+      totflg = .true.
+      do i=1,im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c  restore to,qo,uo,vo to t1,q1,u1,v1 in case convection stops
+!c
+      do k = 1, km
+        do i = 1, im
+          if (cnvflg(i) .and. k .le. kmax(i)) then
+            to(i,k) = t1(i,k)
+            qo(i,k) = q1(i,k)
+            uo(i,k) = u1(i,k)
+            vo(i,k) = v1(i,k)
+            qeso(i,k) = 0.01 * fpvs(t1(i,k))      ! fpvs is in pa
+            qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
+            val     =             1.e-8
+            qeso(i,k) = max(qeso(i,k), val )
+          endif
+        enddo
+      enddo
+!c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!c
+!c--- feedback: simply the changes from the cloud with unit mass flux
+!c---           multiplied by  the mass flux necessary to keep the
+!c---           equilibrium with the larger-scale.
+!c
+      do i = 1, im
+        delhbar(i) = 0.
+        delqbar(i) = 0.
+        deltbar(i) = 0.
+        delubar(i) = 0.
+        delvbar(i) = 0.
+        qcond(i) = 0.
+      enddo
+      do k = 1, km
+        do i = 1, im
+          if (cnvflg(i) .and. k .le. kmax(i)) then
+            if(k.le.ktcon(i)) then
+              dellat = (dellah(i,k) - hvap * dellaq(i,k)) / cp
+              t1(i,k) = t1(i,k) + dellat * xmb(i) * dt2
+              q1(i,k) = q1(i,k) + dellaq(i,k) * xmb(i) * dt2
+              tem = 1./rcs(i)
+              u1(i,k) = u1(i,k) + dellau(i,k) * xmb(i) * dt2 * tem
+              v1(i,k) = v1(i,k) + dellav(i,k) * xmb(i) * dt2 * tem
+              dp = 1000. * del(i,k)
+              delhbar(i) = delhbar(i) + dellah(i,k)*xmb(i)*dp/g
+              delqbar(i) = delqbar(i) + dellaq(i,k)*xmb(i)*dp/g
+              deltbar(i) = deltbar(i) + dellat*xmb(i)*dp/g
+              delubar(i) = delubar(i) + dellau(i,k)*xmb(i)*dp/g
+              delvbar(i) = delvbar(i) + dellav(i,k)*xmb(i)*dp/g
+            endif
+          endif
+        enddo
+      enddo
+      do k = 1, km
+        do i = 1, im
+          if (cnvflg(i) .and. k .le. kmax(i)) then
+            if(k.le.ktcon(i)) then
+              qeso(i,k) = 0.01 * fpvs(t1(i,k))      ! fpvs is in pa
+              qeso(i,k) = eps * qeso(i,k)/(pfld(i,k) + epsm1*qeso(i,k))
+              val     =             1.e-8
+              qeso(i,k) = max(qeso(i,k), val )
+            endif
+          endif
+        enddo
+      enddo
+!c
+      do i = 1, im
+        rntot(i) = 0.
+        delqev(i) = 0.
+        delq2(i) = 0.
+        flg(i) = cnvflg(i)
+      enddo
+      do k = km, 1, -1
+        do i = 1, im
+          if (cnvflg(i) .and. k .le. kmax(i)) then
+            if(k.lt.ktcon(i)) then
+              aup = 1.
+              if(k.le.kb(i)) aup = 0.
+              adw = 1.
+              if(k.ge.jmin(i)) adw = 0.
+              rain =  aup * pwo(i,k) + adw * edto(i) * pwdo(i,k)
+              rntot(i) = rntot(i) + rain * xmb(i) * .001 * dt2
+            endif
+          endif
+        enddo
+      enddo
+      do k = km, 1, -1
+        do i = 1, im
+          if (k .le. kmax(i)) then
+            deltv(i) = 0.
+            delq(i) = 0.
+            qevap(i) = 0.
+            if(cnvflg(i).and.k.lt.ktcon(i)) then
+              aup = 1.
+              if(k.le.kb(i)) aup = 0.
+              adw = 1.
+              if(k.ge.jmin(i)) adw = 0.
+              rain =  aup * pwo(i,k) + adw * edto(i) * pwdo(i,k)
+              rn(i) = rn(i) + rain * xmb(i) * .001 * dt2
+            endif
+            if(flg(i).and.k.lt.ktcon(i)) then
+              evef = edt(i) * evfact
+              if(slimsk(i).eq.1.) evef=edt(i) * evfactl
+!             if(slimsk(i).eq.1.) evef=.07
+!c             if(slimsk(i).ne.1.) evef = 0.
+              qcond(i) = evef * (q1(i,k) - qeso(i,k))     &
+     &                 / (1. + el2orc * qeso(i,k) / t1(i,k)**2)
+              dp = 1000. * del(i,k)
+              if(rn(i).gt.0..and.qcond(i).lt.0.) then
+                qevap(i) = -qcond(i) * (1.-exp(-.32*sqrt(dt2*rn(i))))
+                qevap(i) = min(qevap(i), rn(i)*1000.*g/dp)
+                delq2(i) = delqev(i) + .001 * qevap(i) * dp / g
+              endif
+              if(rn(i).gt.0..and.qcond(i).lt.0..and.      &
+     &           delq2(i).gt.rntot(i)) then
+                qevap(i) = 1000.* g * (rntot(i) - delqev(i)) / dp
+                flg(i) = .false.
+              endif
+              if(rn(i).gt.0..and.qevap(i).gt.0.) then
+                q1(i,k) = q1(i,k) + qevap(i)
+                t1(i,k) = t1(i,k) - elocp * qevap(i)
+                rn(i) = rn(i) - .001 * qevap(i) * dp / g
+                deltv(i) = - elocp*qevap(i)/dt2
+                delq(i) =  + qevap(i)/dt2
+                delqev(i) = delqev(i) + .001*dp*qevap(i)/g
+              endif
+              dellaq(i,k) = dellaq(i,k) + delq(i) / xmb(i)
+              delqbar(i) = delqbar(i) + delq(i)*dp/g
+              deltbar(i) = deltbar(i) + deltv(i)*dp/g
+            endif
+          endif
+        enddo
+      enddo
+!cj
+!     do i = 1, im
+!     if(me.eq.31.and.cnvflg(i)) then
+!     if(cnvflg(i)) then
+!       print *, ' deep delhbar, delqbar, deltbar = ',
+!    &             delhbar(i),hvap*delqbar(i),cp*deltbar(i)
+!       print *, ' deep delubar, delvbar = ',delubar(i),delvbar(i)
+!       print *, ' precip =', hvap*rn(i)*1000./dt2
+!       print*,'pdif= ',pfld(i,kbcon(i))-pfld(i,ktcon(i))
+!     endif
+!     enddo
+!c
+!c  precipitation rate converted to actual precip
+!c  in unit of m instead of kg
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+!c
+!c  in the event of upper level rain evaporation and lower level downdraft
+!c    moistening, rn can become negative, in this case, we back out of the
+!c    heating and the moistening
+!c
+          if(rn(i).lt.0..and..not.flg(i)) rn(i) = 0.
+          if(rn(i).le.0.) then
+            rn(i) = 0.
+          else
+            ktop(i) = ktcon(i)
+            kbot(i) = kbcon(i)
+            kcnv(i) = 1
+            cldwrk(i) = aa1(i)
+          endif
+        endif
+      enddo
+!c
+!c  cloud water
+!c
+      if (ncloud.gt.0) then
+!
+      val1=1.0
+      val2=0.0
+      do k = 1, km
+        do i = 1, im
+          if (cnvflg(i) .and. rn(i).gt.0.) then
+            if (k.gt.kb(i).and.k.le.ktcon(i)) then
+              tem  = dellal(i,k) * xmb(i) * dt2
+              tem1 = max(val2, min(val1, (tcr-t1(i,k))*tcrf))
+              if (ql(i,k,2) .gt. -999.0) then
+                ql(i,k,1) = ql(i,k,1) + tem * tem1            ! ice
+                ql(i,k,2) = ql(i,k,2) + tem *(1.0-tem1)       ! water
+              else
+                ql(i,k,1) = ql(i,k,1) + tem
+              endif
+            endif
+          endif
+        enddo
+      enddo
+!
+      endif
+!c
+      do k = 1, km
+        do i = 1, im
+          if(cnvflg(i).and.rn(i).le.0.) then
+            if (k .le. kmax(i)) then
+              t1(i,k) = to(i,k)
+              q1(i,k) = qo(i,k)
+              u1(i,k) = uo(i,k)
+              v1(i,k) = vo(i,k)
+            endif
+          endif
+        enddo
+      enddo
+!
+! hchuang code change
+!
+!      do k = 1, km
+!        do i = 1, im
+!          if(cnvflg(i).and.rn(i).gt.0.) then
+!            if(k.ge.kb(i) .and. k.lt.ktop(i)) then
+!              ud_mf(i,k) = eta(i,k) * xmb(i) * dt2
+!            endif
+!          endif
+!        enddo
+!      enddo
+!      do i = 1, im
+!        if(cnvflg(i).and.rn(i).gt.0.) then
+!           k = ktop(i)-1
+!           dt_mf(i,k) = ud_mf(i,k)
+!        endif
+!      enddo
+!      do k = 1, km
+!        do i = 1, im
+!          if(cnvflg(i).and.rn(i).gt.0.) then
+!            if(k.ge.1 .and. k.le.jmin(i)) then
+!              dd_mf(i,k) = edto(i) * etad(i,k) * xmb(i) * dt2
+!            endif
+!          endif
+!        enddo
+!      enddo
+!!
+      return
+      end subroutine sascnvn      
+
+      subroutine shalcnv(im,ix,km,jcap,delt,del,prsl,ps,phil,ql,    &
+     &     q1,t1,u1,v1,rcs,rn,kbot,ktop,kcnv,slimsk,                &
+     &     dot,ncloud,hpbl,sflx)
+!     &     dot,ncloud,hpbl,heat,evap,ud_mf,dt_mf)
+!    &     dot,ncloud,hpbl,heat,evap,ud_mf,dt_mf,me)
+!
+      USE MODULE_GFS_MACHINE, ONLY : kind_phys
+      USE MODULE_GFS_FUNCPHYS , ONLY : fpvs
+      USE MODULE_GFS_PHYSCONS, grav => con_g, cp => con_cp           &
+     &,             hvap => con_hvap                                 &
+     &,             rv => con_rv, fv => con_fvirt, t0c => con_t0c    &
+     &,             rd => con_rd, cvap => con_cvap, cliq => con_cliq &
+     &,             eps => con_eps, epsm1 => con_epsm1
+
+!      use machine , only : kind_phys
+!      use funcphys , only : fpvs
+!      use physcons, grav => con_g, cp => con_cp, hvap => con_hvap      &
+!     &,             rv => con_rv, fv => con_fvirt, t0c => con_t0c      &
+!     &,             rd => con_rd, cvap => con_cvap, cliq => con_cliq   &
+!     &,             eps => con_eps, epsm1 => con_epsm1
+      implicit none
+!
+      integer            im, ix,  km, jcap, ncloud,                &
+     &                   kbot(im), ktop(im), kcnv(im) 
+!    &,                  me
+      real(kind=kind_phys) delt
+      real(kind=kind_phys) ps(im),     del(ix,km),  prsl(ix,km),   &
+     &                     ql(ix,km,2),q1(ix,km),   t1(ix,km),     &
+     &                     u1(ix,km),  v1(ix,km),   rcs(im),       &
+     &                     rn(im),     slimsk(im),                 &
+     &                     dot(ix,km), phil(ix,km), hpbl(im),      & 
+     &                     heat(im),   evap(im)
+! hchuang code change mass flux output
+!     &,                    ud_mf(im,km),dt_mf(im,km)
+!
+      integer              i,j,indx, jmn, k, kk, latd, lond, km1
+      integer              kpbl(im)
+!
+      real(kind=kind_phys) c0,      cpoel,   dellat,  delta,       &
+     &                     desdt,   deta,    detad,   dg,          &
+     &                     dh,      dhh,     dlnsig,  dp,          &
+     &                     dq,      dqsdp,   dqsdt,   dt,          &
+     &                     dt2,     dtmax,   dtmin,   dv1h,        &
+     &                     dv1q,    dv2h,    dv2q,    dv1u,        &
+     &                     dv1v,    dv2u,    dv2v,    dv3q,        &
+     &                     dv3h,    dv3u,    dv3v,    clam,        &
+     &                     dz,      dz1,     e1,                   &
+     &                     el2orc,  elocp,   aafac,                &
+     &                     es,      etah,    h1,      dthk,        &
+     &                     evef,    evfact,  evfactl, fact1,       &
+     &                     fact2,   factor,  fjcap,                &
+     &                     g,       gamma,   pprime,  betaw,       &
+     &                     qlk,     qrch,    qs,      c1,          &
+     &                     rain,    rfact,   shear,   tem1,        &
+     &                     tem2,    terr,    val,     val1,        &
+     &                     val2,    w1,      w1l,     w1s,         &
+     &                     w2,      w2l,     w2s,     w3,          &
+     &                     w3l,     w3s,     w4,      w4l,         &
+     &                     w4s,     tem,     ptem,    ptem1,       &
+     &                     pgcon
+!
+      integer              kb(im), kbcon(im), kbcon1(im),          &
+     &                     ktcon(im), ktcon1(im),                  &
+     &                     kbm(im), kmax(im)
+!
+      real(kind=kind_phys) aa1(im),                                &
+     &                     delhbar(im), delq(im),   delq2(im),     &
+     &                     delqbar(im), delqev(im), deltbar(im),   &
+     &                     deltv(im),   edt(im),                   &
+     &                     wstar(im),   sflx(im),                  &
+     &                     pdot(im),    po(im,km),                 &
+     &                     qcond(im),   qevap(im),  hmax(im),      &
+     &                     rntot(im),   vshear(im),                &
+     &                     xlamud(im),  xmb(im),    xmbmax(im),    &
+     &                     delubar(im), delvbar(im)
+!c
+      real(kind=kind_phys) cincr, cincrmax, cincrmin
+!cc
+!c  physical parameters
+      parameter(g=grav)
+      parameter(cpoel=cp/hvap,elocp=hvap/cp,                       &
+     &          el2orc=hvap*hvap/(rv*cp))
+      parameter(terr=0.,c0=.002,c1=5.e-4,delta=fv)
+      parameter(fact1=(cvap-cliq)/rv,fact2=hvap/rv-fact1*t0c)
+      parameter(cincrmax=180.,cincrmin=120.,dthk=25.)
+      parameter(h1=0.33333333)
+!c  local variables and arrays
+      real(kind=kind_phys) pfld(im,km),    to(im,km),     qo(im,km),   &
+     &                     uo(im,km),      vo(im,km),     qeso(im,km)
+!c  cloud water
+!     real(kind=kind_phys) qlko_ktcon(im), dellal(im,km), tvo(im,km),
+      real(kind=kind_phys) qlko_ktcon(im), dellal(im,km),                &
+     &                     dbyo(im,km),    zo(im,km),     xlamue(im,km), &
+     &                     heo(im,km),     heso(im,km),                  &
+     &                     dellah(im,km),  dellaq(im,km),                &
+     &                     dellau(im,km),  dellav(im,km), hcko(im,km),   &
+     &                     ucko(im,km),    vcko(im,km),   qcko(im,km),   &
+     &                     eta(im,km),     zi(im,km),     pwo(im,km),    &
+     &                     tx1(im)
+!
+      logical totflg, cnvflg(im), flg(im)
+!
+      real(kind=kind_phys) tf, tcr, tcrf
+      parameter (tf=233.16, tcr=263.16, tcrf=1.0/(tcr-tf))
+!
+!c-----------------------------------------------------------------------
+!
+      km1 = km - 1
+!c
+!c  compute surface buoyancy flux
+!c
+!      do i=1,im
+!        sflx(i) = heat(i)+fv*t1(i,1)*evap(i)
+!      enddo
+!c
+!c  initialize arrays
+!c
+      do i=1,im
+        cnvflg(i) = .true.
+        if(kcnv(i).eq.1) cnvflg(i) = .false.
+        if(sflx(i).le.0.) cnvflg(i) = .false.
+        if(cnvflg(i)) then
+          kbot(i)=km+1
+          ktop(i)=0
+        endif
+        rn(i)=0.
+        kbcon(i)=km
+        ktcon(i)=1
+        kb(i)=km
+        pdot(i) = 0.
+        qlko_ktcon(i) = 0.
+        edt(i)  = 0.
+        aa1(i)  = 0.
+        vshear(i) = 0.
+      enddo
+! hchuang code change
+!      do k = 1, km
+!        do i = 1, im
+!          ud_mf(i,k) = 0.
+!          dt_mf(i,k) = 0.
+!        enddo
+!      enddo
+!!
+      totflg = .true.
+      do i=1,im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+      dt2   = delt
+      val   =         1200.
+      dtmin = max(dt2, val )
+      val   =         3600.
+      dtmax = max(dt2, val )
+!c  model tunable parameters are all here
+      clam    = .3
+      aafac   = .1
+      betaw   = .03
+!c     evef    = 0.07
+      evfact  = 0.3
+      evfactl = 0.3
+!
+!     pgcon   = 0.7     ! Gregory et al. (1997, QJRMS)
+      pgcon   = 0.55    ! Zhang & Wu (2003,JAS)
+      fjcap   = (float(jcap) / 126.) ** 2
+      val     =           1.
+      fjcap   = max(fjcap,val)
+      w1l     = -8.e-3 
+      w2l     = -4.e-2
+      w3l     = -5.e-3 
+      w4l     = -5.e-4
+      w1s     = -2.e-4
+      w2s     = -2.e-3
+      w3s     = -1.e-3
+      w4s     = -2.e-5
+!c
+!c  define top layer for search of the downdraft originating layer
+!c  and the maximum thetae for updraft
+!c
+      do i=1,im
+        kbm(i)   = km
+        kmax(i)  = km
+        tx1(i)   = 1.0 / ps(i)
+      enddo
+!     
+      do k = 1, km
+        do i=1,im
+          if (prsl(i,k)*tx1(i) .gt. 0.70) kbm(i)   = k + 1
+          if (prsl(i,k)*tx1(i) .gt. 0.60) kmax(i)  = k + 1
+        enddo
+      enddo
+      do i=1,im
+        kbm(i)   = min(kbm(i),kmax(i))
+      enddo
+!c
+!c  hydrostatic height assume zero terr and compute
+!c  updraft entrainment rate as an inverse function of height
+!c
+      do k = 1, km
+        do i=1,im
+          zo(i,k) = phil(i,k) / g
+        enddo
+      enddo
+      do k = 1, km1
+        do i=1,im
+          zi(i,k) = 0.5*(zo(i,k)+zo(i,k+1))
+          xlamue(i,k) = clam / zi(i,k)
+        enddo
+      enddo
+      do i=1,im
+        xlamue(i,km) = xlamue(i,km1)
+      enddo
+!c
+!c  pbl height
+!c
+      do i=1,im
+        flg(i) = cnvflg(i)
+        kpbl(i)= 1
+      enddo
+      do k = 2, km1
+        do i=1,im
+          if (flg(i).and.zo(i,k).le.hpbl(i)) then
+            kpbl(i) = k
+          else
+            flg(i) = .false.
+          endif
+        enddo
+      enddo
+      do i=1,im
+        kpbl(i)= min(kpbl(i),kbm(i))
+      enddo
+!c
+!c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!c   convert surface pressure to mb from cb
+!c
+      do k = 1, km
+        do i = 1, im
+          if (cnvflg(i) .and. k .le. kmax(i)) then
+            pfld(i,k) = prsl(i,k) * 10.0
+            eta(i,k)  = 1.
+            hcko(i,k) = 0.
+            qcko(i,k) = 0.
+            ucko(i,k) = 0.
+            vcko(i,k) = 0.
+            dbyo(i,k) = 0.
+            pwo(i,k)  = 0.
+            dellal(i,k) = 0.
+            to(i,k)   = t1(i,k)
+            qo(i,k)   = q1(i,k)
+            uo(i,k)   = u1(i,k) * rcs(i)
+            vo(i,k)   = v1(i,k) * rcs(i)
+          endif
+        enddo
+      enddo
+!c
+!c  column variables
+!c  p is pressure of the layer (mb)
+!c  t is temperature at t-dt (k)..tn
+!c  q is mixing ratio at t-dt (kg/kg)..qn
+!c  to is temperature at t+dt (k)... this is after advection and turbulan
+!c  qo is mixing ratio at t+dt (kg/kg)..q1
+!c
+      do k = 1, km
+        do i=1,im
+          if (cnvflg(i) .and. k .le. kmax(i)) then
+            qeso(i,k) = 0.01 * fpvs(to(i,k))      ! fpvs is in pa
+            qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
+            val1      =             1.e-8
+            qeso(i,k) = max(qeso(i,k), val1)
+            val2      =           1.e-10
+            qo(i,k)   = max(qo(i,k), val2 )
+!           qo(i,k)   = min(qo(i,k),qeso(i,k))
+!           tvo(i,k)  = to(i,k) + delta * to(i,k) * qo(i,k)
+          endif
+        enddo
+      enddo
+!c
+!c  compute moist static energy
+!c
+      do k = 1, km
+        do i=1,im
+          if (cnvflg(i) .and. k .le. kmax(i)) then
+!           tem       = g * zo(i,k) + cp * to(i,k)
+            tem       = phil(i,k) + cp * to(i,k)
+            heo(i,k)  = tem  + hvap * qo(i,k)
+            heso(i,k) = tem  + hvap * qeso(i,k)
+!c           heo(i,k)  = min(heo(i,k),heso(i,k))
+          endif
+        enddo
+      enddo
+!c
+!c  determine level with largest moist static energy within pbl
+!c  this is the level where updraft starts
+!c
+      do i=1,im
+         if (cnvflg(i)) then
+            hmax(i) = heo(i,1)
+            kb(i) = 1
+         endif
+      enddo
+      do k = 2, km
+        do i=1,im
+          if (cnvflg(i).and.k.le.kpbl(i)) then
+            if(heo(i,k).gt.hmax(i)) then
+              kb(i)   = k
+              hmax(i) = heo(i,k)
+            endif
+          endif
+        enddo
+      enddo
+!c
+      do k = 1, km1
+        do i=1,im
+          if (cnvflg(i) .and. k .le. kmax(i)-1) then
+            dz      = .5 * (zo(i,k+1) - zo(i,k))
+            dp      = .5 * (pfld(i,k+1) - pfld(i,k))
+            es      = 0.01 * fpvs(to(i,k+1))      ! fpvs is in pa
+            pprime  = pfld(i,k+1) + epsm1 * es
+            qs      = eps * es / pprime
+            dqsdp   = - qs / pprime
+            desdt   = es * (fact1 / to(i,k+1) + fact2 / (to(i,k+1)**2))
+            dqsdt   = qs * pfld(i,k+1) * desdt / (es * pprime)
+            gamma   = el2orc * qeso(i,k+1) / (to(i,k+1)**2)
+            dt      = (g * dz + hvap * dqsdp * dp) / (cp * (1. + gamma))
+            dq      = dqsdt * dt + dqsdp * dp
+            to(i,k) = to(i,k+1) + dt
+            qo(i,k) = qo(i,k+1) + dq
+            po(i,k) = .5 * (pfld(i,k) + pfld(i,k+1))
+          endif
+        enddo
+      enddo
+!
+      do k = 1, km1
+        do i=1,im
+          if (cnvflg(i) .and. k .le. kmax(i)-1) then
+            qeso(i,k) = 0.01 * fpvs(to(i,k))      ! fpvs is in pa
+            qeso(i,k) = eps * qeso(i,k) / (po(i,k) + epsm1*qeso(i,k))
+            val1      =             1.e-8
+            qeso(i,k) = max(qeso(i,k), val1)
+            val2      =           1.e-10
+            qo(i,k)   = max(qo(i,k), val2 )
+!           qo(i,k)   = min(qo(i,k),qeso(i,k))
+            heo(i,k)  = .5 * g * (zo(i,k) + zo(i,k+1)) +            &
+     &                  cp * to(i,k) + hvap * qo(i,k)
+            heso(i,k) = .5 * g * (zo(i,k) + zo(i,k+1)) +            &
+     &                  cp * to(i,k) + hvap * qeso(i,k)
+            uo(i,k)   = .5 * (uo(i,k) + uo(i,k+1))
+            vo(i,k)   = .5 * (vo(i,k) + vo(i,k+1))
+          endif
+        enddo
+      enddo
+!c
+!c  look for the level of free convection as cloud base
+!c
+      do i=1,im
+        flg(i)   = cnvflg(i)
+        if(flg(i)) kbcon(i) = kmax(i)
+      enddo
+      do k = 2, km1
+        do i=1,im
+          if (flg(i).and.k.lt.kbm(i)) then
+            if(k.gt.kb(i).and.heo(i,kb(i)).gt.heso(i,k)) then
+              kbcon(i) = k
+              flg(i)   = .false.
+            endif
+          endif
+        enddo
+      enddo
+!c
+      do i=1,im
+        if(cnvflg(i)) then
+          if(kbcon(i).eq.kmax(i)) cnvflg(i) = .false.
+        endif
+      enddo
+!!
+      totflg = .true.
+      do i=1,im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c  determine critical convective inhibition
+!c  as a function of vertical velocity at cloud base.
+!c
+      do i=1,im
+        if(cnvflg(i)) then
+          pdot(i)  = 10.* dot(i,kbcon(i))
+        endif
+      enddo
+      do i=1,im
+        if(cnvflg(i)) then
+          if(slimsk(i).eq.1.) then
+            w1 = w1l
+            w2 = w2l
+            w3 = w3l
+            w4 = w4l
+          else
+            w1 = w1s
+            w2 = w2s
+            w3 = w3s
+            w4 = w4s
+          endif
+          if(pdot(i).le.w4) then
+            ptem = (pdot(i) - w4) / (w3 - w4)
+          elseif(pdot(i).ge.-w4) then
+            ptem = - (pdot(i) + w4) / (w4 - w3)
+          else
+            ptem = 0.
+          endif
+          val1    =             -1.
+          ptem = max(ptem,val1)
+          val2    =             1.
+          ptem = min(ptem,val2)
+          ptem = 1. - ptem
+          ptem1= .5*(cincrmax-cincrmin)
+          cincr = cincrmax - ptem * ptem1
+          tem1 = pfld(i,kb(i)) - pfld(i,kbcon(i))
+          if(tem1.gt.cincr) then
+             cnvflg(i) = .false.
+          endif
+        endif
+      enddo
+!!
+      totflg = .true.
+      do i=1,im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c  assume the detrainment rate for the updrafts to be same as 
+!c  the entrainment rate at cloud base
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          xlamud(i) = xlamue(i,kbcon(i))
+        endif
+      enddo
+!c
+!c  determine updraft mass flux for the subcloud layers
+!c
+      do k = km1, 1, -1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.lt.kbcon(i).and.k.ge.kb(i)) then
+              dz       = zi(i,k+1) - zi(i,k)
+              ptem     = 0.5*(xlamue(i,k)+xlamue(i,k+1))-xlamud(i)
+              eta(i,k) = eta(i,k+1) / (1. + ptem * dz)
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c  compute mass flux above cloud base
+!c
+      do k = 2, km1
+        do i = 1, im
+         if(cnvflg(i))then
+           if(k.gt.kbcon(i).and.k.lt.kmax(i)) then
+              dz       = zi(i,k) - zi(i,k-1)
+              ptem     = 0.5*(xlamue(i,k)+xlamue(i,k-1))-xlamud(i)
+              eta(i,k) = eta(i,k-1) * (1 + ptem * dz)
+           endif
+         endif
+        enddo
+      enddo
+!c
+!c  compute updraft cloud property
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          indx         = kb(i)
+          hcko(i,indx) = heo(i,indx)
+          ucko(i,indx) = uo(i,indx)
+          vcko(i,indx) = vo(i,indx)
+        endif
+      enddo
+!c
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.lt.kmax(i)) then
+              dz   = zi(i,k) - zi(i,k-1)
+              tem  = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
+              tem1 = 0.5 * xlamud(i) * dz
+              factor = 1. + tem - tem1
+              ptem = 0.5 * tem + pgcon
+              ptem1= 0.5 * tem - pgcon
+              hcko(i,k) = ((1.-tem1)*hcko(i,k-1)+tem*0.5*         &
+     &                     (heo(i,k)+heo(i,k-1)))/factor
+              ucko(i,k) = ((1.-tem1)*ucko(i,k-1)+ptem*uo(i,k)     &
+     &                     +ptem1*uo(i,k-1))/factor
+              vcko(i,k) = ((1.-tem1)*vcko(i,k-1)+ptem*vo(i,k)     &
+     &                     +ptem1*vo(i,k-1))/factor
+              dbyo(i,k) = hcko(i,k) - heso(i,k)
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c   taking account into convection inhibition due to existence of
+!c    dry layers below cloud base
+!c
+      do i=1,im
+        flg(i) = cnvflg(i)
+        kbcon1(i) = kmax(i)
+      enddo
+      do k = 2, km1
+      do i=1,im
+        if (flg(i).and.k.lt.kbm(i)) then
+          if(k.ge.kbcon(i).and.dbyo(i,k).gt.0.) then
+            kbcon1(i) = k
+            flg(i)    = .false.
+          endif
+        endif
+      enddo
+      enddo
+      do i=1,im
+        if(cnvflg(i)) then
+          if(kbcon1(i).eq.kmax(i)) cnvflg(i) = .false.
+        endif
+      enddo
+      do i=1,im
+        if(cnvflg(i)) then
+          tem = pfld(i,kbcon(i)) - pfld(i,kbcon1(i))
+          if(tem.gt.dthk) then
+             cnvflg(i) = .false.
+          endif
+        endif
+      enddo
+!!
+      totflg = .true.
+      do i = 1, im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c  determine first guess cloud top as the level of zero buoyancy
+!c    limited to the level of sigma=0.7
+!c
+      do i = 1, im
+        flg(i) = cnvflg(i)
+        if(flg(i)) ktcon(i) = kbm(i)
+      enddo
+      do k = 2, km1
+      do i=1,im
+        if (flg(i).and.k .lt. kbm(i)) then
+          if(k.gt.kbcon1(i).and.dbyo(i,k).lt.0.) then
+             ktcon(i) = k
+             flg(i)   = .false.
+          endif
+        endif
+      enddo
+      enddo
+!c
+!c  turn off shallow convection if cloud top is less than pbl top
+!c
+!     do i=1,im
+!       if(cnvflg(i)) then
+!         kk = kpbl(i)+1
+!         if(ktcon(i).le.kk) cnvflg(i) = .false.
+!       endif
+!     enddo
+!!
+!     totflg = .true.
+!     do i = 1, im
+!       totflg = totflg .and. (.not. cnvflg(i))
+!     enddo
+!     if(totflg) return
+!!
+!c
+!c  specify upper limit of mass flux at cloud base
+!c
+      val1=1.0        ! qingfu test
+      do i = 1, im
+        if(cnvflg(i)) then
+!         xmbmax(i) = .1
+!
+          k = kbcon(i)
+          dp = 1000. * del(i,k)
+          xmbmax(i) = dp / (g * dt2)
+          xmbmax(i) = min(val1,xmbmax(i))      ! qingfu test
+!
+!         tem = dp / (g * dt2)
+!         xmbmax(i) = min(tem, xmbmax(i))
+        endif
+      enddo
+!c
+!c  compute cloud moisture property and precipitation
+!c
+      do i = 1, im
+        if (cnvflg(i)) then
+          aa1(i) = 0.
+          qcko(i,kb(i)) = qo(i,kb(i))
+        endif
+      enddo
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.lt.ktcon(i)) then
+              dz    = zi(i,k) - zi(i,k-1)
+              gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+              qrch = qeso(i,k)                      &
+     &             + gamma * dbyo(i,k) / (hvap * (1. + gamma))
+!cj
+              tem  = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
+              tem1 = 0.5 * xlamud(i) * dz
+              factor = 1. + tem - tem1
+              qcko(i,k) = ((1.-tem1)*qcko(i,k-1)+tem*0.5*     &
+     &                     (qo(i,k)+qo(i,k-1)))/factor
+!cj
+              dq = eta(i,k) * (qcko(i,k) - qrch)
+!c
+!             rhbar(i) = rhbar(i) + qo(i,k) / qeso(i,k)
+!c
+!c  below lfc check if there is excess moisture to release latent heat
+!c
+              if(k.ge.kbcon(i).and.dq.gt.0.) then
+                etah = .5 * (eta(i,k) + eta(i,k-1))
+                if(ncloud.gt.0.) then
+                  dp = 1000. * del(i,k)
+                  qlk = dq / (eta(i,k) + etah * (c0 + c1) * dz)
+                  dellal(i,k) = etah * c1 * dz * qlk * g / dp
+                else
+                  qlk = dq / (eta(i,k) + etah * c0 * dz)
+                endif
+                aa1(i) = aa1(i) - dz * g * qlk
+                qcko(i,k)= qlk + qrch
+                pwo(i,k) = etah * c0 * dz * qlk
+              endif
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c  calculate cloud work function
+!c
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.ge.kbcon(i).and.k.lt.ktcon(i)) then
+              dz1 = zo(i,k+1) - zo(i,k)
+              gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+              rfact =  1. + delta * cp * gamma               &
+     &                 * to(i,k) / hvap
+              aa1(i) = aa1(i) +                              &
+     &                 dz1 * (g / (cp * to(i,k)))            &
+     &                 * dbyo(i,k) / (1. + gamma)            &
+     &                 * rfact
+              val = 0.
+              aa1(i)=aa1(i)+                                 &
+     &                 dz1 * g * delta *                     &
+     &                 max(val,(qeso(i,k) - qo(i,k)))
+            endif
+          endif
+        enddo
+      enddo
+      do i = 1, im
+        if(cnvflg(i).and.aa1(i).le.0.) cnvflg(i) = .false.
+      enddo
+!!
+      totflg = .true.
+      do i=1,im
+        totflg = totflg .and. (.not. cnvflg(i))
+      enddo
+      if(totflg) return
+!!
+!c
+!c  estimate the onvective overshooting as the level
+!c    where the [aafac * cloud work function] becomes zero,
+!c    which is the final cloud top
+!c    limited to the level of sigma=0.7
+!c
+      do i = 1, im
+        if (cnvflg(i)) then
+          aa1(i) = aafac * aa1(i)
+        endif
+      enddo
+!c
+      do i = 1, im
+        flg(i) = cnvflg(i)
+        ktcon1(i) = kbm(i)
+      enddo
+      do k = 2, km1
+        do i = 1, im
+          if (flg(i)) then
+            if(k.ge.ktcon(i).and.k.lt.kbm(i)) then
+              dz1 = zo(i,k+1) - zo(i,k)
+              gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+              rfact =  1. + delta * cp * gamma           &
+     &                 * to(i,k) / hvap
+              aa1(i) = aa1(i) +                          &
+     &                 dz1 * (g / (cp * to(i,k)))        &
+     &                 * dbyo(i,k) / (1. + gamma)        &
+     &                 * rfact
+              if(aa1(i).lt.0.) then
+                ktcon1(i) = k
+                flg(i) = .false.
+              endif
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c  compute cloud moisture property, detraining cloud water
+!c    and precipitation in overshooting layers
+!c
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.ge.ktcon(i).and.k.lt.ktcon1(i)) then
+              dz    = zi(i,k) - zi(i,k-1)
+              gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+              qrch = qeso(i,k)                            &
+     &             + gamma * dbyo(i,k) / (hvap * (1. + gamma))
+!cj
+              tem  = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
+              tem1 = 0.5 * xlamud(i) * dz
+              factor = 1. + tem - tem1
+              qcko(i,k) = ((1.-tem1)*qcko(i,k-1)+tem*0.5*    &
+     &                     (qo(i,k)+qo(i,k-1)))/factor
+!cj
+              dq = eta(i,k) * (qcko(i,k) - qrch)
+!c
+!c  check if there is excess moisture to release latent heat
+!c
+              if(dq.gt.0.) then
+                etah = .5 * (eta(i,k) + eta(i,k-1))
+                if(ncloud.gt.0.) then
+                  dp = 1000. * del(i,k)
+                  qlk = dq / (eta(i,k) + etah * (c0 + c1) * dz)
+                  dellal(i,k) = etah * c1 * dz * qlk * g / dp
+                else
+                  qlk = dq / (eta(i,k) + etah * c0 * dz)
+                endif
+                qcko(i,k) = qlk + qrch
+                pwo(i,k) = etah * c0 * dz * qlk
+              endif
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c exchange ktcon with ktcon1
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          kk = ktcon(i)
+          ktcon(i) = ktcon1(i)
+          ktcon1(i) = kk
+        endif
+      enddo
+!c
+!c  this section is ready for cloud water
+!c
+      if(ncloud.gt.0) then
+!c
+!c  compute liquid and vapor separation at cloud top
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          k = ktcon(i) - 1
+          gamma = el2orc * qeso(i,k) / (to(i,k)**2)
+          qrch = qeso(i,k)                                    &
+     &         + gamma * dbyo(i,k) / (hvap * (1. + gamma))
+          dq = qcko(i,k) - qrch
+!c
+!c  check if there is excess moisture to release latent heat
+!c
+          if(dq.gt.0.) then
+            qlko_ktcon(i) = dq
+            qcko(i,k) = qrch
+          endif
+        endif
+      enddo
+      endif
+!c
+!c--- compute precipitation efficiency in terms of windshear
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          vshear(i) = 0.
+        endif
+      enddo
+      do k = 2, km
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.le.ktcon(i)) then
+              shear= sqrt((uo(i,k)-uo(i,k-1)) ** 2          &
+     &                  + (vo(i,k)-vo(i,k-1)) ** 2)
+              vshear(i) = vshear(i) + shear
+            endif
+          endif
+        enddo
+      enddo
+      do i = 1, im
+        if(cnvflg(i)) then
+          vshear(i) = 1.e3 * vshear(i) / (zi(i,ktcon(i))-zi(i,kb(i)))
+          e1=1.591-.639*vshear(i)                           &
+     &       +.0953*(vshear(i)**2)-.00496*(vshear(i)**3)
+          edt(i)=1.-e1
+          val =         .9
+          edt(i) = min(edt(i),val)
+          val =         .0
+          edt(i) = max(edt(i),val)
+        endif
+      enddo
+!c
+!c--- what would the change be, that a cloud with unit mass
+!c--- will do to the environment?
+!c
+      do k = 1, km
+        do i = 1, im
+          if(cnvflg(i) .and. k .le. kmax(i)) then
+            dellah(i,k) = 0.
+            dellaq(i,k) = 0.
+            dellau(i,k) = 0.
+            dellav(i,k) = 0.
+          endif
+        enddo
+      enddo
+!c
+!c--- changed due to subsidence and entrainment
+!c
+      do k = 2, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.lt.ktcon(i)) then
+              dp = 1000. * del(i,k)
+              dz = zi(i,k) - zi(i,k-1)
+!c
+              dv1h = heo(i,k)
+              dv2h = .5 * (heo(i,k) + heo(i,k-1))
+              dv3h = heo(i,k-1)
+              dv1q = qo(i,k)
+              dv2q = .5 * (qo(i,k) + qo(i,k-1))
+              dv3q = qo(i,k-1)
+              dv1u = uo(i,k)
+              dv2u = .5 * (uo(i,k) + uo(i,k-1))
+              dv3u = uo(i,k-1)
+              dv1v = vo(i,k)
+              dv2v = .5 * (vo(i,k) + vo(i,k-1))
+              dv3v = vo(i,k-1)
+!c
+              tem  = 0.5 * (xlamue(i,k)+xlamue(i,k-1))
+              tem1 = xlamud(i)
+!cj
+              dellah(i,k) = dellah(i,k) +             &
+     &     ( eta(i,k)*dv1h - eta(i,k-1)*dv3h          &
+     &    -  tem*eta(i,k-1)*dv2h*dz                   &
+     &    +  tem1*eta(i,k-1)*.5*(hcko(i,k)+hcko(i,k-1))*dz   &
+     &         ) *g/dp
+!cj
+              dellaq(i,k) = dellaq(i,k) +             &
+     &     ( eta(i,k)*dv1q - eta(i,k-1)*dv3q          &
+     &    -  tem*eta(i,k-1)*dv2q*dz                   &
+     &    +  tem1*eta(i,k-1)*.5*(qcko(i,k)+qcko(i,k-1))*dz   &
+     &         ) *g/dp
+!cj
+              dellau(i,k) = dellau(i,k) +             &
+     &     ( eta(i,k)*dv1u - eta(i,k-1)*dv3u          &
+     &    -  tem*eta(i,k-1)*dv2u*dz                   &
+     &    +  tem1*eta(i,k-1)*.5*(ucko(i,k)+ucko(i,k-1))*dz   &
+     &    -  pgcon*eta(i,k-1)*(dv1u-dv3u)             &
+     &         ) *g/dp
+!cj
+              dellav(i,k) = dellav(i,k) +             &
+     &     ( eta(i,k)*dv1v - eta(i,k-1)*dv3v          &
+     &    -  tem*eta(i,k-1)*dv2v*dz                   &
+     &    +  tem1*eta(i,k-1)*.5*(vcko(i,k)+vcko(i,k-1))*dz  &
+     &    -  pgcon*eta(i,k-1)*(dv1v-dv3v)             &
+     &         ) *g/dp
+!cj
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c------- cloud top
+!c
+      do i = 1, im
+        if(cnvflg(i)) then
+          indx = ktcon(i)
+          dp = 1000. * del(i,indx)
+          dv1h = heo(i,indx-1)
+          dellah(i,indx) = eta(i,indx-1) *           &
+     &                     (hcko(i,indx-1) - dv1h) * g / dp
+          dv1q = qo(i,indx-1)
+          dellaq(i,indx) = eta(i,indx-1) *           &
+     &                     (qcko(i,indx-1) - dv1q) * g / dp
+          dv1u = uo(i,indx-1)
+          dellau(i,indx) = eta(i,indx-1) *           &
+     &                     (ucko(i,indx-1) - dv1u) * g / dp
+          dv1v = vo(i,indx-1)
+          dellav(i,indx) = eta(i,indx-1) *           &
+     &                     (vcko(i,indx-1) - dv1v) * g / dp
+!c
+!c  cloud water
+!c
+          dellal(i,indx) = eta(i,indx-1) *           &
+     &                     qlko_ktcon(i) * g / dp
+        endif
+      enddo
+!c
+!c  mass flux at cloud base for shallow convection
+!c  (Grant, 2001)
+!c
+      do i= 1, im
+        if(cnvflg(i)) then
+          k = kbcon(i)
+!         ptem = g*sflx(i)*zi(i,k)/t1(i,1)
+          ptem = g*sflx(i)*hpbl(i)/t1(i,1)
+          wstar(i) = ptem**h1
+          tem = po(i,k)*100. / (rd*t1(i,k))
+          xmb(i) = betaw*tem*wstar(i)
+          xmb(i) = min(xmb(i),xmbmax(i))
+        endif
+      enddo
+!c
+!c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!c
+      do k = 1, km
+        do i = 1, im
+          if (cnvflg(i) .and. k .le. kmax(i)) then
+            qeso(i,k) = 0.01 * fpvs(t1(i,k))      ! fpvs is in pa
+            qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
+            val     =             1.e-8
+            qeso(i,k) = max(qeso(i,k), val )
+          endif
+        enddo
+      enddo
+!c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!c
+      do i = 1, im
+        delhbar(i) = 0.
+        delqbar(i) = 0.
+        deltbar(i) = 0.
+        delubar(i) = 0.
+        delvbar(i) = 0.
+        qcond(i) = 0.
+      enddo
+      do k = 1, km
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.le.ktcon(i)) then
+              dellat = (dellah(i,k) - hvap * dellaq(i,k)) / cp
+              t1(i,k) = t1(i,k) + dellat * xmb(i) * dt2
+              q1(i,k) = q1(i,k) + dellaq(i,k) * xmb(i) * dt2
+              tem = 1./rcs(i)
+              u1(i,k) = u1(i,k) + dellau(i,k) * xmb(i) * dt2 * tem
+              v1(i,k) = v1(i,k) + dellav(i,k) * xmb(i) * dt2 * tem
+              dp = 1000. * del(i,k)
+              delhbar(i) = delhbar(i) + dellah(i,k)*xmb(i)*dp/g
+              delqbar(i) = delqbar(i) + dellaq(i,k)*xmb(i)*dp/g
+              deltbar(i) = deltbar(i) + dellat*xmb(i)*dp/g
+              delubar(i) = delubar(i) + dellau(i,k)*xmb(i)*dp/g
+              delvbar(i) = delvbar(i) + dellav(i,k)*xmb(i)*dp/g
+            endif
+          endif
+        enddo
+      enddo
+      do k = 1, km
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.gt.kb(i).and.k.le.ktcon(i)) then
+              qeso(i,k) = 0.01 * fpvs(t1(i,k))      ! fpvs is in pa
+              qeso(i,k) = eps * qeso(i,k)/(pfld(i,k) + epsm1*qeso(i,k))
+              val     =             1.e-8
+              qeso(i,k) = max(qeso(i,k), val )
+            endif
+          endif
+        enddo
+      enddo
+!c
+      do i = 1, im
+        rntot(i) = 0.
+        delqev(i) = 0.
+        delq2(i) = 0.
+        flg(i) = cnvflg(i)
+      enddo
+      do k = km, 1, -1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if(k.lt.ktcon(i).and.k.gt.kb(i)) then
+              rntot(i) = rntot(i) + pwo(i,k) * xmb(i) * .001 * dt2
+            endif
+          endif
+        enddo
+      enddo
+!c
+!c evaporating rain
+!c
+      do k = km, 1, -1
+        do i = 1, im
+          if (k .le. kmax(i)) then
+            deltv(i) = 0.
+            delq(i) = 0.
+            qevap(i) = 0.
+            if(cnvflg(i)) then
+              if(k.lt.ktcon(i).and.k.gt.kb(i)) then
+                rn(i) = rn(i) + pwo(i,k) * xmb(i) * .001 * dt2
+              endif
+            endif
+            if(flg(i).and.k.lt.ktcon(i)) then
+              evef = edt(i) * evfact
+              if(slimsk(i).eq.1.) evef=edt(i) * evfactl
+!             if(slimsk(i).eq.1.) evef=.07
+!c             if(slimsk(i).ne.1.) evef = 0.
+              qcond(i) = evef * (q1(i,k) - qeso(i,k))           &
+     &                 / (1. + el2orc * qeso(i,k) / t1(i,k)**2)
+              dp = 1000. * del(i,k)
+              if(rn(i).gt.0..and.qcond(i).lt.0.) then
+                qevap(i) = -qcond(i) * (1.-exp(-.32*sqrt(dt2*rn(i))))
+                qevap(i) = min(qevap(i), rn(i)*1000.*g/dp)
+                delq2(i) = delqev(i) + .001 * qevap(i) * dp / g
+              endif
+              if(rn(i).gt.0..and.qcond(i).lt.0..and.           &
+     &           delq2(i).gt.rntot(i)) then
+                qevap(i) = 1000.* g * (rntot(i) - delqev(i)) / dp
+                flg(i) = .false.
+              endif
+              if(rn(i).gt.0..and.qevap(i).gt.0.) then
+                tem  = .001 * dp / g
+                tem1 = qevap(i) * tem
+                if(tem1.gt.rn(i)) then
+                  qevap(i) = rn(i) / tem
+                  rn(i) = 0.
+                else
+                  rn(i) = rn(i) - tem1
+                endif
+                q1(i,k) = q1(i,k) + qevap(i)
+                t1(i,k) = t1(i,k) - elocp * qevap(i)
+                deltv(i) = - elocp*qevap(i)/dt2
+                delq(i) =  + qevap(i)/dt2
+                delqev(i) = delqev(i) + .001*dp*qevap(i)/g
+              endif
+              dellaq(i,k) = dellaq(i,k) + delq(i) / xmb(i)
+              delqbar(i) = delqbar(i) + delq(i)*dp/g
+              deltbar(i) = deltbar(i) + deltv(i)*dp/g
+            endif
+          endif
+        enddo
+      enddo
+!cj
+!     do i = 1, im
+!     if(me.eq.31.and.cnvflg(i)) then
+!     if(cnvflg(i)) then
+!       print *, ' shallow delhbar, delqbar, deltbar = ',
+!    &             delhbar(i),hvap*delqbar(i),cp*deltbar(i)
+!       print *, ' shallow delubar, delvbar = ',delubar(i),delvbar(i)
+!       print *, ' precip =', hvap*rn(i)*1000./dt2
+!       print*,'pdif= ',pfld(i,kbcon(i))-pfld(i,ktcon(i))
+!     endif
+!     enddo
+!cj
+      do i = 1, im
+        if(cnvflg(i)) then
+          if(rn(i).lt.0..or..not.flg(i)) rn(i) = 0.
+          ktop(i) = ktcon(i)
+          kbot(i) = kbcon(i)
+          kcnv(i) = 0
+        endif
+      enddo
+!c
+!c  cloud water
+!c
+      if (ncloud.gt.0) then
+!
+      val1 = 1.0
+      val2 = 0.
+      do k = 1, km1
+        do i = 1, im
+          if (cnvflg(i)) then
+            if (k.gt.kb(i).and.k.le.ktcon(i)) then
+              tem  = dellal(i,k) * xmb(i) * dt2
+              tem1 = max(val2, min(val1, (tcr-t1(i,k))*tcrf))
+              if (ql(i,k,2) .gt. -999.0) then
+                ql(i,k,1) = ql(i,k,1) + tem * tem1            ! ice
+                ql(i,k,2) = ql(i,k,2) + tem *(1.0-tem1)       ! water
+              else
+                ql(i,k,1) = ql(i,k,1) + tem
+              endif
+            endif
+          endif
+        enddo
+      enddo
+!
+      endif
+!
+! hchuang code change
+!
+!      do k = 1, km
+!        do i = 1, im
+!          if(cnvflg(i)) then
+!            if(k.ge.kb(i) .and. k.lt.ktop(i)) then
+!              ud_mf(i,k) = eta(i,k) * xmb(i) * dt2
+!            endif
+!          endif
+!        enddo
+!      enddo
+!      do i = 1, im
+!        if(cnvflg(i)) then
+!           k = ktop(i)-1
+!           dt_mf(i,k) = ud_mf(i,k)
+!        endif
+!      enddo
+!!
+      return
+      end subroutine shalcnv
+#if (EM_CORE == 1)
+!   random seeds - ZCX
+      SUBROUTINE init_random_seed()
+            INTEGER :: i, n, clock
+            INTEGER, DIMENSION(:), ALLOCATABLE :: seed
+
+            CALL RANDOM_SEED(size = n)
+            ALLOCATE(seed(n))
+
+            CALL SYSTEM_CLOCK(COUNT=clock)
+
+            seed = clock + 37 * (/ (i - 1, i = 1, n) /)
+            CALL RANDOM_SEED(PUT = seed)
+
+            DEALLOCATE(seed)
+      END SUBROUTINE
+#endif
+      END MODULE module_cu_sas
+
diff --git a/wrfv2_fire/phys/module_cu_tiedtke.F b/wrfv2_fire/phys/module_cu_tiedtke.F
index 5f5a59b5..71e029f9 100644
--- a/wrfv2_fire/phys/module_cu_tiedtke.F
+++ b/wrfv2_fire/phys/module_cu_tiedtke.F
@@ -142,6 +142,7 @@ CONTAINS
                 ,QVFTEN,QVPBLTEN                                &
                 ,DZ8W,PCPS,P8W,XLAND,CU_ACT_FLAG                &
                 ,CUDT, CURR_SECS, ADAPT_STEP_FLAG               &
+                ,CUDTACTTIME                                    & 
                 ,ids,ide, jds,jde, kds,kde                      &
                 ,ims,ime, jms,jme, kms,kme                      &
                 ,its,ite, jts,jte, kts,kte                      &
@@ -269,7 +270,8 @@ CONTAINS
 ! Adaptive time-step variables
       REAL,  INTENT(IN   ) :: CUDT
       REAL,  INTENT(IN   ) :: CURR_SECS
-      LOGICAL,INTENT(IN   ) :: ADAPT_STEP_FLAG
+      LOGICAL,INTENT(IN   ) , OPTIONAL :: ADAPT_STEP_FLAG
+      REAL,  INTENT (INOUT) :: CUDTACTTIME       
 
 !--------------------------- LOCAL VARS ------------------------------
 
@@ -324,7 +326,7 @@ CONTAINS
                                         KX
 
 
-      LOGICAL :: run_param
+      LOGICAL :: run_param , doing_adapt_dt , decided
 
 !-------other local variables----
       INTEGER,DIMENSION( its:ite ) :: KTYPE
@@ -335,20 +337,65 @@ CONTAINS
 !
 !***  CHECK TO SEE IF THIS IS A CONVECTION TIMESTEP
 !
-      if (adapt_step_flag) then
-         if ( (ITIMESTEP .eq. 1) .or. (cudt .eq. 0) .or. &
-          ( CURR_SECS + dt >= ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then
-           run_param = .TRUE.
-         else
-           run_param = .FALSE.
-         endif   
-      else
-         if (MOD(ITIMESTEP,STEPCU) .EQ. 0 .or. ITIMESTEP .eq. 1) then
-            run_param = .TRUE.
-         else
-            run_param = .FALSE.
-         endif
-      endif
+
+!  Initialization for adaptive time step.
+
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+         IF ( cudtacttime .EQ. 0. ) THEN
+            cudtacttime = curr_secs + cudt*60.
+         END IF
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.
+!                ITIMESTEP=1
+!    Test 2:  If the user asked for the cumulus to be run every time step, then yes.
+!                CUDT=0 or STEPCU=1
+!    Test 3:  If not adaptive dt, and this is on the requested cumulus frequency, then yes.
+!                MOD(ITIMESTEP,STEPCU)=0
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.
+!                CURR_SECS >= CUDTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+!  If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
+!  cumulus run.
+
+   decided = .FALSE.
+   run_param = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( itimestep .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(itimestep,stepcu) .EQ. 0 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. cudtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+      cudtacttime = curr_secs + cudt*60
+   END IF
 
 !-----------------------------------------------------------------------
    IF(run_param) THEN
diff --git a/wrfv2_fire/phys/module_cumulus_driver.F b/wrfv2_fire/phys/module_cumulus_driver.F
index e5cc0997..ee9d8124 100644
--- a/wrfv2_fire/phys/module_cumulus_driver.F
+++ b/wrfv2_fire/phys/module_cumulus_driver.F
@@ -15,6 +15,7 @@ CONTAINS
                      ,p,pi,rho                                        &
                  ! --Other arguments
                      ,itimestep,dt,dx,cudt,curr_secs,adapt_step_flag  &
+                     ,cudtacttime                                     & 
                      ,rainc,raincv,pratec,nca                         &
                      ,z,z_at_w,dz8w,mavail,pblh,p8w,psfc,tsk          &
                      ,tke_pbl, ust                                    &
@@ -78,6 +79,7 @@ CONTAINS
                                           ,G3SCHEME                   &
                                           ,P_QC,P_QI,Param_FIRST_SCALAR &
                                           ,CAMZMSCHEME, SASSCHEME     &
+                                          ,OSASSCHEME                 &
                                           ,NSASSCHEME                 &
                                           ,TIEDTKESCHEME
 
@@ -96,6 +98,7 @@ CONTAINS
    USE module_cu_gd     , ONLY : grelldrv
    USE module_cu_g3     , ONLY : g3drv,conv_grell_spread3d
    USE module_cu_sas
+   USE module_cu_osas   
    USE module_cu_camzm_driver, ONLY : camzm_driver
    USE module_cu_tiedtke, ONLY : cu_tiedtke
    USE module_cu_nsas   , ONLY : cu_nsas
@@ -343,7 +346,8 @@ CONTAINS
    REAL,  INTENT(IN   ),OPTIONAL :: CUDT
    REAL,  INTENT(IN   ),OPTIONAL :: CURR_SECS
    LOGICAL,INTENT(IN   ),OPTIONAL    ::     adapt_step_flag
-   REAL   :: cudt_pass, curr_secs_pass
+   REAL,  INTENT(INOUT ),OPTIONAL :: cudtacttime                 
+   REAL   :: cudt_pass, curr_secs_pass,cudtacttime_pass          
    LOGICAL :: adapt_step_flag_pass
 
    INTEGER,      INTENT(IN   ), OPTIONAL    ::   mp_physics
@@ -452,8 +456,10 @@ CONTAINS
 
    if (.not. PRESENT(CUDT)) then
       cudt_pass = -1
+      cudtacttime_pass = -1
    else
       cudt_pass = cudt
+      cudtacttime_pass = cudtacttime
    endif
 
    if (.not. PRESENT(adapt_step_flag)) then
@@ -532,6 +538,7 @@ CONTAINS
                 DT=dt ,KTAU=itimestep ,DX=dx , CUDT=cudt_pass   &
                ,CURR_SECS=curr_secs_pass                        &
                ,ADAPT_STEP_FLAG=adapt_step_flag_pass            &
+               ,CUDTACTTIME=cudtacttime_pass                    & 
                ,RHO=rho                                         &
                ,U=u ,V=v ,TH=th ,T=t ,W=w                       &
                ,PCPS=p ,PI=pi                                   &
@@ -565,6 +572,7 @@ CONTAINS
                ,CUDT=cudt_pass                                  &
                ,CURR_SECS=curr_secs_pass                        &
                ,ADAPT_STEP_FLAG=adapt_step_flag_pass            &
+               ,CUDTACTTIME=cudtacttime_pass                    & 
                ,CUTOP=htop, CUBOT=hbot, KPBL=kpbl               &
                ,DZ8W=dz8w ,PINT=p8w, PMID=p, PI=pi              &
                ,CP=cp ,R=r_d ,ELWV=xlv ,ELIV=xls ,G=g           &
@@ -586,6 +594,7 @@ CONTAINS
                ,CUDT=cudt_pass                                  &
                ,CURR_SECS=curr_secs_pass                        &
                ,ADAPT_STEP_FLAG=adapt_step_flag_pass            &
+               ,CUDTACTTIME=cudtacttime_pass                    & 
                ,RAINCV=raincv, PRATEC=tmppratec, NCA=nca        &
                ,DZ8W=dz8w                                       &
                ,PCPS=p, PI=pi ,W0AVG=W0AVG                      &
@@ -677,6 +686,39 @@ CONTAINS
                ,CUDT=cudt_pass                                  &
                ,CURR_SECS=curr_secs_pass                        &
                ,ADAPT_STEP_FLAG=adapt_step_flag_pass            &
+               ,CUDTACTTIME=cudtacttime_pass                    & 
+               ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
+               ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
+               ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
+                                                                )
+     CASE (OSASSCHEME)
+                                                                                                                                           
+          IF ( adapt_step_flag_pass ) THEN
+            WRITE( wrf_err_message , * ) 'The SAS cumulus option will not work properly with an adaptive time step'
+            CALL wrf_error_fatal ( wrf_err_message )
+          END IF
+          CALL wrf_debug(100,'in cu_osas')
+          CALL CU_OSAS(                                          &
+                DT=dt,ITIMESTEP=itimestep,STEPCU=STEPCU         &
+               ,RTHCUTEN=RTHCUTEN,RQVCUTEN=RQVCUTEN             &
+               ,RQCCUTEN=RQCCUTEN,RQICUTEN=RQICUTEN             &
+               ,RUCUTEN=RUCUTEN, RVCUTEN=RVCUTEN                &
+               ,RAINCV=RAINCV,PRATEC=tmpPRATEC,HTOP=HTOP,HBOT=HBOT &
+               ,U3D=u,V3D=v,W=w,T3D=t                           &
+               ,QV3D=QV_CURR,QC3D=QC_CURR,QI3D=QI_CURR          &
+               ,PI3D=pi,RHO3D=rho                               &
+               ,DZ8W=dz8w,PCPS=p,P8W=p8w,XLAND=XLAND            &
+               ,CU_ACT_FLAG=CU_ACT_FLAG                         &
+               ,P_QC=p_qc                                       &
+#if (NMM_CORE==1)
+               ,store_rand=store_rand  &
+               ,MOMMIX=MOMMIX  &
+#endif
+               ,P_QI=p_qi,P_FIRST_SCALAR=param_first_scalar     &
+               ,CUDT=cudt_pass                                  &
+               ,CURR_SECS=curr_secs_pass                        &
+               ,ADAPT_STEP_FLAG=adapt_step_flag_pass            &
+               ,CUDTACTTIME=cudtacttime_pass                    & 
                ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
                ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
                ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
@@ -765,7 +807,9 @@ CONTAINS
                ,TPERT_CAMUWPBL=tpert2d                              &
                ,DX=dx, DT=dt, STEPCU=stepcu, CUDT=cudt              &
                ,CURR_SECS=curr_secs                                 &
-               ,ADAPT_STEP_FLAG=adapt_step_flag, CAPE_OUT=cape      &
+               ,ADAPT_STEP_FLAG=adapt_step_flag                     &
+               ,CUDTACTTIME=cudtacttime_pass                        & 
+               ,CAPE_OUT=cape                                       &
                ,MU_OUT=zmmu, MD_OUT=zmmd                            &
                ,ZMDT=zmdt, ZMDQ=zmdq, DLF_OUT=dlf, RLIQ_OUT=rliq    &
                ,PCONVT=pconvt, PCONVB=pconvb, CUBOT=hbot, CUTOP=htop&
@@ -806,6 +850,7 @@ CONTAINS
                ,CUDT=cudt_pass                                  &
                ,CURR_SECS=curr_secs_pass                        &
                ,ADAPT_STEP_FLAG=adapt_step_flag_pass            &
+               ,CUDTACTTIME=cudtacttime_pass                    & 
                ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde &
                ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme &
                ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte &
@@ -832,6 +877,7 @@ CONTAINS
                 CU_ACT_FLAG=CU_ACT_FLAG,CUDT=cudt_pass,         &
                 CURR_SECS=curr_secs_pass,                       &
                 ADAPT_STEP_FLAG=adapt_step_flag_pass,           &
+                CUDTACTTIME=cudtacttime_pass,                   & 
                 RTHCUTEN=RTHCUTEN,RQVCUTEN=RQVCUTEN,            &
                 RQCCUTEN=RQCCUTEN,RQICUTEN=RQICUTEN,            &
                 RUCUTEN=RUCUTEN,RVCUTEN=RVCUTEN,                &
@@ -893,13 +939,21 @@ CONTAINS
    endif
 #endif
 
-      !
-      ! Copy pratec back to output array, if necessary.
-      !
-      if (PRESENT(PRATEC)) then
-         pratec(:,:) = tmppratec(:,:)
-      endif
-          CALL wrf_debug(200,'returning from cumulus_driver')
+
+   ! Copy pratec back to output array, if necessary.
+
+   if (PRESENT(PRATEC)) then
+      pratec(:,:) = tmppratec(:,:)
+   endif
+
+   ! Copy cudtacttime back if necessary
+
+   if ( PRESENT(CUDTACTTIME) ) then
+      cudtacttime = cudtacttime_pass
+   end if
+
+   CALL wrf_debug(200,'returning from cumulus_driver')
+
    END SUBROUTINE cumulus_driver
 
 END MODULE module_cumulus_driver
diff --git a/wrfv2_fire/phys/module_diagnostics.F b/wrfv2_fire/phys/module_diagnostics.F
index 559c3c97..a9eedef8 100644
--- a/wrfv2_fire/phys/module_diagnostics.F
+++ b/wrfv2_fire/phys/module_diagnostics.F
@@ -515,4 +515,454 @@ CONTAINS
 
    END SUBROUTINE diagnostic_output_calc
 
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+   SUBROUTINE clwrf_output_calc(                                      &
+                      ids,ide, jds,jde, kds,kde,                      &
+                      ims,ime, jms,jme, kms,kme,                      &
+                      ips,ipe, jps,jpe, kps,kpe,                      & ! patch  dims
+                      i_start,i_end,j_start,j_end,kts,kte,num_tiles   &
+                     ,dpsdt,dmudt                                     &
+                     ,p8w,pk1m,mu_2,mu_2m                             &
+                     ,u,v                                             &
+                     ,is_restart                                      & ! CLWRF
+                     ,clwrfH,t2,q2,u10,v10, skintemp                  & ! CLWRF
+                     ,t2clmin,t2clmax,tt2clmin,tt2clmax               & ! CLWRF
+                     ,t2clmean,t2clstd                                & ! CLWRF
+                     ,q2clmin,q2clmax,tq2clmin,tq2clmax               & ! CLWRF
+                     ,q2clmean,q2clstd                                & ! CLWRF
+                     ,u10clmax,v10clmax,spduv10clmax,tspduv10clmax    & ! CLWRF
+                     ,u10clmean,v10clmean,spduv10clmean               & ! CLWRF
+                     ,u10clstd,v10clstd,spduv10clstd                  & ! CLWRF
+                     ,raincclmax,rainncclmax,traincclmax,trainncclmax & ! CLWRF
+                     ,raincclmean,rainncclmean,raincclstd,rainncclstd & ! CLWRF
+                     ,skintempclmin,skintempclmax                     & ! CLWRF
+                     ,tskintempclmin,tskintempclmax                   & ! CLWRF
+                     ,skintempclmean,skintempclstd                    & ! CLWRF
+                     ,raincv,rainncv,rainc,rainnc                     &
+                     ,i_rainc,i_rainnc                                &
+                     ,hfx,sfcevp,lh                                   &
+                     ,dt,xtime,sbw                                    &
+                     ,diag_print                                      &
+                     ,bucket_mm, bucket_J                             &
+                                                                      )
+!----------------------------------------------------------------------
+
+  USE module_dm, ONLY: wrf_dm_sum_real, wrf_dm_maxval
+  USE module_configure 
+
+   IMPLICIT NONE
+!======================================================================
+! Definitions
+!-----------
+!-- DT            time step (second)
+!-- XTIME         forecast time
+!-- SBW           specified boundary width - used later
+!
+!-- P8W           3D pressure array at full eta levels
+!-- MU            dry column hydrostatic pressure
+!-- RAINC         cumulus scheme precipitation since hour 0
+!-- RAINCV        cumulus scheme precipitation in one time step (mm)
+!-- RAINNC        explicit scheme precipitation since hour 0
+!-- RAINNCV       explicit scheme precipitation in one time step (mm)
+!-- HFX           surface sensible heat flux
+!-- LH            surface latent heat flux
+!-- SFCEVP        total surface evaporation
+!-- U             u component of wind - to be used later to compute k.e.
+!-- V             v component of wind - to be used later to compute k.e.
+!
+!-- ids           start index for i in domain
+!-- ide           end index for i in domain
+!-- jds           start index for j in domain
+!-- jde           end index for j in domain
+!-- kds           start index for k in domain
+!-- kde           end index for k in domain
+!-- ims           start index for i in memory
+!-- ime           end index for i in memory
+!-- jms           start index for j in memory
+!-- jme           end index for j in memory
+!-- ips           start index for i in patch
+!-- ipe           end index for i in patch
+!-- jps           start index for j in patch
+!-- jpe           end index for j in patch
+!-- kms           start index for k in memory
+!-- kme           end index for k in memory
+!-- i_start       start indices for i in tile
+!-- i_end         end indices for i in tile
+!-- j_start       start indices for j in tile
+!-- j_end         end indices for j in tile
+!-- kts           start index for k in tile
+!-- kte           end index for k in tile
+!-- num_tiles     number of tiles
+!
+! CLWRF-UC May.09 definitions
+!-----------
+! is_restart: whether if simulation is a restart
+! clwrfH: Interval (hour) of accumulation for computations 
+! [var]cl[min/max]: [minimum/maximum] of variable [var] during interval
+! t[var]cl[min/max]: Time (minutes) of [minimum/maximum] of variable 
+!    [var] during interval 
+! [var]clmean: mean of variable [var] during interval
+! [var]clstd: standard dev. of variable [var] during interval
+!    Variables are written on aux_hist_out7 (established
+!    in Registry)
+!
+!======================================================================
+
+   INTEGER,      INTENT(IN   )                     ::            &
+                                      ids,ide, jds,jde, kds,kde, &
+                                      ims,ime, jms,jme, kms,kme, &
+                                      ips,ipe, jps,jpe, kps,kpe, &
+                                                        kts,kte, &
+                                                      num_tiles
+
+   INTEGER, DIMENSION(num_tiles), INTENT(IN)       :: i_start,   &
+                                      i_end,j_start,j_end
+
+   INTEGER,      INTENT(IN   )                     :: diag_print
+   REAL,      INTENT(IN   )                        :: bucket_mm, &
+                                      bucket_J
+
+   REAL, DIMENSION( ims:ime, kms:kme, jms:jme ),                 &
+                                       INTENT(IN ) :: u,v,p8w    
+
+   REAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN) :: MU_2,     & 
+                                      RAINNCV, RAINCV, HFX,      &
+                                      SFCEVP, LH, SKINTEMP 
+
+   REAL, DIMENSION( ims:ime , jms:jme ),                         &
+                                     INTENT(INOUT) :: DPSDT,     &
+                                     DMUDT, RAINNC, RAINC,       &
+                                     MU_2M, PK1M
+ 
+   REAL,  INTENT(IN   )                            :: DT, XTIME
+   INTEGER,  INTENT(IN   )                         :: SBW
+   INTEGER, DIMENSION( ims:ime , jms:jme ),                      & 
+                                     INTENT(INOUT) :: I_RAINC,   &
+                                     I_RAINNC
+
+! LOCAL  VAR
+
+   INTEGER                                   :: i,j,k,its,ite,jts,jte,ij
+   INTEGER                                   :: idp,jdp,irc,jrc,irnc,jrnc,isnh,jsnh
+   INTEGER                                   :: prfreq
+
+   REAL                                      :: dpsdt_sum, dmudt_sum, dardt_sum,  & 
+                          drcdt_sum, drndt_sum
+   REAL                                      :: hfx_sum, lh_sum, sfcevp_sum,      &
+                          rainc_sum, rainnc_sum, raint_sum
+   REAL                                      :: dmumax, raincmax, rainncmax,      &
+                          snowhmax
+   REAL                                      :: xtimep
+   LOGICAL, EXTERNAL                         :: wrf_dm_on_monitor
+   CHARACTER*256                             :: outstring
+   CHARACTER*6                               :: grid_str
+
+!!-------------------
+!! CLWRF-UC Nov.09
+
+   CHARACTER (LEN=80)                        :: timestr
+
+   REAL, DIMENSION( ims:ime , jms:jme ),                                          & 
+                          INTENT(IN)         :: t2, q2, u10, v10 
+   REAL, DIMENSION( ims:ime , jms:jme ),                                          &
+                          INTENT(OUT)        :: t2clmin, t2clmax, tt2clmin,       &
+                          tt2clmax, t2clmean, t2clstd,                            & 
+                          q2clmin, q2clmax, tq2clmin, tq2clmax, q2clmean, q2clstd,&
+                          u10clmax, v10clmax, spduv10clmax, tspduv10clmax,        &
+                          u10clmean, v10clmean, spduv10clmean,                    &
+                          u10clstd, v10clstd, spduv10clstd, skintempclmin,        &
+                          skintempclmax, tskintempclmin, tskintempclmax,          &
+                          skintempclmean, skintempclstd
+   REAL, DIMENSION( ims:ime , jms:jme ),                                          &
+                          INTENT(OUT)        :: raincclmax, rainncclmax,          &
+                          traincclmax, trainncclmax, raincclmean, rainncclmean,   & 
+                          raincclstd, rainncclstd 
+   REAL, PARAMETER                           :: minimum0= 1000000.,               &
+                          maximum0= -1000000. 
+   REAL                                      :: value
+   INTEGER, INTENT(IN)                       :: clwrfH
+   CHARACTER (LEN=1024)                      :: message
+   REAL, SAVE                                :: nsteps
+   LOGICAL                                   :: is_restart
+
+!-----------------------------------------------------------------
+! Compute minutes from reference times clwrfH
+
+! Initialize [var] values
+! SET START AND END POINTS FOR TILES
+!  !$OMP PARALLEL DO   &
+!  !$OMP PRIVATE ( ij )
+
+!  IF ( MOD(NINT(XTIME), clwrfH) == 0 ) THEN
+  IF (( MOD(NINT(XTIME*60./dt),NINT(clwrfH*60./dt)) == 0) .AND. (.NOT.is_restart)) THEN
+    DO ij = 1 , num_tiles
+      IF  ( wrf_dm_on_monitor() ) THEN
+        WRITE(message, *)'CLWRFdiag - T2; tile: ',ij,' T2clmin:',           & 
+          t2clmin(i_start(ij)+(i_end(ij)-i_start(ij))/2,                    &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' T2clmax:',               &
+          t2clmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,                    &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' TT2clmin:',              &
+          tt2clmin(i_start(ij)+(i_end(ij)-i_start(ij))/2,                   &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' TT2clmax:',              &
+          tt2clmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,                   &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' T2clmean:',              &
+          t2clmean(i_start(ij)+(i_end(ij)-i_start(ij))/2,                   &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' T2clstd:',               &
+          t2clstd(i_start(ij)+(i_end(ij)-i_start(ij))/2,                    &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2)
+        CALL wrf_debug(75, message)
+        WRITE(message, *)'CLWRFdiag - Q2; tile: ',ij,' Q2clmin:',           &
+          q2clmin(i_start(ij)+(i_end(ij)-i_start(ij))/2,                    &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' Q2clmax:',               &
+          q2clmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,                    &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' TQ2clmin:',              &
+          tq2clmin(i_start(ij)+(i_end(ij)-i_start(ij))/2,                   &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' TQ2clmax:',              &
+          tq2clmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,                   &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' Q2clmean:',              &
+          q2clmean(i_start(ij)+(i_end(ij)-i_start(ij))/2,                   &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' Q2clstd:',               &
+          q2clstd(i_start(ij)+(i_end(ij)-i_start(ij))/2,                    &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2)
+        CALL wrf_debug(75, message)
+        WRITE(message, *)'CLWRFdiag - WINDSPEED; tile: ',ij,' U10clmax:',   &
+          u10clmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,                   &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' V10clmax:',              &
+          v10clmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,                   &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' SPDUV10clmax:',          &
+          spduv10clmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,               &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' TSPDUV10clmax:',         &
+          tspduv10clmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,              &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' U10clmean:',             &
+          u10clmean(i_start(ij)+(i_end(ij)-i_start(ij))/2,                  &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' V10clmean:',             &
+          v10clmean(i_start(ij)+(i_end(ij)-i_start(ij))/2,                  &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' SPDUV10clmean:',         &
+          spduv10clmean(i_start(ij)+(i_end(ij)-i_start(ij))/2,              &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' U10clstd:',              &
+          u10clstd(i_start(ij)+(i_end(ij)-i_start(ij))/2,                   &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' V10clstd:',              &
+          v10clstd(i_start(ij)+(i_end(ij)-i_start(ij))/2,                   &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' SPDUV10clstd:',          &
+          spduv10clstd(i_start(ij)+(i_end(ij)-i_start(ij))/2,               &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2)
+        CALL wrf_debug(75, message)
+        WRITE(message, *)'CLWRFdiag - RAIN; tile: ',ij,' RAINCclmax:',      &
+          raincclmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,                 &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' RAINNCclmax:',           &
+          rainncclmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,                &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' TRAINCclmax:',           &
+          traincclmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,                &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' TRAINNCclmax:',          &
+          trainncclmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,               &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' RAINCclmean:',           &
+          raincclmean(i_start(ij)+(i_end(ij)-i_start(ij))/2,                &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' RAINNCclmean:',          &
+          rainncclmean(i_start(ij)+(i_end(ij)-i_start(ij))/2,               &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' RAINCclstd:',            &
+          raincclstd(i_start(ij)+(i_end(ij)-i_start(ij))/2,                 &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' RAINNCclstd:',           &
+          rainncclstd(i_start(ij)+(i_end(ij)-i_start(ij))/2,                &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2)
+        CALL wrf_debug(75, message)
+        WRITE(message,*)'CLWRFdiag - SKINTEMP; tile: ',ij,' SKINTEMPclmin:',&
+          skintempclmin(i_start(ij)+(i_end(ij)-i_start(ij))/2,              &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' SKINTEMPclmax:',         &
+          skintempclmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,              &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' TSKINTEMPclmin:',        &
+          tskintempclmin(i_start(ij)+(i_end(ij)-i_start(ij))/2,             &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' TSKINTEMPclmax:',        &
+          tskintempclmax(i_start(ij)+(i_end(ij)-i_start(ij))/2,             &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' SKINTEMPclmean:',        &
+          skintempclmean(i_start(ij)+(i_end(ij)-i_start(ij))/2,             &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2),' SKINTEMPclstd:',         &
+          skintempclstd(i_start(ij)+(i_end(ij)-i_start(ij))/2,              &
+          j_start(ij)+(j_end(ij)-j_start(ij))/2)
+        CALL wrf_debug(75, message)
+      ENDIF
+      DO j = j_start(ij), j_end(ij)
+        DO i = i_start(ij), i_end(ij)
+          t2clmin(i,j)=minimum0
+          t2clmax(i,j)=maximum0
+          t2clmean(i,j)=0.0
+          t2clstd(i,j)=0.0
+          q2clmin(i,j)=minimum0
+          q2clmax(i,j)=maximum0
+          q2clmean(i,j)=0.0
+          q2clstd(i,j)=0.0
+          spduv10clmax(i,j)=0.0
+          u10clmean(i,j)=0.0
+          v10clmean(i,j)=0.0
+          spduv10clmean(i,j)=0.0
+          u10clstd(i,j)=0.0
+          v10clstd(i,j)=0.0
+          spduv10clstd(i,j)=0.0
+          raincclmax(i,j)=0.0
+          rainncclmax(i,j)=0.0
+          raincclmean(i,j)=0.0
+          rainncclmean(i,j)=0.0
+          raincclstd(i,j)=0.0
+          rainncclstd(i,j)=0.0
+          skintempclmin(i,j)=minimum0
+          skintempclmax(i,j)=maximum0
+          skintempclmean(i,j)=0.0
+          skintempclstd(i,j)=0.0
+!          nsteps=0.
+        ENDDO
+      ENDDO
+  ENDDO
+    nsteps=clwrfH*60./dt
+  ELSE
+    xtimep = xtime + dt/60.   ! value at end of timestep for time info
+!    nsteps=nsteps+1.
+    nsteps=clwrfH*60./dt
+!      DO j = j_start(ij), j_end(ij)
+!        DO i = i_start(ij), i_end(ij)
+!     DO j = jps, jpe
+!       DO i = ips, ipe
+! Temperature
+          CALL varstatistics(t2,xtimep,ime-ims+1,jme-jms+1,t2clmin,t2clmax,   &
+            tt2clmin,tt2clmax,t2clmean,t2clstd)
+! Water vapor mixing ratio
+          CALL varstatistics(q2,xtimep,ime-ims+1,jme-jms+1,q2clmin,q2clmax,   &
+            tq2clmin,tq2clmax,q2clmean,q2clstd)
+! Wind speed
+          CALL varstatisticsWIND(u10,v10,xtimep,ime-ims+1,jme-jms+1,u10clmax, &
+            v10clmax,spduv10clmax,tspduv10clmax,u10clmean,v10clmean,         &
+            spduv10clmean,u10clstd,v10clstd,spduv10clstd)
+! Precipitation flux
+          CALL varstatisticsMAX(raincv/dt,xtimep,ime-ims+1,jme-jms+1,         &
+            raincclmax,traincclmax,raincclmean,raincclstd) 
+          CALL varstatisticsMAX(rainncv/dt,xtimep,ime-ims+1,jme-jms+1,        &
+            rainncclmax,trainncclmax,rainncclmean,rainncclstd)
+! Skin Temperature 
+          CALL varstatistics(skintemp,xtimep,ime-ims+1,jme-jms+1,skintempclmin,&
+            skintempclmax, tskintempclmin,tskintempclmax,skintempclmean,      &
+            skintempclstd)
+
+!          IF (MOD(NINT(XTIME),clwrfH) == 0) THEN
+!          IF (MOD(NINT(XTIME+dt/60.),clwrfH) == 0) THEN
+           IF ((MOD(NINT((XTIME+dt/60.)*60./dt),NINT(clwrfH*60./dt)) == 0)) THEN
+             IF  ( wrf_dm_on_monitor() ) PRINT *,'nsteps=',nsteps,' xtime:',  &
+               xtime,' clwrfH:',clwrfH 
+               t2clmean=t2clmean/nsteps
+               t2clstd=SQRT(t2clstd/nsteps-t2clmean**2.)
+               q2clmean=q2clmean/nsteps
+               q2clstd=SQRT(q2clstd/nsteps-q2clmean**2.)
+               u10clmean=u10clmean/nsteps
+               v10clmean=v10clmean/nsteps
+               spduv10clmean=spduv10clmean/nsteps
+               u10clstd=SQRT(u10clstd/nsteps-u10clmean**2.)
+               v10clstd=SQRT(v10clstd/nsteps-v10clmean**2.)
+               spduv10clstd=SQRT(spduv10clstd/nsteps-                        &
+                 spduv10clmean**2)
+               raincclmean=raincclmean/nsteps
+               rainncclmean=rainncclmean/nsteps
+               raincclstd=SQRT(raincclstd/nsteps-raincclmean**2.)
+               rainncclstd=SQRT(rainncclstd/nsteps-rainncclmean**2.)
+               skintempclmean=skintempclmean/nsteps
+              skintempclstd=SQRT(skintempclstd/nsteps-skintempclmean**2.)
+            END IF
+!        ENDDO
+!      ENDDO
+  ENDIF
+!  !$OMP END PARALLEL DO
+
+   END SUBROUTINE clwrf_output_calc
+
+! UC.CLWRF Nov.09
+SUBROUTINE varstatisticsWIND(varu, varv, tt, dx, dy, varumax, varvmax,       &
+  varuvmax, tvaruvmax, varumean, varvmean, varuvmean, varustd, varvstd,     & 
+  varuvstd) 
+! Subroutine to compute variable statistics for a wind somponents 
+
+IMPLICIT NONE
+
+INTEGER                                                        :: i, j
+INTEGER, INTENT(IN)                                            :: dx, dy
+REAL, DIMENSION(dx,dy), INTENT(IN)                             :: varu, varv
+REAL, INTENT(IN)                                               :: tt
+REAL, DIMENSION(dx,dy), INTENT(INOUT)                          :: varumax,   &
+  varvmax, varuvmax, tvaruvmax, varumean, varvmean, varuvmean, varustd,      & 
+  varvstd, varuvstd
+REAL                                                           :: varuv
+
+DO i=1,dx
+  DO j=1,dy
+    varuv=sqrt(varu(i,j)*varu(i,j)+varv(i,j)*varv(i,j))
+      IF (varuv > varuvmax(i,j)) THEN
+        varumax(i,j)=varu(i,j)
+        varvmax(i,j)=varv(i,j)
+        varuvmax(i,j)=varuv
+        tvaruvmax(i,j)=tt
+      END IF
+    varuvmean(i,j)=varuvmean(i,j)+varuv
+    varuvstd(i,j)=varuvstd(i,j)+varuv**2
+  END DO
+END DO
+varumean=varumean+varu
+varvmean=varvmean+varv
+varustd=varustd+varu**2
+varvstd=varvstd+varv**2
+
+END SUBROUTINE varstatisticsWIND
+
+SUBROUTINE varstatisticsMAX(var, tt, dx, dy, varmax, tvarmax, varmean,       &
+   varstd)
+! Subroutine to compute variable statistics for a max only variable values
+
+IMPLICIT NONE
+
+INTEGER                                                        :: i,j
+INTEGER, INTENT(IN)                                            :: dx, dy
+REAL, DIMENSION(dx,dy), INTENT(IN)                             :: var
+REAL, INTENT(IN)                                               :: tt
+REAL, DIMENSION(dx,dy), INTENT(INOUT)                          :: varmax,    &
+  tvarmax, varmean, varstd
+
+DO i=1,dx
+  DO j=1,dy
+    IF (var(i,j) > varmax(i,j)) THEN
+      varmax(i,j)=var(i,j)
+      tvarmax(i,j)=tt
+    END IF
+  END DO
+END DO
+varmean=varmean+var
+varstd=varstd+var**2
+
+END SUBROUTINE varstatisticsMAX 
+
+SUBROUTINE varstatistics(var, tt, dx, dy, varmin, varmax, tvarmin, tvarmax,  & 
+  varmean, varstd) 
+! Subroutine to compute variable statistics
+
+IMPLICIT NONE
+
+INTEGER                                                        :: i,j
+INTEGER, INTENT(IN)                                            :: dx, dy
+REAL, DIMENSION(dx,dy), INTENT(IN)                             :: var
+REAL, INTENT(IN)                                               :: tt
+REAL, DIMENSION(dx,dy), INTENT(INOUT)                          :: varmin,    &
+  varmax, tvarmin, tvarmax, varmean, varstd
+
+DO i=1,dx
+  DO j=1,dy
+    IF (var(i,j) < varmin(i,j)) THEN
+      varmin(i,j)=var(i,j)
+      tvarmin(i,j)=tt
+    END IF
+    IF (var(i,j) > varmax(i,j)) THEN
+      varmax(i,j)=var(i,j)
+      tvarmax(i,j)=tt
+    END IF
+  END DO
+END DO
+varmean=varmean+var
+varstd=varstd+var**2
+
+END SUBROUTINE varstatistics
+
+
 END MODULE module_diagnostics
diff --git a/wrfv2_fire/phys/module_fdda_spnudging.F b/wrfv2_fire/phys/module_fdda_spnudging.F
index 19d9ceec..30e8ee76 100644
--- a/wrfv2_fire/phys/module_fdda_spnudging.F
+++ b/wrfv2_fire/phys/module_fdda_spnudging.F
@@ -476,7 +476,7 @@ IF(guv > 0. ) then
 
 !Filter
 
-#ifdef DM_PARALLEL
+#if ( defined( DM_PARALLEL ) && ( ! defined( STUBMPI ) ) )
 # include "XPOSE_SPECTRAL_NUDGING_z2x.inc"
 
      CALL spectral_nudging_filter_3dx( grid%dif_xxx, xwavenum,    &
@@ -543,7 +543,7 @@ IF(guv > 0. ) then
 !
 ! Filter
 !
-#ifdef DM_PARALLEL
+#if ( defined( DM_PARALLEL ) && ( ! defined( STUBMPI ) ) )
 # include "XPOSE_SPECTRAL_NUDGING_z2x.inc"
      CALL spectral_nudging_filter_3dx( grid%dif_xxx, xwavenum,     &
                                 ids, ide, jds, jde, kds, kde,         &
@@ -613,7 +613,7 @@ IF(gt > 0. ) then
 
 !Filter
 
-#ifdef DM_PARALLEL
+#if ( defined( DM_PARALLEL ) && ( ! defined( STUBMPI ) ) )
 # include "XPOSE_SPECTRAL_NUDGING_z2x.inc"
 
      CALL spectral_nudging_filter_3dx( grid%dif_xxx, xwavenum,    &
@@ -685,7 +685,7 @@ IF(gph > 0. ) then
 
 !Filter
 
-#ifdef DM_PARALLEL
+#if ( defined( DM_PARALLEL ) && ( ! defined( STUBMPI ) ) )
 # include "XPOSE_SPECTRAL_NUDGING_z2x.inc"
 
      CALL spectral_nudging_filter_3dx( grid%dif_xxx, xwavenum,    &
diff --git a/wrfv2_fire/phys/module_fddaobs_rtfdda.F b/wrfv2_fire/phys/module_fddaobs_rtfdda.F
index 93809ea3..a242981e 100644
--- a/wrfv2_fire/phys/module_fddaobs_rtfdda.F
+++ b/wrfv2_fire/phys/module_fddaobs_rtfdda.F
@@ -1939,7 +1939,7 @@ SUBROUTINE errob(inest, ub, vb, tb, t0, qvb, pbase, pp, rovcp,  &
                 RSQ=RX*RX+RY*RY
 ! THIS FUNCTION DECREASES WTIJ AS PSFC CHANGES WITHIN SEARCH RADIUS
                 DPRIM=SQRT(RSQ)
-                D=DPRIM+RINDX*DCON*ABS(psurf(n)-pbase(i,1))
+                D=DPRIM+RINDX*DCON*ABS(psurf(n)-.001*pbase(i,1))
                 DSQ=D*D
                 WTIJ(i)=(RIS-DSQ)/(RIS+DSQ)
                 WTIJ(i)=AMAX1(0.0,WTIJ(i))
@@ -2215,6 +2215,7 @@ SUBROUTINE errob(inest, ub, vb, tb, t0, qvb, pbase, pp, rovcp,  &
               endif
 
             else
+
 !----------------------------------------------------------------------
 !         ---   HANDLE MULTI-LEVEL OBSERVATIONS  ---
 !----------------------------------------------------------------------
@@ -2290,14 +2291,14 @@ SUBROUTINE errob(inest, ub, vb, tb, t0, qvb, pbase, pp, rovcp,  &
                   .and. varobs(5,n+nn-1).gt.-800000.) then
                     pobhi=varobs(5,n+nn-1)
                     nhi=n+nn-1
-                    if(pobhi.lt.pijk .and. abs(pobhi-pijk).lt.20.) then
-                      go to 1502        ! within 200mb of obs height
+                    if(pobhi.lt.pijk .and. abs(pobhi-pijk).lt.0.5*maxsnd_gap) then
+                      go to 1502        ! within maxsnd_gap/2 of obs height
                     endif
                   endif
 
                 enddo
 
-! did not find any ob above within 200 mb, so jump out 
+! did not find any ob above within maxsnd_gap/2, so jump out 
                 go to 1501
  1502           continue
 
@@ -2307,14 +2308,14 @@ SUBROUTINE errob(inest, ub, vb, tb, t0, qvb, pbase, pp, rovcp,  &
                   .and. varobs(5,nnjc).gt.-800000.) then
                     poblo=varobs(5,nnjc)
                     nlo=nnjc
-                    if(poblo.gt.pijk .and. abs(poblo-pijk).lt.20.) then
-                      go to 1505        ! within 200mb of obs height
+                    if(poblo.gt.pijk .and. abs(poblo-pijk).lt.0.5*maxsnd_gap) then
+                      go to 1505        ! within maxsnd_gap/2 of obs height
                     endif
                   endif
                 enddo
 !yliu end --
 
-! did not find any ob below within 200 mb, so jump out 
+! did not find any ob below within maxsnd_gap/2, so jump out 
                 go to 1501
  1505           continue
 
diff --git a/wrfv2_fire/phys/module_fr_sfire_core.F b/wrfv2_fire/phys/module_fr_sfire_core.F
index 874a7a9c..36b340f3 100644
--- a/wrfv2_fire/phys/module_fr_sfire_core.F
+++ b/wrfv2_fire/phys/module_fr_sfire_core.F
@@ -1732,7 +1732,7 @@ real,dimension(tims:time,tjms:tjme)::rra,grada,speeda,tanphia
             nvy=diffCy/scale
                       
             ! wind speed in direction of spread
-            ! speed =  vx(i,j)*nvx + vy(i,j)*nvy
+            speed =  fp%vx(i,j)*nvx + fp%vy(i,j)*nvy
         
     
             ! get rate of spread from wind speed and slope
@@ -1765,7 +1765,7 @@ real,dimension(tims:time,tjms:tjme)::rra,grada,speeda,tanphia
                     advy=0
                 endif
 
-                ! tanphi =  dzdxf*nvx + dzdyf*nvy
+                tanphi =  fp%dzdxf(i,j)*nvx + fp%dzdyf(i,j)*nvy
 		! advection from slope direction 
                 if(abs(tanphi)>eps) then
                     advx=advx+fp%dzdxf(i,j)*ros_slope/tanphi
diff --git a/wrfv2_fire/phys/module_fr_sfire_util.F b/wrfv2_fire/phys/module_fr_sfire_util.F
index b1dd0c7f..e600403d 100644
--- a/wrfv2_fire/phys/module_fr_sfire_util.F
+++ b/wrfv2_fire/phys/module_fr_sfire_util.F
@@ -1209,7 +1209,7 @@ do j=jts,jte
 	if(r.ne.a(i,j))then
            write(6,*)'Reading file ',trim(filename)
            write(6,*)'value at position ',i,j,' cannot be converted to integer'
-           write(6,*)'read ',a(i,j),' converted as',k,' converted as ',r
+           write(6,*)'read ',a(i,j),' converted as',ia(i,j),' converted as ',r
 	   msg=trim(filename)//' is not integer file'
 	   call crash(msg)
         endif
diff --git a/wrfv2_fire/phys/module_mp_morr_two_moment.F b/wrfv2_fire/phys/module_mp_morr_two_moment.F
index f4b5a615..c27d491f 100644
--- a/wrfv2_fire/phys/module_mp_morr_two_moment.F
+++ b/wrfv2_fire/phys/module_mp_morr_two_moment.F
@@ -25,6 +25,22 @@
 !      POTENTIAL FOR SPURIOUS ACCUMULATION OF PRECIPITATION DURING SUB-STEPPING FOR SEDIMENTATION
 ! 3) BUG FIX TO LATENT HEAT RELEASE DUE TO COLLISIONS OF CLOUD ICE WITH RAIN
 ! 4) CLEAN UP OF COMMENTS IN THE CODE
+    
+! additional minor bug fixes and small changes, 5/30/2011
+! minor revisions by A. Ackerman April 2011:
+! 1) replaced kinematic with dynamic viscosity 
+! 2) replaced scaling by air density for cloud droplet sedimentation
+!    with viscosity-dependent Stokes expression
+! 3) use Ikawa and Saito (1991) air-density scaling for cloud ice
+! 4) corrected typo in 2nd digit of ventilation constant F2R
+
+! additional fixes:
+! 5) TEMPERATURE FOR ACCELERATED MELTING DUE TO COLLIIONS OF SNOW AND GRAUPEL
+!    WITH RAIN SHOULD USE CELSIUS, NOT KELVIN (BUG REPORTED BY K. VAN WEVERBERG)
+! 6) NPRACS IS NO SUBTRACTED SUBTRACTED FROM SNOW NUMBER CONCENTRATION, SINCE
+!    DECREASE IN SNOW NUMBER IS ALREADY ACCOUNTED FOR BY NSMLTS 
+! 7) fix for switch for running w/o graupel/hail (cloud ice and snow only)
+
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -327,7 +343,9 @@ SUBROUTINE MORR_TWO_MOMENT_INIT
          F1S = 0.86
          F2S = 0.28
          F1R = 0.78
-         F2R = 0.32
+!         F2R = 0.32
+! fix 053011
+         F2R = 0.308
 !         G = 9.806
          QSMALL = 1.E-14
          EII = 0.1
@@ -1258,14 +1276,22 @@ END SUBROUTINE MP_MORR_TWO_MOMENT
 !..................................................................
 ! MICROPHYSICS PARAMETERS VARYING IN TIME/HEIGHT
 
+! fix 053011
+            MU(K) = 1.496E-6*T3D(K)**1.5/(T3D(K)+120.)
+
 ! FALL SPEED WITH DENSITY CORRECTION (HEYMSFIELD AND BENSSEMER 2006)
 
             DUM = (RHOSU/RHO(K))**0.54
 
-            AIN(K) = DUM*AI
+! fix 053011
+!            AIN(K) = DUM*AI
+! AA revision 4/1/11: Ikawa and Saito 1991 air-density correction 
+            AIN(K) = (RHOSU/RHO(K))**0.35
             ARN(K) = DUM*AR
             ASN(K) = DUM*AS
-            ACN(K) = DUM*AC
+!            ACN(K) = DUM*AC
+! AA revision 4/1/11: temperature-dependent Stokes fall speed
+            ACN(K) = G*RHOW/(18.*MU(K))
 ! HM ADD GRAUPEL 8/28/06
             AGN(K) = DUM*AG
 
@@ -1284,21 +1310,17 @@ END SUBROUTINE MP_MORR_TWO_MOMENT
 
 ! THERMAL CONDUCTIVITY FOR AIR
 
-            DUM = 1.496E-6*T3D(K)**1.5/(T3D(K)+120.)
-
-!            KAP(K) = 1.414E3*1.496E-6*T3D(K)**1.5/(T3D(K)+120.)
-            KAP(K) = 1.414E3*DUM
+! fix 053011
+            KAP(K) = 1.414E3*MU(K)
 
 ! DIFFUSIVITY OF WATER VAPOR
 
             DV(K) = 8.794E-5*T3D(K)**1.81/PRES(K)
 
-! VISCOSITY OF AIR
 ! SCHMIT NUMBER
 
-!            MU(K) = 1.496E-6*T3D(K)**1.5/(T3D(K)+120.)/RHO(K)
-            MU(K) = DUM/RHO(K)
-            SC(K) = MU(K)/DV(K)
+! fix 053011
+            SC(K) = MU(K)/(RHO(K)*DV(K))
 
 ! PSYCHOMETIC CORRECTIONS
 
@@ -1557,11 +1579,12 @@ END SUBROUTINE MP_MORR_TWO_MOMENT
                   2./(LAMS(K)**2*LAMR(K)**2)+                  &
                   0.5/(LAMS(K)*LAMR(K)**3)))
 
-            NPRACS(K) = CONS32*RHO(K)*(1.7*(UNR-UNS)**2+            &
-                0.3*UNR*UNS)**0.5*N0RR(K)*N0S(K)*              &
-                (1./(LAMR(K)**3*LAMS(K))+                      &
-                 1./(LAMR(K)**2*LAMS(K)**2)+                   &
-                 1./(LAMR(K)*LAMS(K)**3))
+! fix 053011, npracs no longer subtracted from snow
+!            NPRACS(K) = CONS32*RHO(K)*(1.7*(UNR-UNS)**2+            &
+!                0.3*UNR*UNS)**0.5*N0RR(K)*N0S(K)*              &
+!                (1./(LAMR(K)**3*LAMS(K))+                      &
+!                 1./(LAMR(K)**2*LAMS(K)**2)+                   &
+!                 1./(LAMR(K)*LAMS(K)**3))
 
          END IF
 
@@ -1669,8 +1692,10 @@ END SUBROUTINE MP_MORR_TWO_MOMENT
 
           IF (QNI3D(K).GE.1.E-8) THEN
 
+! fix 053011
 ! HM, MODIFY FOR V3.2, ADD ACCELERATED MELTING DUE TO COLLISION WITH RAIN
-             DUM = -CPW/XLF(K)*T3D(K)*PRACS(K)
+!             DUM = -CPW/XLF(K)*T3D(K)*PRACS(K)
+             DUM = -CPW/XLF(K)*(T3D(K)-273.15)*PRACS(K)
 
              PSMLT(K)=2.*PI*N0S(K)*KAP(K)*(273.15-T3D(K))/       &
                     XLF(K)*RHO(K)*(F1S/(LAMS(K)*LAMS(K))+        &
@@ -1701,8 +1726,10 @@ END SUBROUTINE MP_MORR_TWO_MOMENT
 
           IF (QG3D(K).GE.1.E-8) THEN
 
+! fix 053011
 ! HM, MODIFY FOR V3.2, ADD ACCELERATED MELTING DUE TO COLLISION WITH RAIN
-             DUM = -CPW/XLF(K)*T3D(K)*PRACG(K)
+!             DUM = -CPW/XLF(K)*T3D(K)*PRACG(K)
+             DUM = -CPW/XLF(K)*(T3D(K)-273.15)*PRACG(K)
 
              PGMLT(K)=2.*PI*N0G(K)*KAP(K)*(273.15-T3D(K))/ 		 &
                     XLF(K)*RHO(K)*(F1S/(LAMG(K)*LAMG(K))+                &
@@ -1806,7 +1833,8 @@ END SUBROUTINE MP_MORR_TWO_MOMENT
       QR3DTEN(K) = QR3DTEN(K)+(PRE(K)+PRA(K)+PRC(K)-PSMLT(K)-PGMLT(K)+PRACS(K)+PRACG(K))
       QNI3DTEN(K) = QNI3DTEN(K)+(PSMLT(K)+EVPMS(K)-PRACS(K))
       QG3DTEN(K) = QG3DTEN(K)+(PGMLT(K)+EVPMG(K)-PRACG(K))
-      NS3DTEN(K) = NS3DTEN(K)-NPRACS(K)
+! fix 053011
+!      NS3DTEN(K) = NS3DTEN(K)-NPRACS(K)
 ! HM, bug fix 5/12/08, npracg is subtracted from nr not ng
 !      NG3DTEN(K) = NG3DTEN(K)
       NC3DTEN(K) = NC3DTEN(K)+ (-NPRA(K)-NPRC(K))
@@ -2859,6 +2887,9 @@ END SUBROUTINE MP_MORR_TWO_MOMENT
 	    NSUBG(K) = 0.
 	    NGMLTG(K) = 0.
             NGMLTR(K) = 0.
+! fix 053011
+            PIACRS(K)=PIACRS(K)+PIACR(K)
+            PIACR(K) = 0.
        END IF
 
 ! CONSERVATION OF QC
@@ -3247,8 +3278,10 @@ END SUBROUTINE MP_MORR_TWO_MOMENT
         dum=(rhosu/rho(k))**0.54
         UMS=MIN(UMS,1.2*dum)
         UNS=MIN(UNS,1.2*dum)
-        UMI=MIN(UMI,1.2*dum)
-        UNI=MIN(UNI,1.2*dum)
+! fix 053011
+! fix for correction by AA 4/6/11
+        UMI=MIN(UMI,1.2*(rhosu/rho(k))**0.35)
+        UNI=MIN(UNI,1.2*(rhosu/rho(k))**0.35)
         UMR=MIN(UMR,9.1*dum)
         UNR=MIN(UNR,9.1*dum)
         UMG=MIN(UMG,20.*dum)
diff --git a/wrfv2_fire/phys/module_mp_sbu_ylin.F b/wrfv2_fire/phys/module_mp_sbu_ylin.F
index 7f912238..3c0d716f 100644
--- a/wrfv2_fire/phys/module_mp_sbu_ylin.F
+++ b/wrfv2_fire/phys/module_mp_sbu_ylin.F
@@ -13,13 +13,6 @@
 !---          computation, please note that snow is (1-Ri)*qs and graupel is Ri*qs. Otherwise, reflectivity will be underestimated.      
 !---       7) The Liu and Daum autoconverion is quite sensitive on Nt_c. For mixed-phase cloud and marine environment, Nt_c of 10 or 20 is suggested.
 !---          default value is 10E.6. Change accordingly for your use.
-!---       8)   Eq.7 and 8 are not in SI units and need to be converted in the code. the
-!              paper treats the units in Eq.7 and 8 as cgs,  and so need 1e-2^(2-ba) in
-!              the code, and that would give the plots in the paper. However, there is
-!              large uncertainty with this parameter, and one could argue that the units
-!              for these equations could be mm-g-s instead, which would mean 1e-3^(2-ba)
-!              in the code. This increases the snow fallspeed and gives an even
-!              better comparison of aa and ba with obs in paper.
 
 
       MODULE module_mp_sbu_ylin
@@ -539,8 +532,8 @@ CONTAINS
          am_s(k) =  10**(2*bm_s(k)-3.0)*am_s(k)
          aa_s(k) = aa_c1 + aa_c2*tc0 + aa_c3*Ri(k)
          ba_s(k) = ba_c1 + ba_c2*tc0 + ba_c3*Ri(k)
-!---  convert from mm.g.s to SI unit (this will give larger PI fall speed than in the paper)
-         aa_s(k) = (1e-3)**(2.0-ba_s(k))*aa_s(k)
+!---  convert to SI unit as in paper
+         aa_s(k) = (1e-2)**(2.0-ba_s(k))*aa_s(k)
 !---- get v from Mitchell 1996
          av_s(k) = best_a*viscmu(k)*(2*grav*am_s(k)/rho(k)/aa_s(k)/(viscmu(k)**2))**best_b
          bv_s(k) = best_b*(bm_s(k)-ba_s(k)+2)-1
diff --git a/wrfv2_fire/phys/module_mp_thompson.F b/wrfv2_fire/phys/module_mp_thompson.F
index 298618a1..b21d0ee9 100644
--- a/wrfv2_fire/phys/module_mp_thompson.F
+++ b/wrfv2_fire/phys/module_mp_thompson.F
@@ -27,7 +27,7 @@
 !.. Remaining values should probably be left alone.
 !..
 !..Author: Greg Thompson, NCAR-RAL, gthompsn@ucar.edu, 303-497-2805
-!..Last modified: 21 Nov 2010
+!..Last modified: 26 Aug 2011
 !+---+-----------------------------------------------------------------+
 !wrft:model_layer:physics
 !+---+-----------------------------------------------------------------+
@@ -81,7 +81,7 @@
 !.. y-intercept for an exponential distrib and proper values are
 !.. computed based on same mixing ratio and total number concentration.
       REAL, PARAMETER, PRIVATE:: gonv_min = 1.E4
-      REAL, PARAMETER, PRIVATE:: gonv_max = 1.E6
+      REAL, PARAMETER, PRIVATE:: gonv_max = 3.E6
 
 !..Mass power law relations:  mass = am*D**bm
 !.. Snow from Field et al. (2005), others assume spherical form.
@@ -127,7 +127,7 @@
 !.. because of truncation problems in snow/ice growth.
       REAL, PARAMETER, PRIVATE:: R1 = 1.E-12
       REAL, PARAMETER, PRIVATE:: R2 = 1.E-8
-      REAL, PARAMETER, PRIVATE:: eps = 1.E-29
+      REAL, PARAMETER, PRIVATE:: eps = 1.E-15
 
 !..Constants in Cooper curve relation for cloud ice number.
       REAL, PARAMETER, PRIVATE:: TNO = 5.0
@@ -1096,7 +1096,7 @@
 !+---+
 
       debug_flag = .false.
-      if (ii.eq.315 .and. jj.eq.2) debug_flag = .true.
+!     if (ii.eq.315 .and. jj.eq.2) debug_flag = .true.
 
       no_micro = .true.
       dtsave = dt
@@ -1415,10 +1415,10 @@
          if (temp(k).lt.T_0 .and. (rc(k)+rr(k)).gt.1.E-5) then
             xslw1 = 5. + alog10(max(1.E-5, min(1.E-2, (rc(k)+rr(k)))))
          else
-            xslw1 = 0.
+            xslw1 = 0.0001
          endif
-         ygra1 = 5. + alog10(max(1.E-5, min(1.E-2, rg(k))))
-         zans1 = 3.324 + (3./(5.*xslw1*ygra1/(5.*xslw1+1.+0.25*ygra1)+1.+0.25*ygra1))
+         ygra1 = 4.302 + alog10(max(5.E-5, min(5.E-2, rg(k))))
+         zans1 = 3.565 + (90./(50.*xslw1*ygra1/(5./xslw1+1.+0.25*ygra1)+30.+15.*ygra1))
          N0_exp = 10.**(zans1)
          N0_exp = MAX(DBLE(gonv_min), MIN(N0_exp, DBLE(gonv_max)))
          N0_min = MIN(N0_exp, N0_min)
@@ -1466,6 +1466,7 @@
           pnr_rcr(k) = Ef_rr * 8.*nr(k)*rr(k)
          endif
 
+         mvd_c(k) = D0c
          if (.not. L_qc(k)) CYCLE
          xDc = MAX(D0c*1.E6, ((rc(k)/(am_r*Nt_c))**obmr) * 1.E6)
          lamc = (Nt_c*am_r* ccg(2) * ocg1 / rc(k))**obmr
@@ -2313,10 +2314,10 @@
          if (temp(k).lt.T_0 .and. (rc(k)+rr(k)).gt.1.E-5) then
             xslw1 = 5. + alog10(max(1.E-5, min(1.E-2, (rc(k)+rr(k)))))
          else
-            xslw1 = 0.
+            xslw1 = 0.0001
          endif
-         ygra1 = 5. + alog10(max(1.E-5, min(1.E-2, rg(k))))
-         zans1 = 3.324 + (3./(5.*xslw1*ygra1/(5.*xslw1+1.+0.25*ygra1)+1.+0.25*ygra1))
+         ygra1 = 4.302 + alog10(max(5.E-5, min(5.E-2, rg(k))))
+         zans1 = 3.565 + (90./(50.*xslw1*ygra1/(5./xslw1+1.+0.25*ygra1)+30.+15.*ygra1))
          N0_exp = 10.**(zans1)
          N0_exp = MAX(DBLE(gonv_min), MIN(N0_exp, DBLE(gonv_max)))
          N0_min = MIN(N0_exp, N0_min)
@@ -2356,7 +2357,7 @@
           if (xrc.gt. 0.0) then
              prw_vcd(k) = clap*odt
           else
-             prw_vcd(k) = -rc(k)/rho(k)*odt
+             prw_vcd(k) = -rc(k)/rho(k)*odts
           endif
 
           qcten(k) = qcten(k) + prw_vcd(k)
@@ -2468,6 +2469,9 @@
           vtr = rhof(k)*av_r*crg(7)/crg(12) * lamr**cre(12)             &
                       *((lamr+fv_r)**(-cre(7)))
           vtnrk(k) = vtr
+         else
+          vtrk(k) = vtrk(k+1)
+          vtnrk(k) = vtnrk(k+1)
          endif
 
          if (MAX(vtrk(k),vtnrk(k)) .gt. 1.E-3) then
@@ -2497,6 +2501,9 @@
 ! Goal: less prominent size sorting
            vti = rhof(k)*av_i*cig(6)/cig(7) * ilami**bv_i
            vtnik(k) = vti
+          else
+           vtik(k) = vtik(k+1)
+           vtnik(k) = vtnik(k+1)
           endif
 
           if (vtik(k) .gt. 1.E-3) then
@@ -2531,6 +2538,8 @@
            else
             vtsk(k) = vts*vts_boost(k)
            endif
+          else
+            vtsk(k) = vtsk(k+1)
           endif
 
           if (vtsk(k) .gt. 1.E-3) then
@@ -2555,6 +2564,8 @@
            else
             vtgk(k) = vtg
            endif
+          else
+            vtgk(k) = vtgk(k+1)
           endif
 
           if (vtgk(k) .gt. 1.E-3) then
diff --git a/wrfv2_fire/phys/module_mp_wdm5.F b/wrfv2_fire/phys/module_mp_wdm5.F
index a4e90621..7718c0b8 100644
--- a/wrfv2_fire/phys/module_mp_wdm5.F
+++ b/wrfv2_fire/phys/module_mp_wdm5.F
@@ -104,6 +104,7 @@ CONTAINS
 !  Implemented by Kyo-Sun Lim and Jimy Dudhia (NCAR) Winter 2008
 !
 !  Reference) Lim and Hong (LH, 2010) Mon. Wea. Rev. 
+!             Juang and Hong (JH, 2010) Mon. Wea. Rev.
 !             Hong, Dudhia, Chen (HDC, 2004) Mon. Wea. Rev.
 !             Hong and Lim (HL, 2006) J. Korean Meteor. Soc.
 !             Cohard and Pinty (CP, 2000) Quart. J. Roy. Meteor. Soc.
@@ -786,7 +787,6 @@ CONTAINS
             snow(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000.+snow(i)
         endif 
         endif
-!       if(fallsum.gt.0.)sr(i)= snowncv(i)/(rainncv(i)+1.e-12)
         if(fallsum.gt.0.)sr(i)= tstepsnow(i)/(rainncv(i)+1.e-12)
       enddo
 !
@@ -958,7 +958,8 @@ CONTAINS
           lenconcr = max(1.2*lencon,qcrmin)
           if(avedia(i,k,1).gt.di15) then
             taucon = 3.7/den(i,k)/qci(i,k,1)/(0.5e6*rslopec(i,k)-7.5)
-            praut(i,k) = lencon/taucon
+            taucon = max(taucon, 1.e-12)
+            praut(i,k) = lencon/(taucon*den(i,k))
             praut(i,k) = min(max(praut(i,k),0.),qci(i,k,1)/dtcld)
 !---------------------------------------------------------------
 ! nraut: auto conversion rate from cloud to rain [LH A6][CP 18 & 19]
diff --git a/wrfv2_fire/phys/module_mp_wdm6.F b/wrfv2_fire/phys/module_mp_wdm6.F
index 5358d847..2cd5ba81 100644
--- a/wrfv2_fire/phys/module_mp_wdm6.F
+++ b/wrfv2_fire/phys/module_mp_wdm6.F
@@ -112,6 +112,7 @@ CONTAINS
 !  Implemented by Kyo-Sun Lim and Jimy Dudhia (NCAR) Winter 2008
 !
 !  Reference) Lim and Hong (LH, 2010) Mon. Wea. Rev. 
+!             Juang and Hong (JH, 2010) Mon. Wea. Rev.
 !             Hong, Dudhia, Chen (HDC, 2004) Mon. Wea. Rev. 
 !             Hong and Lim (HL, 2006) J. Korean Meteor. Soc. 
 !             Cohard and Pinty (CP, 2000) Quart. J. Roy. Meteor. Soc.
@@ -805,7 +806,6 @@ CONTAINS
             graupel(i) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. + graupel(i)
         ENDIF
         endif
-!       if(fallsum.gt.0.) sr(i) = (snowncv(i) + graupelncv(i))                 &  
         if(fallsum.gt.0.) sr(i) = (tstepsnow(i) + tstepgraup(i))               &  
                                   /(rainncv(i)+1.e-12)
       enddo
@@ -964,7 +964,8 @@ CONTAINS
           lenconcr = max(1.2*lencon, qcrmin)
           if(avedia(i,k,1).gt.di15) then
             taucon = 3.7/den(i,k)/qci(i,k,1)/(0.5e6*rslopec(i,k)-7.5)
-            praut(i,k) = lencon/taucon
+            taucon = max(taucon, 1.e-12)
+            praut(i,k) = lencon/(taucon*den(i,k))
             praut(i,k) = min(max(praut(i,k),0.),qci(i,k,1)/dtcld)
 !---------------------------------------------------------------
 ! nraut: auto conversion rate from cloud to rain [LH A6] [CP 18 & 19]
diff --git a/wrfv2_fire/phys/module_pbl_driver.F b/wrfv2_fire/phys/module_pbl_driver.F
index 1bd4dd7e..a02fbfcb 100644
--- a/wrfv2_fire/phys/module_pbl_driver.F
+++ b/wrfv2_fire/phys/module_pbl_driver.F
@@ -8,6 +8,7 @@ CONTAINS
    SUBROUTINE pbl_driver(                                          &
                   itimestep,dt,u_frame,v_frame                     &
                  ,bldt,curr_secs,adapt_step_flag                   &
+                 ,bldtacttime                                      & 
                  ,rublten,rvblten,rthblten                         &
                  ,tsk,xland,znt,ht                                 &
                  ,ust,pblh,hfx,qfx,grdflx                          &
@@ -299,6 +300,7 @@ CONTAINS
    REAL,       INTENT(IN   ),OPTIONAL    ::     bldt
    REAL,       INTENT(IN   ),OPTIONAL    ::     curr_secs
    LOGICAL,    INTENT(IN   ),OPTIONAL    ::     adapt_step_flag
+   REAL,       INTENT(INOUT),OPTIONAL    ::     bldtacttime  
 ! Optional for Wind Turbine Parameterizations
    REAL, DIMENSION( ims:ime, kms:kme ,jms:jme ), &
          INTENT(IN), OPTIONAL    :: phb
@@ -546,7 +548,7 @@ CONTAINS
    LOGICAL :: flag_qv, flag_qc, flag_qr, flag_qi, flag_qs, flag_qg
    CHARACTER*256 :: message
    REAL    :: next_bl_time
-   LOGICAL :: run_param
+   LOGICAL :: run_param , doing_adapt_dt , decided
    LOGICAL :: do_adapt
    integer iu_bep,iurb,idiff
    real seamask,thsk,zzz,unew,vnew,tnew,qnew,umom,vmom
@@ -583,26 +585,74 @@ CONTAINS
 !print *,f_qv, f_qc, f_qr, f_qi, f_qs, f_qg,' f_qv, f_qc, f_qr, f_qi, f_qs, f_qg'
 
   if (bl_pbl_physics .eq. 0) return
+
 ! RAINBL in mm (Accumulation between PBL calls)
 !
-! Modified for adaptive time step
-!
-  IF ( (itimestep .EQ. 1) .OR. (MOD(itimestep,STEPBL) .EQ. 0) ) THEN
-    run_param = .TRUE.
-  ELSE
-    run_param = .FALSE.
-  ENDIF
-
-  IF (PRESENT(adapt_step_flag)) THEN
-    IF ((adapt_step_flag)) THEN
-      IF ( (itimestep .EQ. 1) .OR. (bldt .EQ. 0) .OR. &
-           ( CURR_SECS + dt >= ( INT( CURR_SECS / ( bldt * 60 ) + 1 ) * bldt * 60) ) ) THEN
-        run_param = .TRUE.
-      ELSE
-        run_param = .FALSE.
-      ENDIF
-    ENDIF
-  ENDIF
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+         IF ( bldtacttime .eq. 0. ) THEN
+            bldtacttime = CURR_SECS + bldt*60.
+         END IF
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.
+!                ITIMESTEP=1
+!    Test 2:  If the user asked for the pbl to be run every time step, then yes.
+!                BLDT=0 or STEPBL=1
+!    Test 3:  If not adaptive dt, and this is on the requested pbl frequency, then yes.
+!                MOD(ITIMESTEP,STEPBL)=0
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate pbl time, then yes.
+!                CURR_SECS >= BLDTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+!  If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
+!  pbl run.
+
+   run_param = .FALSE.
+   decided = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( itimestep .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( PRESENT(bldt) )THEN
+      IF ( ( .NOT. decided ) .AND. &
+           ( ( bldt .EQ. 0. ) .OR. ( stepbl .EQ. 1 ) ) ) THEN
+         run_param   = .TRUE.
+         decided     = .TRUE.
+      END IF
+   ELSE
+      IF ( ( .NOT. decided ) .AND. &
+                                   ( stepbl .EQ. 1 )   ) THEN
+         run_param   = .TRUE.
+         decided     = .TRUE.
+      END IF
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(itimestep,stepbl) .EQ. 0 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. bldtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+      bldtacttime = curr_secs + bldt*60
+   END IF
+
 
  IF (run_param) THEN
   radiation = .false.
@@ -629,12 +679,14 @@ CONTAINS
          DTBL = dt
       ELSE
          if (do_adapt) then
-            call wrf_message("WARNING: When using an adaptive time-step the boundary layer"// &
-                             " time-step should be 0 (i.e., equivalent to model time-step).  "// &
-                             "In order to proceed, for boundary layer calculations, the "// &
-                             "boundary layer time-step"// &
-                             " will be rounded to the nearest minute, possibly resulting in"// &
-                             " innacurate results.")
+            IF ( curr_secs .LT. 2. * dt ) THEN
+               call wrf_message("WARNING: When using an adaptive time-step the boundary layer"// &
+                                " time-step should be 0 (i.e., equivalent to model time-step).  ")
+               call wrf_message("In order to proceed, for boundary layer calculations, the "// &
+                                "boundary layer time-step"// &
+                                 " will be rounded to the nearest minute," )
+                call wrf_message("possibly resulting in innacurate results.")
+            END IF
             DTBL=bldt*60
          else
             DTBL=DT*STEPBL
diff --git a/wrfv2_fire/phys/module_physics_addtendc.F b/wrfv2_fire/phys/module_physics_addtendc.F
index 6db36e1e..bca14d56 100644
--- a/wrfv2_fire/phys/module_physics_addtendc.F
+++ b/wrfv2_fire/phys/module_physics_addtendc.F
@@ -1090,7 +1090,7 @@ SUBROUTINE phy_cu_ten(config_flags,rk_step,n_moist,n_scalar,     &
 
        ENDIF
 
-   CASE (SASSCHEME)
+   CASE (SASSCHEME,OSASSCHEME)
         CALL add_a2a(rt_tendf,RTHCUTEN,config_flags,             &
                 ids,ide, jds, jde, kds, kde,                     &
                 ims, ime, jms, jme, kms, kme,                    &
diff --git a/wrfv2_fire/phys/module_physics_init.F b/wrfv2_fire/phys/module_physics_init.F
index f69d334a..18d7324f 100644
--- a/wrfv2_fire/phys/module_physics_init.F
+++ b/wrfv2_fire/phys/module_physics_init.F
@@ -1173,7 +1173,7 @@ integer myproc
 !     gmt_start=start_hour+real(start_minute)/60.+real(start_second)/3600.
               CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
 !             CALL hwrfrainit(sfull,shalf,pptop,JULYR_start,MONTH,IDAY,GMT_start,&
-                           allowed_to_read ,                         &
+                            config_flags,allowed_to_read ,                         &
                            kds, kde, kms, kme, kts, kte     )
              hwrflw = .true.
 #endif
@@ -1242,7 +1242,7 @@ integer myproc
              CALL nl_get_start_month(id,month)
              CALL nl_get_start_day(id,iday)
              CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
-                           allowed_to_read,                          &
+                            config_flags,allowed_to_read,                          &
                            kds, kde, kms, kme, kts, kte     )
              ENDIF
 #endif
@@ -1698,6 +1698,8 @@ integer myproc
                      its,ite, jts,jte, kts,kte                     )
 
       CASE (PXLSMSCHEME)
+          if(config_flags%num_land_cat .ne. 24) CALL wrf_error_fatal &
+            ( 'module_physics_init: 24 cat USGS must be used with PX LSM option' )
           CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV,  &
                      SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,        &
                      ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
@@ -1908,6 +1910,7 @@ integer myproc
    USE module_cu_gd,  ONLY : GDINIT
    USE module_cu_g3,  ONLY : G3INIT
    USE module_cu_sas
+   USE module_cu_osas
    USE module_cu_camzm_driver, ONLY : zm_conv_init
    USE module_cu_nsas
    USE module_cu_tiedtke
@@ -2049,6 +2052,15 @@ integer myproc
                       ims, ime, jms, jme, kms, kme,               &
                       its, ite, jts, jte, kts, kte                )
 
+     CASE (OSASSCHEME)
+          CALL osasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,      &
+                      RUCUTEN,RVCUTEN,                            &   ! gopal's doing for SAS
+                      restart,P_QC,P_QI,PARAM_FIRST_SCALAR,       &
+                      allowed_to_read ,                           &
+                      ids, ide, jds, jde, kds, kde,               &
+                      ims, ime, jms, jme, kms, kme,               &
+                      its, ite, jts, jte, kts, kte                )
+
      CASE (CAMZMSCHEME)
           CALL zm_conv_init(rucuten, rvcuten, rthcuten, rqvcuten,       &
                       rqccuten, rqicuten,                               &
diff --git a/wrfv2_fire/phys/module_ra_HWRF.F b/wrfv2_fire/phys/module_ra_HWRF.F
index c5343598..76768bb6 100755
--- a/wrfv2_fire/phys/module_ra_HWRF.F
+++ b/wrfv2_fire/phys/module_ra_HWRF.F
@@ -4,6 +4,7 @@
 !--  Search for "!GFDL" for changes to improve coupling with microphysics
 !-----------------------------------------------------------------------
 MODULE MODULE_RA_HWRF
+      USE MODULE_CONFIGURE,ONLY : GRID_CONFIG_REC_TYPE
       USE MODULE_MODEL_CONSTANTS
 !GFDL      USE MODULE_MP_ETANEW, ONLY : RHGRD,FPVS
       USE MODULE_MP_HWRF, ONLY : RHGRD_in,RHGRD_out,FPVS   !GFDL
@@ -49,11 +50,12 @@ CONTAINS
 
 !-----------------------------------------------------------------------
       SUBROUTINE HWRFRAINIT(SFULL,SHALF,PPTOP,JULYR,MONTH,IDAY,GMT,    &
-     &                       ALLOWED_TO_READ,                           &
+     &                       CONFIG_FLAGS, ALLOWED_TO_READ,                           &
      &                       KDS,KDE,KMS,KME,KTS,KTE)
 !-----------------------------------------------------------------------
       IMPLICIT NONE
 !-----------------------------------------------------------------------
+      TYPE (GRID_CONFIG_REC_TYPE) :: CONFIG_FLAGS
       INTEGER,INTENT(IN) :: KDS,KDE,KMS,KME,KTS,KTE
       REAL,DIMENSION(KMS:KME),INTENT(IN) :: SFULL, SHALF
       INTEGER,INTENT(IN) :: JULYR,MONTH,IDAY
@@ -90,7 +92,11 @@ CONTAINS
         CALL CO2O3(SFULL,SHALF,PPTOP,KME-KMS,KME-KMS+1,KME-KMS+2)
 #endif
 #if (NMM_CORE==1)
-        CALL CONRAD(KDS,KDE,KMS,KME,KTS,KTE)
+        IF(CONFIG_FLAGS%CO2TF==1)THEN
+          CALL CO2O3(SFULL,SHALF,PPTOP,KME-KMS,KME-KMS+1,KME-KMS+2)
+        ELSE
+          CALL CONRAD(KDS,KDE,KMS,KME,KTS,KTE)
+        ENDIF
 #endif
 !
         CALL O3CLIM
@@ -9440,6 +9446,36 @@ CONTAINS
 !     EQUIVALENCE (CDT51(1,1),CO2D2D(1,1,1)),(CO251(1,1),CO2D2D(1,1,2))
 !     EQUIVALENCE (C2D51(1,1),CO2D2D(1,1,3)),(CDT58(1,1),CO2D2D(1,1,4))
 !     EQUIVALENCE (CO258(1,1),CO2D2D(1,1,5)),(C2D58(1,1),CO2D2D(1,1,6))
+
+!    Deallocate before reading. This is required for nested domain init.
+!
+      IF(ALLOCATED (CO251))DEALLOCATE(CO251)
+      IF(ALLOCATED (CDT51))DEALLOCATE(CDT51)
+      IF(ALLOCATED (C2D51))DEALLOCATE(C2D51)
+      IF(ALLOCATED (CO258))DEALLOCATE(CO258)
+      IF(ALLOCATED (CDT58))DEALLOCATE(CDT58)
+      IF(ALLOCATED (C2D58))DEALLOCATE(C2D58)
+      IF(ALLOCATED (STEMP))DEALLOCATE(STEMP)
+      IF(ALLOCATED (GTEMP))DEALLOCATE(GTEMP)
+      IF(ALLOCATED (CO231))DEALLOCATE(CO231)
+      IF(ALLOCATED (CDT31))DEALLOCATE(CDT31)
+      IF(ALLOCATED (C2D31))DEALLOCATE(C2D31)
+      IF(ALLOCATED (CO238))DEALLOCATE(CO238)
+      IF(ALLOCATED (CDT38))DEALLOCATE(CDT38)
+      IF(ALLOCATED (C2D38))DEALLOCATE(C2D38)
+      IF(ALLOCATED (CO271))DEALLOCATE(CO271)
+      IF(ALLOCATED (CDT71))DEALLOCATE(CDT71)
+      IF(ALLOCATED (C2D71))DEALLOCATE(C2D71)
+      IF(ALLOCATED (CO278))DEALLOCATE(CO278)
+      IF(ALLOCATED (CDT78))DEALLOCATE(CDT78)
+      IF(ALLOCATED (C2D78))DEALLOCATE(C2D78)
+      IF(ALLOCATED (CO2M51))DEALLOCATE(CO2M51)
+      IF(ALLOCATED (CDTM51))DEALLOCATE(CDTM51)
+      IF(ALLOCATED (C2DM51))DEALLOCATE(C2DM51)
+      IF(ALLOCATED (CO2M58))DEALLOCATE(CO2M58)
+      IF(ALLOCATED (CDTM58))DEALLOCATE(CDTM58)
+      IF(ALLOCATED (C2DM58))DEALLOCATE(C2DM58)
+
       ALLOCATE(CO251(LP1,LP1))
       ALLOCATE(CDT51(LP1,LP1))
       ALLOCATE(C2D51(LP1,LP1))
diff --git a/wrfv2_fire/phys/module_radiation_driver.F b/wrfv2_fire/phys/module_radiation_driver.F
index b3861e87..e19adaaa 100644
--- a/wrfv2_fire/phys/module_radiation_driver.F
+++ b/wrfv2_fire/phys/module_radiation_driver.F
@@ -106,6 +106,7 @@ CONTAINS
               ,shadowmask,ht,dx,dy                 &
               ,SWUPFLX,SWUPFLXC,SWDNFLX,SWDNFLXC                          & ! Optional
               ,LWUPFLX,LWUPFLXC,LWDNFLX,LWDNFLXC                          & ! Optional
+              ,radtacttime                                                & 
                                                                           )
 
 
@@ -519,7 +520,7 @@ CONTAINS
      REAL, DIMENSION( ims:ime, jms:jme ), OPTIONAL, INTENT(IN)  :: ht
      INTEGER, DIMENSION( ims:ime, jms:jme ), OPTIONAL, INTENT(IN) :: shadowmask
 
-
+   REAL , OPTIONAL, INTENT(INOUT) ::    radtacttime ! Storing the time in s when radiation is called next
 ! LOCAL  VAR
 
    REAL, DIMENSION( ims:ime, jms:jme ) ::             GLAT,GLON
@@ -539,7 +540,7 @@ CONTAINS
    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qi_save,qc_save
 
    REAL    ::    next_rad_time
-   LOGICAL ::    run_param
+   LOGICAL ::    run_param , doing_adapt_dt , decided
 !------------------------------------------------------------------
 ! solar related variables are added to declaration
 !-------------------------------------------------
@@ -558,28 +559,62 @@ CONTAINS
 !                     and is also consistent with removal of offset in new XTIME
 ! also need to account for stepra=1 which always has zero modulo output
 
-!
-! Calculate whether or not to run the radiation step.
-! If CURR_SECS is passed in, we will calculate based upon that.  If it
-!   is not passed in, we'll do the old method of using the time STEP number
-!   
-
-   IF ( (itimestep .EQ. 1) .OR. (MOD(itimestep,STEPRA) .EQ. 1 + ra_call_offset) .OR. &
-        (STEPRA .EQ. 1) ) THEN
-     run_param = .TRUE.
-   ELSE
-     run_param = .FALSE.
-   ENDIF
-   IF (PRESENT(adapt_step_flag)) THEN
-     IF ((adapt_step_flag)) THEN
-       IF ( (itimestep .EQ. 1) .OR. (radt .EQ. 0) .OR. &
-           ( CURR_SECS + dt >= ( INT( CURR_SECS / ( radt * 60 ) + 1 ) * radt * 60) ) ) THEN
-         run_param = .TRUE.
-       ELSE
-         run_param = .FALSE.
-       ENDIF
-     ENDIF
-   ENDIF
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+         IF ( radtacttime .eq. 0. ) THEN
+            radtacttime = CURR_SECS + radt*60.
+         END IF
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.
+!                ITIMESTEP=1
+!    Test 2:  If the user asked for the radiation to be run every time step, then yes.
+!                RADT=0 or STEPRA=1
+!    Test 3:  If not adaptive dt, and this is on the requested radiation frequency, then yes.
+!                MOD(ITIMESTEP,STEPRA)=0 (or 1, depending on the offset setting)
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate radiation time, then yes.
+!                CURR_SECS >= RADTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+!  If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
+!  radiation run.
+
+   run_param = .FALSE.
+   decided = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( itimestep .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( ( radt .EQ. 0. ) .OR. ( stepra .EQ. 1 ) ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(itimestep,stepra) .EQ. 1+ra_call_offset ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. radtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+      radtacttime = curr_secs + radt*60
+   END IF
 
    Radiation_step: IF ( run_param ) then
 
diff --git a/wrfv2_fire/phys/module_sf_gfdl.F b/wrfv2_fire/phys/module_sf_gfdl.F
index 3ad093fc..3033569a 100755
--- a/wrfv2_fire/phys/module_sf_gfdl.F
+++ b/wrfv2_fire/phys/module_sf_gfdl.F
@@ -833,10 +833,15 @@ CONTAINS
           windmks=wind(i)*.01
           znott=0.2375*exp(-0.5250*windmks) + 0.0025*exp(-0.0211*windmks)
           znott=0.01*znott
-!  go back to moon et al for below 7m/s
+!  go back to mon/obv  et al for below 7m/s
           if(windmks.le. 7.)                         &
-          znott = (0.0185/9.8*(7.59e-8*wind(i)**2+   &
-                                  2.46e-4*wind(i))**2)
+          znott = 0.01*zot (i)
+!   end of kwon correction....
+!  put in patch to increase znott from thermal to mom vaules 20-40m/s
+   if(windmks.ge.20.) then
+!   znot4020=(.163e-2)-(.104e-4)
+   znott   =1.636e-14 * windmks**6.8905
+   endif
 ! back to cgs
           zot (i) = 100.*znott
 #else
@@ -853,7 +858,6 @@ CONTAINS
 ! back to cgs
    zot (i) = 100.*znott
 #endif
-!   end of kwon correction....
 !     in hwrf, thermal znot(zot) is passed as argument zoc
 !     in hwrf, momentum znot is recalculated internally
               zoc(i)=-(0.0185/9.8*(7.59e-8*wind(i)**2+   &
@@ -861,7 +865,6 @@ CONTAINS
             if(wind(i).ge.1250.0)   &
              zoc(i)=-(.000739793 * wind(i) -0.58)/10
         if(wind(i).ge.3000.)   then
-        windmks=wind(i)*.01
 !       kwon znotm
         znotm   = yz   +windmks*y1   +windmks**2*y2   +windmks**3*y3   +windmks**4*y4 !powell 2003
 !       back to cgs
@@ -869,6 +872,12 @@ CONTAINS
         endif
         endif
 
+#ifdef HWRF
+!
+!       in this version set thermal znot = momentum znot of powell 2003 above 40m/s
+         if(windmks.ge.40.) zot (i) = zoc(i)
+#endif
+
 !------------------------------------------------------------------------
 !     where necessary modify zo values over ocean.
 !------------------------------------------------------------------------
@@ -1540,7 +1549,7 @@ CONTAINS
         write(6,345) indx(i), j, tstar(indx(i)), tsp(i), ip
 345   format(2X, ' I, J, OLD T*, NEW T*, NPTS ', 2I5, 2E14.8, I5)
 
-        write(6,350) reflect, sigt4, shfx, alevp, delten, diffot
+!       write(6,350) reflect, sigt4, shfx, alevp, delten, diffot
 350   format(2X, ' REFLECT, SIGT4, SHFX, ALEVP, DELTEN, DIFFOT ', &
             6E14.8)
 
diff --git a/wrfv2_fire/phys/module_sf_idealscmsfclay.F b/wrfv2_fire/phys/module_sf_idealscmsfclay.F
index f6c73861..fd5129c3 100644
--- a/wrfv2_fire/phys/module_sf_idealscmsfclay.F
+++ b/wrfv2_fire/phys/module_sf_idealscmsfclay.F
@@ -219,15 +219,14 @@ CONTAINS
 !
    integer :: i
    real :: e1
-   real, dimension( its:ite)    ::  wstr, ang, wm
+   real, dimension( its:ite)    ::  wstr, wm
    real, dimension( its:ite)    ::  z0t
    real, dimension( its:ite) :: dthdz, dqtdz, dudz, dvdz
    real, dimension( its:ite) :: lepsmin
    real, dimension( its:ite) :: thetav
-   real, dimension( its:ite) :: zt,zm
-   real, dimension( its:ite) :: N2, S, Ri, beta, ftau, fth, ratio
+   real, dimension( its:ite) :: N2, S, Ri, beta, fth, ratio
    real, dimension( its:ite) :: TKE, TE2
-   real, dimension( its:ite) :: ustrtilde, linv, leps
+   real, dimension( its:ite) :: ustrtilde, linv
    real, dimension( its:ite) :: km, kh
    real, dimension( its:ite) :: qsfc_air
 !!-------------------------------------------------------------------
@@ -240,10 +239,6 @@ CONTAINS
       ! WA 1/6/10 This routine just populates HFX, QFX, and TSK
       ! with the suitable converted forcing values.
 
-      ! Surface fluxes
-      ust(i) = sqrt(ftau(i)/ftau0) * sqrt(u1d(i)**2. + v1d(i)**2.) * leps(i) / log(zm(i)/znt(i)) / zt(i)
-      ang(i) = atan2(v1d(i),u1d(i))
-
       ! Populate surface heat and moisture fluxes
       hfx(i) = hfx_force
       lh(i)  = lh_force
diff --git a/wrfv2_fire/phys/module_sf_oml.F b/wrfv2_fire/phys/module_sf_oml.F
index d47f6a4c..9e02363b 100644
--- a/wrfv2_fire/phys/module_sf_oml.F
+++ b/wrfv2_fire/phys/module_sf_oml.F
@@ -212,10 +212,13 @@ CONTAINS
 ! limit to positive h change
         if(h.lt.hold)h=hold
 
-!       if(h.ne.0.)then
-! no change unless tml is warmer than layer mean temp tmol or tsk-5 (see omlinit)
-        if(tml.ge.tmoml .and. h.ne.0.)then
-          tml=max(t0ml - Gam*(h-h0) + 0.5*Gam*h + A2/h, tmoml)
+        if(h.ne.0.)then
+! no change unless tml is warmer than layer mean temp tmoml or tsk-5 (see omlinit)
+          if(tml.ge.tmoml)then
+            tml=max(t0ml - Gam*(h-h0) + 0.5*Gam*h + A2/h, tmoml)
+          else 
+            tml=tmoml
+          endif
           u=hu2/h
           v=hv2/h
         else
diff --git a/wrfv2_fire/phys/module_sf_ruclsm.F b/wrfv2_fire/phys/module_sf_ruclsm.F
index 7c43aff4..e7e44dec 100644
--- a/wrfv2_fire/phys/module_sf_ruclsm.F
+++ b/wrfv2_fire/phys/module_sf_ruclsm.F
@@ -2956,6 +2956,7 @@ print *, 'TSO before calling SNOWTEMP: ', tso
         fsn=1.
         fso=0.
         hsn=snhei
+        cvw=cw
 
           NZS1=NZS-1
           NZS2=NZS-2
diff --git a/wrfv2_fire/phys/module_surface_driver.F b/wrfv2_fire/phys/module_surface_driver.F
index d1b6d000..5fdd6481 100644
--- a/wrfv2_fire/phys/module_surface_driver.F
+++ b/wrfv2_fire/phys/module_surface_driver.F
@@ -87,7 +87,7 @@ CONTAINS
      &          ,usemonalb                                            &
      &          ,noahres                                              &
              !  Optional adaptive time step
-     &          ,bldt,curr_secs,adapt_step_flag                       &
+     &          ,bldt,curr_secs,adapt_step_flag,bldtacttime           & 
          ! Optional urban with BEP
      &          ,sf_urban_physics,gmt,xlat,xlong,julday               &
      &          ,num_urban_layers                                     & !multi-layer urban
@@ -469,6 +469,7 @@ CONTAINS
    REAL,       INTENT(IN   ),OPTIONAL    ::     bldt
    REAL,       INTENT(IN   ),OPTIONAL    ::     curr_secs
    LOGICAL,    INTENT(IN   ),OPTIONAL    ::     adapt_step_flag
+   REAL,       INTENT(INOUT),OPTIONAL    ::     bldtacttime  
 
 !  arguments for NCAR surface physics
 
@@ -739,7 +740,7 @@ CONTAINS
 !------------------------------------------------------------------
    CHARACTER*256 :: message
    REAL    :: next_bl_time
-   LOGICAL :: run_param
+   LOGICAL :: run_param , doing_adapt_dt , decided
    LOGICAL :: do_adapt
 !
 !
@@ -748,7 +749,6 @@ CONTAINS
 
 
   if (sf_sfclay_physics .eq. 0) return
-! if (sf_sfclay_physics .eq. 0 .or. sf_surface_physics.eq.0) return
 
   if ( fractional_seaice == 0 ) then
      xice_threshold = 0.5
@@ -837,8 +837,10 @@ CONTAINS
           ENDDO
         ENDIF
         IF(XLAND(i,j) .GT. 1.5) THEN
-          TSK(i,j)   =SST(i,j)
-          TSLB(i,1,j)=SST(i,j)
+          IF ( SST(i,j) .LT. 350. .and. SST(i,j) .GT. 250.) THEN
+            TSK(i,j)   =SST(i,j)
+            TSLB(i,1,j)=SST(i,j)
+          ENDIF
         ENDIF
         IF ( XLAND(i,j) .LT. 1.5 .AND. XICEM(I,J) .GE. XICE_THRESHOLD .AND. XICE(I,J) .LT. XICE_THRESHOLD ) THEN
 ! sea-ice point turns to water point
@@ -906,27 +908,66 @@ CONTAINS
 !
 ! Modified for adaptive time step
 !
-
-  IF ( (itimestep .EQ. 1) .OR. (MOD(itimestep,STEPBL) .EQ. 0) ) THEN
-    run_param = .TRUE.
-  ELSE
-    run_param = .FALSE.
-  ENDIF
-  IF (PRESENT(adapt_step_flag)) THEN
-    IF ((adapt_step_flag)) THEN
-      IF ( (itimestep .EQ. 1) .OR. (bldt .EQ. 0) .OR. &
-           ( CURR_SECS + dt >= ( INT( CURR_SECS / ( bldt * 60 ) + 1 ) * bldt * 60) ) ) THEN
-        run_param = .TRUE.
-      ELSE
-        run_param = .FALSE.
-      ENDIF
-    ENDIF
-  ENDIF
+   doing_adapt_dt = .FALSE.
+   IF ( PRESENT(adapt_step_flag) ) THEN
+      IF ( adapt_step_flag ) THEN
+         doing_adapt_dt = .TRUE.
+      END IF
+   END IF
+
+!  Do we run through this scheme or not?
+
+!    Test 1:  If this is the initial model time, then yes.
+!                ITIMESTEP=1
+!    Test 2:  If the user asked for the surface to be run every time step, then yes.
+!                BLDT=0 or STEPBL=1
+!    Test 3:  If not adaptive dt, and this is on the requested surface frequency, then yes.
+!                MOD(ITIMESTEP,STEPBL)=0
+!    Test 4:  If using adaptive dt and the current time is past the last requested activate surface time, then yes.
+!                CURR_SECS >= BLDTACTTIME
+
+!  If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
+!  to TRUE.  The decided flag says that one of these tests was able to say "yes", run the scheme.
+!  We only proceed to other tests if the previous tests all have left decided as FALSE.
+
+   run_param = .FALSE.
+   decided = .FALSE.
+   IF ( ( .NOT. decided ) .AND. &
+        ( itimestep .EQ. 1 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( PRESENT(bldt) )THEN
+      IF ( ( .NOT. decided ) .AND. &
+           ( ( bldt .EQ. 0. ) .OR. ( stepbl .EQ. 1 ) ) ) THEN
+         run_param   = .TRUE.
+         decided     = .TRUE.
+      END IF
+   ELSE
+      IF ( ( .NOT. decided ) .AND. &
+                                   ( stepbl .EQ. 1 )   ) THEN
+         run_param   = .TRUE.
+         decided     = .TRUE.
+      END IF
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( .NOT. doing_adapt_dt ) .AND. &
+        ( MOD(itimestep,stepbl) .EQ. 0 ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
+
+   IF ( ( .NOT. decided ) .AND. &
+        ( doing_adapt_dt ) .AND. &
+        ( curr_secs .GE. bldtacttime ) ) THEN
+      run_param   = .TRUE.
+      decided     = .TRUE.
+   END IF
 
   IF ( run_param ) then
 
-! IF (itimestep .eq. 1 .or. mod(itimestep,STEPBL) .eq. 0) THEN
-
   radiation = .false.
   frpcpn = .false.
   myj    = ((sf_sfclay_physics .EQ. MYJSFCSCHEME) .OR. &
@@ -981,12 +1022,14 @@ CONTAINS
           DTBL = dt
        ELSE
           if (do_adapt) then
-             call wrf_message("WARNING: When using an adaptive time-step the boundary layer"// &
-                              " time-step should be 0 (i.e., equivalent to model time-step).  "// &
-                              "In order to proceed, for boundary layer calculations, the "// &
-                              "boundary layer time-step"// &
-                              " will be rounded to the nearest minute, possibly resulting in"// &
-                              " innacurate results.")
+             IF ( curr_secs .LT. 2. * dt ) THEN
+                call wrf_message("WARNING: When using an adaptive time-step the boundary layer"// &
+                                 " time-step should be 0 (i.e., equivalent to model time-step)." )
+                call wrf_message("In order to proceed, for surface calculations, the "// &
+                                 "boundary layer time-step"// &
+                                 " will be rounded to the nearest minute," )
+                call wrf_message("possibly resulting in innacurate results.")
+             END IF
              DTBL=bldt*60
           else
              DTBL=DT*STEPBL
@@ -1768,7 +1811,7 @@ CONTAINS
               endif
            ENDIF
 
-          CALL SFCDIAGS_RUCLSM(HFX,QFX,TSK,QSFC,CHS2,CQS2,T2,TH2,Q2,      &
+          CALL SFCDIAGS_RUCLSM(HFX,QFX,TSK,QSFC,CQS2,CQS2,T2,TH2,Q2,      &
                      T_PHY,QV_CURR,RHO,P8W,                              &
                      PSFC,CP,R_d,RCP,                                    &
                      ids,ide, jds,jde, kds,kde,                          &
diff --git a/wrfv2_fire/phys/module_wind_fitch.F b/wrfv2_fire/phys/module_wind_fitch.F
index 808aec86..ef0237b2 100644
--- a/wrfv2_fire/phys/module_wind_fitch.F
+++ b/wrfv2_fire/phys/module_wind_fitch.F
@@ -95,8 +95,8 @@ CONTAINS
           IF ( id .EQ. p%id ) THEN
             DO j=jts,jtf
               DO i=its,itf
-                IF (xlat_v(i,j) .LE. p%lat .AND. p%lat .LT. xlat_v(i+1,j) .AND. &
-                    xlong_u(i,j).LE. p%lon .AND. p%lon .LT. xlong_u(i,j+1)) THEN
+                IF (xlat_v(i,j) .LE. p%lat .AND. p%lat .LT. xlat_v(i,j+1) .AND. &
+                    xlong_u(i,j).LE. p%lon .AND. p%lon .LT. xlong_u(i+1,j)) THEN
                   p%i=i
                   p%j=j
                 ENDIF
diff --git a/wrfv2_fire/run/README.namelist b/wrfv2_fire/run/README.namelist
index 164ae4b3..6a092b25 100644
--- a/wrfv2_fire/run/README.namelist
+++ b/wrfv2_fire/run/README.namelist
@@ -99,6 +99,20 @@ For SST updating (used only with sst_update=1):
  auxinput4_interval                  = 360      ; minutes generally matches time given by interval_seconds
  io_form_auxinput4                   = 2        ; IO format, required in V3.2
 
+For additional regional climate surface fields
+
+ output_diagnostics                  = 1        ; adds 36 surface diagnostic arrays (max/min/mean/std)
+ auxhist3_outname                    = 'wrfxtrm_d_' ; file name for added diagnostics
+ io_form_auxhist3                    = 2        ; netcdf
+ auxhist3_interval                   = 1440     ; minutes between outputs (1440 gives daily max/min)
+ frames_per_auxhist3                 = 1        ; output times per file
+
+For observation nudging:
+ auxinput11_interval                 = 10       ; interval in minutes for observation data. It should be 
+                                                  set as or more frequently as obs_ionf (with unit of 
+                                                  coarse domain time step).
+ auxinput11_end_h                    = 6        ; end of observation time in hours.
+
 Options for run-time IO:
 
  iofields_filename (max_dom)         = "my_iofields_list.txt",
@@ -348,7 +362,6 @@ Namelist variables for controlling the adaptive time step option:
                                      = 13, SBU_YLIN scheme
                                      = 14, WDM 5-class scheme
                                      = 16, WDM 6-class scheme
-                                     = 98, Thompson scheme (version from V3.0)
 
  For non-zero mp_physics options, to keep Qv .GE. 0, and to set the other moisture
  fields .LT. a critcal value to zero
@@ -462,7 +475,7 @@ Namelist variables for controlling the adaptive time step option:
                                      = 7, ACM2 (Pleim) PBL (ARW)
                                      = 8, Bougeault and Lacarrere (BouLac) PBL
                                      = 9, UW boundary layer scheme from CAM5 (CESM 1_0_1)
-                                     = 10, TEMF scheme (ARW only)
+                                     = 10, TEMF (Total Energy Mass Flux) scheme (ARW only)
                                      = 99, MRF scheme
 
  bldt (max_dom)                      = 0,       ; minutes between boundary-layer physics calls
@@ -813,6 +826,7 @@ The following are for observation nudging:
  base_pres                           = 10^5     ; real-data, em ONLY, base sea-level pres (Pa), DO NOT CHANGE
  base_lapse                          = 50.,     ; real-data, em ONLY, lapse rate (K), DO NOT CHANGE
  iso_temp                            = 0.,      ; real-data, em ONLY, reference temp in stratosphere
+ use_baseparam_fr_nml                = .f.,     ; whether to use base state parameters from the namelist
  khdif (max_dom)                     = 0,	; horizontal diffusion constant (m^2/s)
  kvdif (max_dom)                     = 0,	; vertical diffusion constant (m^2/s)
  smdiv (max_dom)                     = 0.1,	; divergence damping (0.1 is typical)
diff --git a/wrfv2_fire/share/dfi.F b/wrfv2_fire/share/dfi.F
index 5dbd648d..b03e67b6 100644
--- a/wrfv2_fire/share/dfi.F
+++ b/wrfv2_fire/share/dfi.F
@@ -131,6 +131,11 @@
 
       CALL Setup_Timekeeping (grid)
 
+      !tgs 7apr11 - need to call start_domain here to reset bc initialization for negative dt
+      CALL start_domain ( grid , .TRUE. )
+      !tgs 7apr11 - save arrays should be done after start_domain to get correct grid%p field
+      CALL dfi_save_arrays ( grid )
+
       ! set physics options to zero
       CALL nl_set_mp_physics( grid%id, 0 )
       CALL nl_set_ra_lw_physics( grid%id, 0 )
@@ -207,7 +212,8 @@
 
       CALL WRFU_ClockSet(grid%domain_clock, currTime=grid%start_subtime, rc=rc)
 
-      CALL dfi_save_arrays ( grid )
+!tgs 7apr11 - this call has been moved up
+!     CALL dfi_save_arrays ( grid )
       CALL dfi_clear_accumulation( grid )
       CALL optfil_driver(grid)
 
@@ -220,7 +226,7 @@
    SUBROUTINE dfi_fwd_init ( grid )
 
       USE module_domain, ONLY : domain, head_grid, domain_get_stop_time, domain_get_start_time
-      USE module_utility
+      USE module_utility, ONLY : WRFU_ClockSet
       USE module_state_description
 
       IMPLICIT NONE
diff --git a/wrfv2_fire/share/input_wrf.F b/wrfv2_fire/share/input_wrf.F
index e579ccaa..7db2744e 100644
--- a/wrfv2_fire/share/input_wrf.F
+++ b/wrfv2_fire/share/input_wrf.F
@@ -122,7 +122,7 @@
 
     dryrun        = ( filestate .EQ. WRF_FILE_OPENED_NOT_COMMITTED )
 
-    WRITE(wrf_err_message,*)'input_wrf: dryrun = ',dryrun
+    WRITE(wrf_err_message,*)'input_wrf: dryrun = ',dryrun,' switch ',switch
     CALL wrf_debug( 300 , wrf_err_message )
 
     check_if_dryrun : IF ( .NOT. dryrun ) THEN
diff --git a/wrfv2_fire/share/mediation_integrate.F b/wrfv2_fire/share/mediation_integrate.F
index 202c180f..2e77f32e 100644
--- a/wrfv2_fire/share/mediation_integrate.F
+++ b/wrfv2_fire/share/mediation_integrate.F
@@ -181,7 +181,11 @@ SUBROUTINE med_pre_nest_initial ( parent , newid , config_flags )
 #else
    USE module_domain	, ONLY : domain
 #endif
+#ifdef ESMFIO
+   USE module_utility   , ONLY : WRFU_Time 
+#else
    USE module_utility   , ONLY : WRFU_Time, WRFU_TimeEQ
+#endif
    USE module_timing
    USE module_io_domain
    USE module_configure	, ONLY : grid_config_rec_type
@@ -206,7 +210,11 @@ SUBROUTINE med_pre_nest_initial ( parent , newid , config_flags )
    CALL domain_clock_get( parent, current_timestr=timestr, start_time=strt_time, current_time=cur_time )
    CALL construct_filename2a ( rstname , config_flags%rst_inname , newid , 2 , timestr )
 
+#ifdef ESMFIO
+    IF ( config_flags%restart .AND. (cur_time .EQ. strt_time) ) THEN
+#else
     IF ( config_flags%restart .AND. WRFU_TimeEQ(cur_time,strt_time) ) THEN
+#endif
      WRITE(message,*)'RESTART: nest, opening ',TRIM(rstname),' for reading header information only'
      CALL wrf_message ( message )
   ! note that the parent pointer is not strictly correct, but nest is not allocated yet and
@@ -1294,7 +1302,7 @@ RECURSIVE SUBROUTINE med_restart_out ( grid , config_flags )
    USE module_timing
    USE module_configure	, ONLY : grid_config_rec_type
   ! Model layer
-   USE module_bc_time_utilities
+!   USE module_bc_time_utilities
    USE module_utility
 
    IMPLICIT NONE
@@ -1420,7 +1428,7 @@ SUBROUTINE med_hist_out ( grid , stream, config_flags )
    USE module_timing
    USE module_io_domain
    USE module_configure	, ONLY : grid_config_rec_type
-   USE module_bc_time_utilities
+!   USE module_bc_time_utilities
    USE module_utility
 
    IMPLICIT NONE
@@ -1497,7 +1505,7 @@ SUBROUTINE med_auxinput_in ( grid , stream, config_flags )
    USE module_io_domain
   ! Model layer
    USE module_configure	, ONLY : grid_config_rec_type
-   USE module_bc_time_utilities
+!   USE module_bc_time_utilities
    USE module_utility
 
    IMPLICIT NONE
@@ -1598,7 +1606,7 @@ SUBROUTINE med_latbound_in ( grid , config_flags )
    USE module_timing
    USE module_configure	, ONLY : grid_config_rec_type
   ! Model layer
-   USE module_bc_time_utilities
+!   USE module_bc_time_utilities
    USE module_utility
 
    IMPLICIT NONE
@@ -1637,12 +1645,19 @@ integer myproc,i,j,k
                                   stop_time=stopTime,       &
                                   time_step=stepTime )
 
-     IF ( ( lbc_read_time( currentTime ) ) .AND. &
-          ( currentTime + stepTime .GE. stopTime ) .AND. &
-          ( currentTime .NE. startTime ) ) THEN
-       CALL wrf_debug( 100 , 'med_latbound_in: Skipping attempt to read lateral boundary file during last time step ' )
-
-     ELSE IF ( WRFU_AlarmIsRinging( grid%alarms( BOUNDARY_ALARM ), rc=rc ) ) THEN
+!jm 20110828
+!jm The test below never worked because set_time_time_read_again is never called to store a 
+!jm time that lbc_read_time can compare with currentTime (see module_bc_time_utilities). This means 
+!jm lbc_read_time will never return anything but false -- will also generate an ESMF error that the 
+!jm stored time was never initialized.  Removing that branch from the conditional.
+!jm     IF ( ( lbc_read_time( currentTime ) ) .AND. &
+!jm          ( currentTime + stepTime .GE. stopTime ) .AND. &
+!jm          ( currentTime .NE. startTime ) ) THEN
+!jm       CALL wrf_debug( 100 , 'med_latbound_in: Skipping attempt to read lateral boundary file during last time step ' )
+!jm
+!jm     ELSE IF ( WRFU_AlarmIsRinging( grid%alarms( BOUNDARY_ALARM ), rc=rc ) ) THEN
+!jm 20110828
+     IF ( WRFU_AlarmIsRinging( grid%alarms( BOUNDARY_ALARM ), rc=rc ) ) THEN
        CALL wrf_debug ( 100 , 'in med_latbound_in preparing to read' )
        CALL WRFU_AlarmRingerOff( grid%alarms( BOUNDARY_ALARM ), rc=rc )
        IF ( wrf_dm_on_monitor() ) CALL start_timing
@@ -1774,7 +1789,7 @@ SUBROUTINE open_aux_u ( grid , config_flags, stream, alarm_id, &
    USE module_io_domain
   ! Model layer
    USE module_configure	, ONLY : grid_config_rec_type
-   USE module_bc_time_utilities
+!   USE module_bc_time_utilities
    USE module_utility
 
    IMPLICIT NONE
@@ -1810,16 +1825,16 @@ SUBROUTINE open_aux_u ( grid , config_flags, stream, alarm_id, &
      ENDIF
      CALL construct_filename2a ( fname , auxinput_inname, &
                                  grid%id , 2 , timestr )
-     IF      ( stream .EQ. 10 ) THEN
+     IF      ( stream-first_input .EQ. 10 ) THEN
        WRITE(n2,'("DATASET=AUXINPUT10")')
-     ELSE IF ( stream .EQ. 11 ) THEN
+     ELSE IF ( stream-first_input .EQ. 11 ) THEN
        WRITE(n2,'("DATASET=AUXINPUT11")')
-     ELSE IF ( stream .GE. 10 ) THEN
+     ELSE IF ( stream-first_input .GE. 10 ) THEN
        WRITE(n2,'("DATASET=AUXINPUT",I2)')stream-first_input
      ELSE
        WRITE(n2,'("DATASET=AUXINPUT",I1)')stream-first_input
      ENDIF
-     WRITE ( message , '("open_aux_u : opening ",A," for reading. ")') TRIM ( fname )
+     WRITE ( message , '("open_aux_u : opening ",A," for reading. DATASET ",A)') TRIM ( fname ),TRIM(n2)
      CALL wrf_debug( 1, message )
 !
 !
@@ -1847,7 +1862,7 @@ SUBROUTINE open_hist_w ( grid , config_flags, stream, alarm_id, &
    USE module_io_domain
   ! Model layer
    USE module_configure	, ONLY : grid_config_rec_type
-   USE module_bc_time_utilities
+!   USE module_bc_time_utilities
    USE module_utility
 
    IMPLICIT NONE
@@ -1885,17 +1900,13 @@ SUBROUTINE open_hist_w ( grid , config_flags, stream, alarm_id, &
    ENDIF
    CALL construct_filename2a ( fname , hist_outname, &
                                grid%id , 2 , timestr )
-   IF ( stream .EQ. history_only ) THEN
+   IF ( stream-first_history .EQ. history_only ) THEN
      WRITE(n2,'("DATASET=HISTORY")')
-   ELSE IF ( stream .GE. 10 ) THEN
+   ELSE IF ( stream-first_history .GE. 10 ) THEN
      WRITE(n2,'("DATASET=AUXHIST",I2)')stream-first_history
    ELSE
      WRITE(n2,'("DATASET=AUXHIST",I1)')stream-first_history
    ENDIF
-#if (DA_CORE == 1)
-   len_n2 = LEN_TRIM(n2)
-   WRITE(n2(len_n2+1:len_n2+19),'(",REAL_OUTPUT_SIZE=4")')
-#endif
    IF ( oid .eq. 0 ) THEN
      WRITE ( message , '("open_hist_w : opening ",A," for writing. ")') TRIM ( fname )
      CALL wrf_debug( 1, message )
diff --git a/wrfv2_fire/share/module_bc_time_utilities.F b/wrfv2_fire/share/module_bc_time_utilities.F
index da264bc3..adb16490 100644
--- a/wrfv2_fire/share/module_bc_time_utilities.F
+++ b/wrfv2_fire/share/module_bc_time_utilities.F
@@ -6,6 +6,8 @@ MODULE module_bc_time_utilities
 
   Type(WRFU_Time), PRIVATE, SAVE :: time_to_read_again
 
+character*256 mess
+
 CONTAINS
 
   LOGICAL FUNCTION lbc_read_time ( xtime )
diff --git a/wrfv2_fire/share/module_check_a_mundo.F b/wrfv2_fire/share/module_check_a_mundo.F
index 39d7df0f..9d8cccd9 100644
--- a/wrfv2_fire/share/module_check_a_mundo.F
+++ b/wrfv2_fire/share/module_check_a_mundo.F
@@ -83,6 +83,21 @@
          END IF
       ENDDO
 
+#if (EM_CORE == 1)
+!-----------------------------------------------------------------------
+! Check that if stochastic perturbations are turned on in any domain, 
+! if so, set grid%stoch_force_global_opt=1 
+!-----------------------------------------------------------------------
+
+   model_config_rec % stoch_force_global_opt=0  !also set in registry.stoch
+ ! check if stochastic perturbations are turned on in any domain
+   DO i = 1, model_config_rec % max_dom
+         IF ( model_config_rec % stoch_force_opt(i) .EQ. 1)  then 
+           model_config_rec % stoch_force_global_opt=1 
+         endif
+   ENDDO 
+#endif
+
 !-----------------------------------------------------------------------
 ! If sst_update = 0, set io_form_auxinput4 to 0 so WRF will not try to
 ! input the data; auxinput_interval must also be 0
diff --git a/wrfv2_fire/share/output_wrf.F b/wrfv2_fire/share/output_wrf.F
index 83ac027d..2404fe25 100644
--- a/wrfv2_fire/share/output_wrf.F
+++ b/wrfv2_fire/share/output_wrf.F
@@ -685,12 +685,14 @@ endif
       CALL wrf_put_dom_ti_integer ( fid , 'COMPRESSION' , config_flags%compression , 1 , ierr )
     ENDIF
 
-#if (EM_CORE == 1)
+#if ( (EM_CORE == 1) && (DA_CORE != 1) )
       save_topo_orig = grid%save_topo_from_real
 
 ! todo jm
     IF ( (first_history .LE. switch .AND. switch .LE. last_history ) .OR. &
-         ( (switch .EQ. input_only) .AND. (program_name(1:7) .NE. 'REAL_EM') ) .OR. &
+         ( (switch .EQ. input_only) .AND. &
+           (program_name(1:7) .NE. 'REAL_EM') .AND. &
+           (grid%dfi_opt .EQ. DFI_NODFI ) ) .OR. &
          ( switch .EQ. restart_only    ) ) THEN
 
          ! This flag sets the switch which defines the topography as the original
@@ -1234,7 +1236,7 @@ endif
       ENDIF
     ENDIF
 
-#if (EM_CORE == 1)
+#if ( (EM_CORE == 1) && (DA_CORE != 1) )
       grid%save_topo_from_real = save_topo_orig
 #endif
 
diff --git a/wrfv2_fire/test/em_esmf_exp/namelist.input.jan00.ESMFSST b/wrfv2_fire/test/em_esmf_exp/namelist.input.jan00.ESMFSST
index b4e6969d..e0929c64 100644
--- a/wrfv2_fire/test/em_esmf_exp/namelist.input.jan00.ESMFSST
+++ b/wrfv2_fire/test/em_esmf_exp/namelist.input.jan00.ESMFSST
@@ -1,6 +1,6 @@
  &time_control
  run_days                            = 0,
- run_hours                           = 12,
+ run_hours                           = 2,
  run_minutes                         = 0,
  run_seconds                         = 0,
  start_year                          = 2000, 2000, 2000,
@@ -17,7 +17,7 @@
  end_second                          = 00,   00,   00,
  interval_seconds                    = 21600,
  input_from_file                     = .true.,.false.,.false.,
- history_interval                    = 180,  60,   60,
+ history_interval                    = 60,  60,   60,
  frames_per_outfile                  = 1000, 1000, 1000,
  restart                             = .false.,
  restart_interval                    = 5000,
diff --git a/wrfv2_fire/test/em_real/examples.namelist b/wrfv2_fire/test/em_real/examples.namelist
index 28426dcf..09161791 100755
--- a/wrfv2_fire/test/em_real/examples.namelist
+++ b/wrfv2_fire/test/em_real/examples.namelist
@@ -292,4 +292,15 @@ For a tropical channel configuration, set the following:
  &namelist_quilt
  nio_tasks_per_group = 2,
  nio_groups = 1,
+
+** for regional climate surface diagnostics such as max/min/mean/std of T2/Q2/wind/rainfall
+between selected output times (e.g. daily) in auxhist3
+
+ &time_control
+ output_diagnostics      = 1
+ auxhist3_outname        = 'wrfxtrm_d_'
+ io_form_auxhist3        = 2
+ auxhist3_interval       = 1440
+ frames_per_auxhist3     = 1
+
  /
diff --git a/wrfv2_fire/test/em_real/namelist.input b/wrfv2_fire/test/em_real/namelist.input
index e9de77d6..23bd4d75 100755
--- a/wrfv2_fire/test/em_real/namelist.input
+++ b/wrfv2_fire/test/em_real/namelist.input
@@ -1,12 +1,12 @@
  &time_control
  run_days                            = 0,
- run_hours                           = 0
- run_minutes                         = 12
+ run_hours                           = 12,
+ run_minutes                         = 0,
  run_seconds                         = 0,
  start_year                          = 2000, 2000, 2000,
  start_month                         = 01,   01,   01,
  start_day                           = 24,   24,   24,
- start_hour                          = 15,   15,   12,
+ start_hour                          = 12,   12,   12,
  start_minute                        = 00,   00,   00,
  start_second                        = 00,   00,   00,
  end_year                            = 2000, 2000, 2000,
@@ -15,30 +15,26 @@
  end_hour                            = 12,   12,   12,
  end_minute                          = 00,   00,   00,
  end_second                          = 00,   00,   00,
- interval_seconds                    = 10800
+ interval_seconds                    = 21600
  input_from_file                     = .true.,.true.,.true.,
- history_interval                    = 12,   12,   60,
- frames_per_outfile                  = 1,    1,    1000,
- restart                             = .true.,
- restart_interval                    = 180
+ history_interval                    = 180,  60,   60,
+ frames_per_outfile                  = 1000, 1000, 1000,
+ restart                             = .false.,
+ restart_interval                    = 5000,
  io_form_history                     = 2
  io_form_restart                     = 2
  io_form_input                       = 2
  io_form_boundary                    = 2
  debug_level                         = 0
- auxinput4_inname                    = "wrflowinp_d"
- auxinput4_interval                  = 180, 
- io_form_auxinput4                   = 2
- write_hist_at_0h_rst                = .false.
  /
 
  &domains
- time_step                           = 240
+ time_step                           = 180,
  time_step_fract_num                 = 0,
  time_step_fract_den                 = 1,
- max_dom                             = 2
- e_we                                = 74,    31,    94,
- e_sn                                = 61,    31,    91,
+ max_dom                             = 1,
+ e_we                                = 74,    112,   94,
+ e_sn                                = 61,    97,    91,
  e_vert                              = 28,    28,    28,
  p_top_requested                     = 5000,
  num_metgrid_levels                  = 27,
@@ -56,7 +52,6 @@
  /
 
  &physics
- sst_update                          = 1
  mp_physics                          = 3,     3,     3,
  ra_lw_physics                       = 1,     1,     1,
  ra_sw_physics                       = 1,     1,     1,
@@ -76,26 +71,6 @@
  /
 
  &fdda
- grid_fdda                           = 1,     1,     1,
- gfdda_inname                        = "wrffdda_d",
- gfdda_end_h                         = 24,    24,    24,
- gfdda_interval_m                    = 180,   180,   180,
- fgdt                                = 0,     0,     0,
- if_no_pbl_nudging_uv                = 0,     0,     0,
- if_no_pbl_nudging_t                 = 1,     1,     1,
- if_no_pbl_nudging_q                 = 1,     1,     1,
- if_zfac_uv                          = 0,     0,     0,
-  k_zfac_uv                          = 10,   10,    10,
- if_zfac_t                           = 0,     0,     0,
-  k_zfac_t                           = 10,   10,    10,
- if_zfac_q                           = 0,     0,     0,
-  k_zfac_q                           = 10,   10,    10,
- guv                                 = 0.0003,     0.0003,     0.0003,
- gt                                  = 0.0003,     0.0003,     0.0003,
- gq                                  = 0.0003,     0.0003,     0.0003,
- if_ramping                          = 1,
- dtramp_min                          = 60.0,
- io_form_gfdda                       = 2,
  /
 
  &dynamics
diff --git a/wrfv2_fire/test/em_real/namelist.input.jan00 b/wrfv2_fire/test/em_real/namelist.input.jan00
index 34b86f7b..2aea68cc 100755
--- a/wrfv2_fire/test/em_real/namelist.input.jan00
+++ b/wrfv2_fire/test/em_real/namelist.input.jan00
@@ -110,3 +110,24 @@
  nio_tasks_per_group = 0,
  nio_groups = 1,
  /
+
+ &dfi_control
+ dfi_opt                             = 0
+ dfi_nfilter                         = 7
+ dfi_write_filtered_input            = .false.
+ dfi_write_dfi_history               = .false.
+ dfi_cutoff_seconds                  = 3600  
+ dfi_time_dim                        = 1000 
+ dfi_bckstop_year                    = 2000
+ dfi_bckstop_month                   = 01  
+ dfi_bckstop_day                     = 24  
+ dfi_bckstop_hour                    = 11  
+ dfi_bckstop_minute                  = 00  
+ dfi_bckstop_second                  = 00  
+ dfi_fwdstop_year                    = 2000
+ dfi_fwdstop_month                   = 01  
+ dfi_fwdstop_day                     = 24  
+ dfi_fwdstop_hour                    = 12  
+ dfi_fwdstop_minute                  = 30  
+ dfi_fwdstop_second                  = 00  
+ /
diff --git a/wrfv2_fire/tools/gen_streams.c b/wrfv2_fire/tools/gen_streams.c
index 4159b450..e6a308af 100644
--- a/wrfv2_fire/tools/gen_streams.c
+++ b/wrfv2_fire/tools/gen_streams.c
@@ -519,7 +519,7 @@ gen_med_open_esmf_calls ( FILE *fp )
   {
      fprintf(fp,"CALL nl_get_io_form_auxinput%d( 1, io_form )\n",i) ;
      fprintf(fp,"IF ( use_package( io_form ) == IO_ESMF ) THEN\n") ;
-     fprintf(fp,"  stream = %d\n",i) ;
+     fprintf(fp,"  stream = first_auxinput + %d\n",i-1) ;
      fprintf(fp,"  CALL open_aux_u( grid, config_flags, stream, AUXINPUT%d_ALARM,       &\n",i) ;
      fprintf(fp,"                   config_flags%%auxinput%d_inname, grid%%auxinput%d_oid, &\n",i,i) ;
      fprintf(fp,"                   input_auxinput%d, ierr )\n",i) ;
@@ -531,7 +531,7 @@ gen_med_open_esmf_calls ( FILE *fp )
   {
      fprintf(fp,"CALL nl_get_io_form_auxhist%d( 1, io_form )\n",i) ;
      fprintf(fp,"IF ( use_package( io_form ) == IO_ESMF ) THEN\n") ;
-     fprintf(fp,"  stream = %d\n",i) ;
+     fprintf(fp,"  stream = first_auxhist + %d\n",i-1) ;
      fprintf(fp,"  CALL open_hist_w( grid, config_flags, stream, AUXHIST%d_ALARM,       &\n",i) ;
      fprintf(fp,"                    config_flags%%auxhist%d_outname, grid%%auxhist%d_oid, &\n",i,i) ;
      fprintf(fp,"                    output_auxhist%d, fname, n2, ierr )\n",i) ;
diff --git a/wrfv2_fire/tools/regtest.csh b/wrfv2_fire/tools/regtest.csh
index e72ff659..4234d7c3 100644
--- a/wrfv2_fire/tools/regtest.csh
+++ b/wrfv2_fire/tools/regtest.csh
@@ -18,6 +18,7 @@
 #	stop the script.  Failed builds force an exit from the script.
 
 setenv WRF_NMM_NEST 1
+setenv HWRF 0
 set WHERE_AM_I = `pwd`
 
 if ( `uname` == AIX ) then
diff --git a/wrfv2_fire/tools/regtest_esmf.csh b/wrfv2_fire/tools/regtest_esmf.csh
new file mode 100755
index 00000000..a67c6583
--- /dev/null
+++ b/wrfv2_fire/tools/regtest_esmf.csh
@@ -0,0 +1,61 @@
+#!/bin/csh
+
+onintr clnup
+
+/bin/mv Registry/Registry.EM Registry/Registry.EM-save
+/bin/cp Registry/Registry.EM_SST Registry/Registry.EM
+
+#clean -a
+set hst=`hostname | cut -c1-2`
+
+if ( "$hst" == "be" ) then   # bluefire
+  if ( -f ~michalak/sourceme_esmf ) then  # bluefire
+    source ~michalak/sourceme_esmf
+    set EXEC_WRF='bsub -K < ../tools/test4_0_ESMFSST.lsf.csh'
+    (cd run ; tar xf ~michalak/jan00_esmftest.tar.gz )
+    echo 3 | ./configure
+    setenv J "-j 4"
+  endif
+endif
+if ( "$hst" == "ma" ) then   # manta
+  if ( -f ~johnm/sourceme_esmf ) then
+    source ~johnm/sourceme_esmf
+    (cd run ; tar xf ~johnm/jan00_esmftest.tar.gz )
+    echo 3 | ./configure
+    setenv J "-j 4"
+    set EXEC_WRF="qsub -sync y wrf.pbs"
+    cat > wrf.pbs << H2
+#!/bin/csh
+#PBS -l nodes=1:ppn=4
+#PBS -m ae
+#PBS -N WRF_ESMF_TEST
+cd ${cwd}/run
+setenv P4_GLOBMEMSIZE 20000000
+time mpirun -machinefile \$PBS_NODEFILE -np 4 ./wrf_SST_ESMF.exe
+H2
+  endif
+endif
+./compile wrf
+skip:
+if ( -x main/wrf_SST_ESMF.exe ) then
+  cd run
+  /bin/cp ../test/em_esmf_exp/namelist.input.jan00.ESMFSST namelist.input
+  /bin/rm -f rsl.*
+  echo $EXEC_WRF >! com
+  sh com
+  if ( -f rsl.error.0000 ) then
+    grep -q SUCCESS rsl.error.0000
+    if ( $status == 0 ) then
+      echo good show
+    else
+      echo failure
+    endif
+  else
+    echo failure
+  endif
+  cd ..
+endif
+
+clnup:
+/bin/mv Registry/Registry.EM-save Registry.EM
+
diff --git a/wrfv2_fire/tools/regtest_hwrf.csh b/wrfv2_fire/tools/regtest_hwrf.csh
index a519bcf8..a7880cd8 100644
--- a/wrfv2_fire/tools/regtest_hwrf.csh
+++ b/wrfv2_fire/tools/regtest_hwrf.csh
@@ -113,7 +113,7 @@ else if ( ( `hostname | cut -c 1-2` == bs ) || ( `hostname` == tempest ) || ( `h
           ( `hostname | cut -c 1-2` == bv ) || ( `hostname | cut -c 1-2` == be ) ) then
 	set WRFREGDATAEM = /mmm/users/gill/WRF-data-EM
 	set WRFREGDATAEM = /mmm/users/gill/WRF_regression_data/processed
-	set WRFREGDATANMM = /rap/dtc/WRF-data-NMM
+	set WRFREGDATANMM = /rap/RJNTB/dtc//WRF-data-NMM
 else if ( ( `uname` == AIX ) && ( ( `hostname | cut -c 1-2` != bs ) && \
                                   ( `hostname | cut -c 1-2` != bv ) && ( `hostname | cut -c 1-2` != be ) ) ) then
 	set WRFREGDATAEM = /nbns/meso/wx22tb/regression_tests/WRF-data-EM
@@ -124,7 +124,7 @@ else
 		set WRFREGDATANMM = /users/gill/WRF-data-NMM
 	else if ( ( -d /mmm/users/gill/WRF-data-EM ) && ( -d /mmm/users/gill/WRF-data-NMM ) ) then
 		set WRFREGDATAEM = /mmm/users/gill/WRF-data-EM
-		set WRFREGDATANMM = /rap/dtc/WRF-data-NMM
+		set WRFREGDATANMM = /rap/RJNTB/dtc/WRF-data-NMM
 	else
 		echo "stick the WRF em and nmm data somewhere, and then fill in the shell vars"
 		echo "inside this script, you NEED WRFREGDATAEM and WRFREGDATANMM set"
diff --git a/wrfv2_fire/tools/regtest_nmmnest.csh b/wrfv2_fire/tools/regtest_nmmnest.csh
index ffcfeb27..7a0178c1 100644
--- a/wrfv2_fire/tools/regtest_nmmnest.csh
+++ b/wrfv2_fire/tools/regtest_nmmnest.csh
@@ -34,6 +34,7 @@
 #		Intel  1.2 GHz (4-pe) :  3.0 hours (empty)
 #		IBM            P4     :  2.0 hours (empty)
 
+setenv HWRF 0
 #	Do we keep running even when there are BAD failures?
 
 set KEEP_ON_RUNNING = FALSE
@@ -113,7 +114,7 @@ else if ( ( `hostname | cut -c 1-2` == bs ) || ( `hostname` == tempest ) || ( `h
           ( `hostname | cut -c 1-2` == bv ) || ( `hostname | cut -c 1-2` == be ) ) then
 	set WRFREGDATAEM = /mmm/users/gill/WRF-data-EM
 	set WRFREGDATAEM = /mmm/users/gill/WRF_regression_data/processed
-	set WRFREGDATANMM = /rap/dtc/WRF-data-NMM
+	set WRFREGDATANMM = /glade/proj2/ral/RJNTB/dtc//WRF-data-NMM
 else if ( ( `uname` == AIX ) && ( ( `hostname | cut -c 1-2` != bs ) && \
                                   ( `hostname | cut -c 1-2` != bv ) && ( `hostname | cut -c 1-2` != be ) ) ) then
 	set WRFREGDATAEM = /nbns/meso/wx22tb/regression_tests/WRF-data-EM
@@ -124,7 +125,7 @@ else
 		set WRFREGDATANMM = /users/gill/WRF-data-NMM
 	else if ( ( -d /mmm/users/gill/WRF-data-EM ) && ( -d /mmm/users/gill/WRF-data-NMM ) ) then
 		set WRFREGDATAEM = /mmm/users/gill/WRF-data-EM
-		set WRFREGDATANMM = /rap/dtc/WRF-data-NMM
+		set WRFREGDATANMM = /glade/proj2/ral/RJNTB/dtc//WRF-data-NMM
 	else
 		echo "stick the WRF em and nmm data somewhere, and then fill in the shell vars"
 		echo "inside this script, you NEED WRFREGDATAEM and WRFREGDATANMM set"
diff --git a/wrfv2_fire/tools/test4_0_ESMFSST.lsf.csh b/wrfv2_fire/tools/test4_0_ESMFSST.lsf.csh
new file mode 100644
index 00000000..68c75b6a
--- /dev/null
+++ b/wrfv2_fire/tools/test4_0_ESMFSST.lsf.csh
@@ -0,0 +1,25 @@
+#!/bin/csh
+#
+#BSUB -P 64000400           # account
+#BSUB -n 4                  # number of tasks
+#BSUB -J test4_0_ESMFSST            # job name
+#BSUB -o test4_0_ESMFSST.%J.out     # stdout redirect
+#BSUB -e test4_0_ESMFSST.%J.err     # stderr redirect
+#BSUB -q debug              # queue
+##BSUB -N                    # send email report
+#BSUB -W 0:30               # wall-clock limit (HH:MM)
+#
+
+# This is a LSF script to run WRF for a simple MPI-only em_real case 
+# on bluevista.  jan00 case modified to read SSTs via ESMF is used.  
+# Only wrf.exe is run.  
+# To use it, type "bsub < test4_0_ESMFSST.lsf.csh" from the test/em_esmf_exp 
+# subdirectory.  
+
+unalias cd cp rm ls pushd popd mv
+
+setenv TARGET_CPU_LIST "-1"
+
+# Run WRF+CPL+SST
+mpirun.lsf /usr/local/bin/launch ../main/wrf_SST_ESMF.exe
+
-- 
2.11.4.GIT