Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/LMD_LES_MARS_install
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/LMD_LES_MARS_install	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/LMD_LES_MARS_install	(revision 142)
@@ -0,0 +1,83 @@
+####
+#### A. Spiga -- 2010 -- 
+####
+
+
+#
+## WRF modeling system software Version 3.0.1.1 (August 22, 2008)
+#
+
+wget http://www.mmm.ucar.edu/wrf/src/WRFV3.0.1.1.TAR.gz .
+tar xzvf WRFV3.0.1.1.TAR.gz
+\rm WRFV3.0.1.1.TAR.gz
+#mv WRFV3/* .
+#rmdir WRFV3
+
+  #### faking stuff for copy_model script
+  mv WRFV3 WRFV2
+  touch in_reality_this_is_WRFV3_but_is_named_WRFV2_for_continuity
+  cd WRFV2
+  ln -sf ../../WRFV2/mars_lmd .
+  ln -sf ../../WRFV2/mars_lmd_new .
+  ln -sf ../modif_mars .
+  ln -sf ../../WRFV2/*.h .
+  cp ../../WRFV2/call_meso_inifis?.inc .
+  cp ../../WRFV2/call_meso_physiq?.inc .
+  touch configure.defaults.dummy
+  touch mars.sed.dummy
+  mkdir external/RSL
+  mkdir external/RSL/RSL
+  touch external/RSL/RSL.dummy
+  touch external/RSL/RSL/RSL.dummy
+
+#
+## Replacing Mars files
+#
+
+#tar xzvf LMD_LES_MARS_patches.tar.gz 
+#mv LMD_LES_MARS_patches LMD_LES_MARS/modif_mars
+#cd LMD_LES_MARS
+#ln -sf ../LMD_LES_MARS_patches modif_mars
+
+#cd modif_mars
+#ln -sf ../../LMD_MM_MARS/SRC/WRFV2/phys/module_lmd_driver.F
+#cd ..
+
+cd dyn_em
+ln -sf ../modif_mars/module_big_step_utilities_em.F .
+ln -sf ../modif_mars/module_first_rk_step_part1.F . 
+ln -sf ../modif_mars/module_first_rk_step_part2.F .
+ln -sf ../modif_mars/module_initialize_les.F .
+ln -sf ../modif_mars/solve_em.F .
+ln -sf ../modif_mars/module_em.F .
+ln -sf ../modif_mars/module_diffusion_em.F .
+ln -sf ../modif_mars/Makefile_dyn_em Makefile
+cd ..
+
+cd frame
+ln -sf ../modif_mars/module_driver_constants.F .
+cd ..
+
+cd Registry
+ln -sf ../modif_mars/Registry.EM .
+ln -sf ../modif_mars/Registry.bash .
+cd ..
+
+cd phys
+ln -sf ../modif_mars/Makefile .
+ln -sf ../modif_mars/module_lmd_driver.F .
+ln -sf ../modif_mars/module_physics_addtendc.F .
+ln -sf ../modif_mars/module_physics_init.F .
+cd ..
+
+cd share
+ln -sf ../modif_mars/module_model_constants.F .
+cd ..
+
+
+ln -sf modif_mars/makeles .
+
+
+### create a fake directory
+mkdir -p mars_lmd/libf/phymars
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/correcfft
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/correcfft	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/correcfft	(revision 142)
@@ -0,0 +1,12 @@
+#! /bin/bash
+
+#### quick and dirty....
+
+cd external
+mkdir fftpack
+cd fftpack
+ln -sf ../../../../SRC/LES/WRFV2/external/fftpack/* .
+\rm fftpack5
+mkdir fftpack5
+cd fftpack5
+ln -sf ../../../../../SRC/LES/WRFV2/external/fftpack/fftpack5/* .
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/EXCLUS_de_SVN.txt
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/EXCLUS_de_SVN.txt	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/EXCLUS_de_SVN.txt	(revision 142)
@@ -0,0 +1,11 @@
+
+les fichiers mis a jour par makeles
+
+cp -rf ${libphys_folder}/liblmd.a ${whereliblmd}/
+cp -rf ${phymars_folder}/dimphys.h ${here}/modif_mars/
+cp -rf ${folder}/call_meso_inifis.inc ${here}/modif_mars/
+cp -rf ${folder}/call_meso_physiq.inc ${here}/modif_mars/
+cp -rf ${folder}/inc/module_lmd_driver_output*.inc ${here}/modif_mars/
+cp -rf ${phymars_folder}/wrf_output_2d.h ${here}/modif_mars/
+cp -rf ${phymars_folder}/wrf_output_3d.h ${here}/modif_mars/
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Makefile
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Makefile	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Makefile	(revision 142)
@@ -0,0 +1,59 @@
+#
+
+LN      =       ln -sf
+MAKE    =       make -i -r
+RM      =       rm -f
+
+
+MODULES = \
+	module_physics_addtendc.o \
+	module_physics_init.o \
+	module_lmd_driver.o
+  
+OBJS    =
+
+NMM_MODULES =  
+
+LIBTARGET    =  physics
+TARGETDIR    =  ./
+
+$(LIBTARGET) :
+		if [ $(WRF_NMM_CORE) -eq 1 ] ; then \
+                  $(MAKE) nmm_contrib                                      ; \
+                  $(AR) $(ARFLAGS) ../main/$(LIBWRFLIB) $(MODULES) $(OBJS) $(NMM_OBJS) $(NMM_MODULES) ; \
+                else                                                         \
+                  $(MAKE) non_nmm                                          ; \
+                  $(AR) $(ARFLAGS) ../main/$(LIBWRFLIB) $(MODULES) $(OBJS)             ; \
+                fi
+
+include ../configure.wrf
+
+nmm_contrib : $(NMM_OBJS) $(NMM_MODULES) $(MODULES) $(OBJS)
+
+non_nmm : $(MODULES) $(OBJS)
+
+clean:
+	@ echo 'use the clean script'
+
+# DEPENDENCIES : only dependencies after this line (don't remove the word DEPENDENCIES)
+
+module_physics_addtendc.o: \
+		../frame/module_state_description.o \
+		../frame/module_configure.o
+
+module_physics_init.o : \
+		../frame/module_state_description.o \
+		../frame/module_configure.o \
+		../frame/module_wrf_error.o \
+		../frame/module_dm.o \
+		../share/module_model_constants.o 
+
+module_lmd_driver.o: \
+		../frame/module_state_description.o \
+		../frame/module_wrf_error.o \
+		../frame/module_configure.o \
+		../share/module_model_constants.o \
+#../frame/module_wrf_error.o \
+#../share/module_model_constants.o
+
+# DO NOT DELETE
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Makefile_dyn_em
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Makefile_dyn_em	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Makefile_dyn_em	(revision 142)
@@ -0,0 +1,270 @@
+#
+
+LN      =       ln -sf
+MAKE    =       make -i -r
+RM      =       rm -f
+
+
+MODULES =                 		\
+        module_advect_em.o   		\
+	module_diffusion_em.o  		\
+	module_small_step_em.o 		\
+        module_big_step_utilities_em.o  \
+        module_em.o         		\
+        module_solvedebug_em.o    	\
+        module_bc_em.o                  \
+        module_init_utilities.o         \
+	module_damping_em.o		\
+	module_polarfft.o		\
+        module_first_rk_step_part1.o    \
+        module_first_rk_step_part2.o    \
+	$(CASE_MODULE)
+
+# possible CASE_MODULE settings
+#	module_initialize_b_wave.o      \
+#	module_initialize_grav2d_x.o    \
+#	module_initialize_heldsuarez.o  \
+#	module_initialize_hill2d_x.o    \
+#	module_initialize_quarter_ss.o  \
+#	module_initialize_real.o        \
+#	module_initialize_lsm_x.o       \
+#	module_initialize_les.o         \
+#	module_initialize_squall2d_x.o  \
+#	module_initialize_squall2d_y.o 
+
+OBJS    = 		        \
+	init_modules_em.o       \
+	solve_em.o              \
+        start_em.o              \
+        shift_domain_em.o       \
+        couple_or_uncouple_em.o \
+        nest_init_utils.o	\
+        adapt_timestep_em.o     \
+        interp_domain_em.o
+ 
+
+LIBTARGET    =  dyn_em
+TARGETDIR    =  ./
+$(LIBTARGET) :  $(MODULES) $(OBJS)
+		$(AR) $(ARFLAGS) ../main/$(LIBWRFLIB) $(MODULES) $(OBJS)
+
+include ../configure.wrf
+
+cio.o :
+	$(CC) -c $(CFLAGS) cio.c
+
+clean:
+	@ echo 'use the clean script'
+
+# DEPENDENCIES : only dependencies after this line (don't remove the word DEPENDENCIES)
+
+couple_or_uncouple_em.o: ../frame/module_domain.o \
+		../frame/module_configure.o \
+		../frame/module_driver_constants.o \
+		../frame/module_machine.o \
+		../frame/module_tiles.o \
+		../frame/module_dm.o \
+		../frame/module_state_description.o
+
+init_modules_em.o: module_big_step_utilities_em.o
+
+interp_domain_em.o: ../frame/module_domain.o \
+		../frame/module_configure.o 
+
+module_advect_em.o: ../share/module_bc.o \
+		../share/module_model_constants.o \
+		../frame/module_wrf_error.o
+
+module_bc_em.o: ../share/module_bc.o ../frame/module_configure.o \
+		../frame/module_wrf_error.o
+
+module_big_step_utilities_em.o: \
+		../share/module_llxy.o	\
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../share/module_model_constants.o 
+
+module_damping_em.o: ../frame/module_wrf_error.o
+
+module_diffusion_em.o:  module_big_step_utilities_em.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		../frame/module_wrf_error.o
+
+module_em.o:    module_big_step_utilities_em.o module_advect_em.o \
+		module_damping_em.o \
+		../frame/module_state_description.o \
+		../share/module_model_constants.o 
+
+module_polarfft.o: ../share/module_model_constants.o \
+		../frame/module_wrf_error.o
+
+module_small_step_em.o: \
+		../frame/module_configure.o  \
+		../share/module_model_constants.o 
+
+module_initialize_b_wave.o : \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../frame/module_timing.o \
+		../frame/module_dm.o \
+		../share/module_io_domain.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		module_init_utilities.o
+
+module_initialize_grav2d_x.o: \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../frame/module_timing.o \
+		../frame/module_dm.o \
+		../share/module_io_domain.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		module_init_utilities.o
+
+module_initialize_heldsuarez.o : \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../frame/module_timing.o \
+		../frame/module_dm.o \
+		../share/module_io_domain.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		module_init_utilities.o
+
+module_initialize_hill2d_x.o: \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../frame/module_timing.o \
+		../frame/module_dm.o \
+		../share/module_io_domain.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		module_init_utilities.o
+
+module_initialize_quarter_ss.o : \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../frame/module_timing.o \
+		../frame/module_dm.o \
+		../share/module_io_domain.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		module_init_utilities.o
+
+module_initialize_les.o : \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../frame/module_timing.o \
+		../frame/module_dm.o \
+		../share/module_io_domain.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		module_init_utilities.o
+
+module_initialize_real.o :  \
+		nest_init_utils.o	\
+		../share/module_llxy.o	\
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../frame/module_timing.o \
+		../frame/module_dm.o \
+		../share/module_io_domain.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		../share/module_soil_pre.o \
+		../share/module_optional_input.o
+
+module_initialize_squall2d_x.o : \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../frame/module_timing.o \
+		../frame/module_dm.o \
+		../share/module_io_domain.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		module_init_utilities.o
+
+module_initialize_squall2d_y.o : \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../frame/module_timing.o \
+		../frame/module_dm.o \
+		../share/module_io_domain.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		module_init_utilities.o
+
+nest_init_utils.o: \
+		../frame/module_domain.o \
+		../frame/module_configure.o
+
+start_em.o: module_bc_em.o \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_state_description.o \
+		../frame/module_timing.o \
+		../frame/module_dm.o \
+		../share/module_io_domain.o \
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		../share/module_date_time.o \
+		../phys/module_physics_init.o 
+
+solve_em.o:     module_small_step_em.o \
+		module_em.o            \
+		module_solvedebug_em.o \
+                module_bc_em.o         \
+		module_diffusion_em.o  \
+		module_big_step_utilities_em.o \
+                module_first_rk_step_part1.o \
+                module_first_rk_step_part2.o \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_driver_constants.o \
+		../frame/module_state_description.o \
+		../frame/module_machine.o \
+		../frame/module_tiles.o \
+		../frame/module_dm.o \
+		../share/module_llxy.o	\
+		../share/module_model_constants.o \
+		../share/module_bc.o \
+		../phys/module_physics_addtendc.o
+
+### pas sur
+module_first_rk_step_part1.o : \
+		../phys/module_lmd_driver.o 
+
+module_first_rk_step_part2.o : \
+		module_diffusion_em.o  \
+                module_bc_em.o         \
+		../frame/module_domain.o \
+		../frame/module_state_description.o \
+		../frame/module_driver_constants.o \
+		../frame/module_configure.o \
+		../frame/module_dm.o \
+		../share/module_bc.o 
+
+adapt_timestep_em.o: \
+                module_bc_em.o         \
+		../frame/module_domain.o \
+		../frame/module_configure.o  \
+		../frame/module_dm.o
+
+#		../chem/module_chem_utilities.o \
+# 		../chem/module_input_chem_data.o
+
+# DO NOT DELETE
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Registry.EM
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Registry.EM	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Registry.EM	(revision 142)
@@ -0,0 +1,1778 @@
+# Registry file, EM
+#                                               
+# At the present time this file is managed manually and edited by hand.                                         
+#                                               
+################################################################################
+# Dimension specifications
+#
+# This section of the Registry file is used to specify the dimensions
+# that will be used to define arrays. Dim is the one-letter name of the
+# dimension.  How defined can either be "standard_domain", which means
+# that the dimension (1) is one of the three spatial dimensions and (2)
+# it will be set using the standard namelist mechanism and domain data
+# structure dimension fields (e.g. sd31,ed31,sd32...).
+#
+# Order refers to which of the three sets of just-mentioned internal
+# dimension variables the dimension is referred to by in the driver.
+# That is, is it the first, second, or third dimension.  The registry
+# infers the mapping of its internal dimensions according to the
+# combination of Order and Coord-axis that are specified in this table.
+# 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
+# to maintain the three physical domain dimensions.
+# 
+# "How defined" can also specify the name of a namelist variable from which
+# the definition for the dimension will come; this is specified as
+# "namelist=<variable name>".  The namelist variable must have been
+# defined as an integer and with only one entry in the rconfig table. Or
+# a constant can be specified.  The coordinate axis for the dimension is
+# either X, Y, Z, or C (for "not a spatial dimension").  The Dimname is
+# the descriptive name of the dimension that will be included in the
+# metadata in data sets.  Note that the b, f, and t modifiers that appear
+# as the last characters of dimension strings used # in state and # i1
+# registry definitions are not dimensions and do not need to be declared
+# here.
+#
+
+# Available characters for dimspec: 0123456789@%+=|?.!&[{}]
+
+#<Table>  <Dim>  <Order> <How defined>         <Coord-axis>  <Dimname in Datasets>
+dimspec    i      1     standard_domain              x          west_east
+dimspec    j      3     standard_domain              y          south_north
+dimspec    k      2     standard_domain              z          bottom_top
+dimspec    l      2     namelist=num_soil_layers     z          soil_layers
+dimspec    u      2     namelist=num_land_cat        z          land_cat
+dimspec    s      2     namelist=num_soil_cat        z          soil_cat
+dimspec    p      -     constant=7501                c          microphysics_rstrt_state
+dimspec    w      -     namelist=spec_bdy_width      c          spec_bdy_width
+dimspec    e      3     namelist=ensdim              z          ensemble dimension
+dimspec    n      1     namelist=dfi_time_dim        c          dfi time dimension
+dimspec    z      -     namelist=max_obs          c          max_obs
+dimspec    h      -     namelist=nobs_err_flds    c          nobs_err_flds
+dimspec    r      -     namelist=nobs_ndg_vars    c          nobs_ndg_vars
+dimspec    g      2     namelist=num_metgrid_levels  z          num_metgrid_levels
+dimspec    m      2     constant=12                  z          months_per_year
+dimspec    a      -     namelist=cam_abs_dim1     c          cam_abs_dim1
+dimspec    c      -     namelist=cam_abs_dim2     z          cam_abs_dim2
+dimspec    q      2     namelist=levsiz           z          levsiz
+dimspec    d      2     namelist=paerlev          z          paerlev
+dimspec    ?      -     namelist=ts_buf_size      c          ts_buf_size
+dimspec    !      -     namelist=max_ts_locs      c          max_ts_locs
+dimspec    v      -     constant=1                z          one
+
+
+################################################################################
+################################################################################
+################################################################################
+
+
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+#### 
+#### variables physiques ecrites dans les fichiers WRF
+#### - h indique l'ecriture
+#### - en commentaire, les variables physiques dans physiq.F
+#### - utiliser le script automatique Registry.bash
+####
+#### YOU CAN OUTPUT ANY 2D OR 3D VARIABLE THAT IS AVAILABLE IN MESO_PHYSIQ.F
+#### --- please indicate #SAVEMARS2 for 2D fields and #SAVEMARS3 for 3D fields
+####
+#### !!!! WARNING !!!! WARNING !!!! WARNING !!!! WARNING !!!! WARNING !!!!
+####         THIS HAS TO BE CONSISTENT WITH $MMM/SRC/WRFV2/Registry/Registry.EM
+#### !!!! WARNING !!!! WARNING !!!! WARNING !!!! WARNING !!!! WARNING !!!!
+####
+############ name in WRF !!!!! ############# name in NETCDF !!!! ############################################## name in meso_physiq !!!!!
+state  real  TSURF     ij   misc  1  -  rhd  "TSURF"     "SURF TEMPERATURE"                "K"       #SAVEMARS2 tsurf
+state  real  CO2ICE    ij   misc  1  -  rd   "CO2ICE"    "CO2 GROUND ICE"                  "kg"      #SAVEMARS2 co2ice
+state  real  EMISSIV   ij   misc  1  -  rd   "EMISSIV"   "EMISSIVITY"                      ""        #SAVEMARS2 emis
+state  real  THETA     ij   misc  1  -  rd   "THETA"     "SLOPE INCLINATION"               "deg"     #SAVEMARS2 theta_sl
+state  real  PSI       ij   misc  1  -  rd   "PSI"       "SLOPE ORIENTATION"               "deg"     #SAVEMARS2 psi_sl
+state  real  TAU_DUST  ij   misc  1  -  rd   "TAU_DUST"  "REFERENCE VISIBLE DUST OPACITY"  ""        #SAVEMARS2 tauref
+state  real  SWDOWNZ   ij   misc  1  -  rhd  "SWDOWNZ"   "DOWNWARD SW FLUX AT SURFACE"     "W m-2"   #SAVEMARS2 fluxsurf_sw_tot      
+state  real  LWDOWNZ   ij   misc  1  -  rhd  "LWDOWNZ"   "DOWNWARD LW FLUX AT SURFACE"     "W m-2"   #SAVEMARS2 fluxsurf_lw
+state  real  SWUP      ij   misc  1  -  rd   "SWUP"      "UPWARD SW FLUX AT TOP"           "W m-2"   #SAVEMARS2 fluxtop_sw_tot    
+state  real  LWUP      ij   misc  1  -  rd   "LWUP"      "UPWARD LW FLUX AT TOP"           "W m-2"   #SAVEMARS2 fluxtop_lw
+state  real  MTOT      ij   misc  1  -  rd   "MTOT"      "TOTAL MASS WATER VAPOR"          "kg m-2"  #SAVEMARS2 mtot
+state  real  ICETOT    ij   misc  1  -  rd   "ICETOT"    "TOTAL MASS WATER ICE"            "kg m-2"  #SAVEMARS2 icetot
+state  real  RAVE      ij   misc  1  -  rd   "RAVE"      "MEAN ICE RADIUS"                 "m"       #SAVEMARS2 rave
+state  real  RICE      ikj  misc  1  -  rd   "RICE"      "ICE RADIUS"                      "m"       #SAVEMARS3 rice
+####
+####
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+####
+####
+#### TRACEURS: POUR L'INSTANT NE PAS CHANGER L'ORDRE (>> mais l'ordre n'est-il pas defini plus bas ? dans les options mars ?)
+#### - effacer le h si l'on veut eviter les sorties
+####
+state  real  -         ikjftb  scalar  1  -  -                         -
+state  real  QH2O      ikjftb  scalar  1  -  i01rhusdf=(bdy_interp:dt) "QH2O"       "Water vapor mixing ratio"   "kg kg-1"
+state  real  QH2O_ICE  ikjftb  scalar  1  -  i01rhusdf=(bdy_interp:dt) "QH2O_ICE"   "Water ice mixing ratio"     "kg kg-1"
+state  real  QDUST     ikjftb  scalar  1  -  i01rhusdf=(bdy_interp:dt) "QDUST"      "Dust mixing ratio"          "kg kg-1"
+state  real  qtrac1    ikjftb  scalar  1  -  i01rhusdf=(bdy_interp:dt) "qtrac1"     "Decaying tracer 1"          "kg kg-1"
+####
+####
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+
+
+
+
+
+
+
+#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.                                             
+#                                               
+# table entries are of the form                                         
+#<Table> <Type> <Sym>         <Dims>   <Use>   <NumTLev> <Stagger> <IO>     <DNAME>             <DESCRIP>     <UNITS>   
+#
+
+# It is required that LU_INDEX appears before any variable that is
+# interpolated with a mask, as lu_index supplies that mask.
+# this next 1 is for the HFSoLE/PET demo; writing these to auxhist1 output over MCEL for coupling
+# with wave model, only if compiled with -DMCELIO, JM 2003/05/29
+state    real  LU_INDEX         ij      misc        1         -     i02r01d=(interp_fcnm)u=(copy_fcnm)   "LU_INDEX"              "LAND USE CATEGORY"         ""
+state    real  LU_MASK          ij      misc        1         -     i3h1     "LU_MASK"              "0 land 1 water"         ""
+
+# znw, znu, dzs, and zs must be listed before any 3-d fields
+# in order for the grib output module to work correctly.  The grib output
+# module retrieves the vertical levels from these parameters.  If znw, znu
+# dzs, and zs are not listed first, vertical level will not be encoded at 
+# time 0.
+
+state    real    znu            k       dyn_em      1         -     irh       "znu"  "eta values on half (mass) levels"  ""
+state    real    znw            k       dyn_em      1         Z     i01rh     "znw"  "eta values on full (w) levels"  ""
+state    real   ZS              l        misc      -         Z     ir       "ZS"                    "DEPTHS OF CENTERS OF SOIL LAYERS"         "m"
+state    real   DZS             l        misc      -         Z     ir       "DZS"                   "THICKNESSES OF SOIL LAYERS"               "m"
+
+#
+# Variables from WPS
+#
+state    real   u_gc           igj      dyn_em      1        XZ    i1  "UU"     "x-wind component"    "m s-1"
+state    real   v_gc           igj      dyn_em      1        YZ    i1  "VV"     "y-wind component"    "m s-1"
+state    real   t_gc           igj      dyn_em      1        Z     i1  "TT"     "temperature"         "K"
+state    real   rh_gc          igj      dyn_em      1        Z     i1  "RH"    "relative humidity"   "%"
+state    real   ght_gc         igj      dyn_em      1        Z     i1  "GHT"   "geopotential height" "m"
+state    real   p_gc           igj      dyn_em      1        Z     i1  "PRES"   "pressure"            "Pa"
+state    real   xlat_gc        ij       dyn_em      1        -     i1  "XLAT_M" "latitude, positive north" "degrees"
+state    real   xlong_gc       ij       dyn_em      1        -     i1  "XLONG_M" "longitude, positive east" "degrees"
+state    real   ht_gc          ij       dyn_em      1        -     i1  "HGT_M" "topography elevation" "m"
+state    real   tsk_gc         ij       dyn_em      1        -     i1  "SKINTEMP"  "skin temperature"  "K"
+state    real   tavgsfc        ij       dyn_em      1        -     i1  "TAVGSFC"  "daily mean of surface air temperature"  "K"
+state    real   tmn_gc         ij       dyn_em      1        -     i1  "SOILTEMP"  "annual mean deep soil temperature"  "K"
+state    real   pslv_gc        ij       dyn_em      1        -     i1  "PMSL"  "sea level pressure"  "Pa"
+state    real   greenfrac      imj      dyn_em      1        Z     i1  "GREENFRAC" "monthly greenness fraction" "0 - 1 fraction"
+state    real   albedo12m      imj      dyn_em      1        Z     i1  "ALBEDO12M" "background albedo" "0 - 1 fraction"
+state    real   pd_gc          igj      dyn_em      1        Z     -   "PD"    "dry pressure"        "Pa"
+state    real   psfc_gc        ij       dyn_em      1        -      -  "PSFC_GC"     "surface pressure"            "Pa"
+state    real   intq_gc        ij       dyn_em      1        -     -   "INTQ"  "integrated mixing ratio" "Pa"
+state    real   pdhs           ij       dyn_em      1        -     -   "PDHS"  "hydrostatic dry surface pressure" "Pa"
+state    real   qv_gc          igj      dyn_em      1        Z     i1  "QV"     "mixing ratio"        "kg kg-1"
+ifdef RUC_CLOUD
+state    real   qr_gc          igj      dyn_em      1        Z     i1  "QR"    "rain water mixing ratio"   "kg kg-1"
+state    real   qc_gc          igj      dyn_em      1        Z     i1  "QC"    "cloud water mixing ratio"   "kg kg-1"
+state    real   qs_gc          igj      dyn_em      1        Z     i1  "QS"    "snow mixing ratio"   "kg kg-1"
+state    real   qi_gc          igj      dyn_em      1        Z     i1  "QI"    "cloud ice mixing ratio"   "kg kg-1"
+state    real   qg_gc          igj      dyn_em      1        Z     i1  "QG"    "graupel mixing ratio"   "kg kg-1"
+state    real   qni_gc         igj      dyn_em      1        Z     i1  "QNI"   "ice no concentration"   "m-3"
+endif
+
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS     
+####
+#### INITIALISATION
+####
+#### variables dans real
+####
+state  real   albedo_gcm_gc   ij   dyn_em  1  -  i1  "ALBEDO_GCM"       "albedo of naked ground"  "0 - 1 fraction"
+state  real   therm_inert_gc  ij   dyn_em  1  -  i1  "THERMAL_INERTIA"  "thermal inertia"         "J/m2/K/s0.5"
+state  real   slpx_gc         ij   dyn_em  1  -  i1  "SLPX"             "slope x direction"       "rad"
+state  real   slpy_gc         ij   dyn_em  1  -  i1  "SLPY"             "slope y direction"       "rad"
+state  real   hv_gc          igj   dyn_em  1  Z  i1  "HV"               "water vapor"             "kg/kg" 
+state  real   hi_gc          igj   dyn_em  1  Z  i1  "HI"               "water ice"               "kg/kg"
+state  real   tsoil_gc       igj   dyn_em  1  Z  i1  "TSOIL"            "soil temperatures"       "K"
+state  real   isoil_gc       igj   dyn_em  1  Z  i1  "ISOIL"            "soil thermal inertia"    "tiu"
+state  real   dsoil_gc       igj   dyn_em  1  Z  i1  "DSOIL"            "soil depths"             "m"
+####
+#### variables dans wrf
+####
+state  real   albedo_gcm      ij   misc  1  -  i012rd  "MARS_ALB"    "albedo of naked ground"  "0 - 1 fraction"
+state  real   therm_inert     ij   misc  1  -  i012rd  "MARS_TI"     "thermal inertia"         "J/m2/K/s0.5"
+state  real   slpx            ij   misc  1  -  i012rd  "SLOPEX"      "slope x direction"       "rad"
+state  real   slpy            ij   misc  1  -  i012rd  "SLOPEY"      "slope y direction"       "rad"
+state  real   mars_emiss      ij   misc  1  -  i012rd  "MARS_EMISS"  "emissivity"              "0 - 1 fraction"
+state  real   mars_cice       ij   misc  1  -  i012rd  "MARS_CICE"   "co2 ice"                 "kg"
+state  real   mars_wice       ij   misc  1  -  i012rd  "MARS_WICE"   "h2o ice"                 "kg/m2"
+state  real   mars_tsoil     ilj   misc  1  -  i012rd  "MARS_TSOIL"  "soil temperatures"       "K"
+state  real   mars_isoil     ilj   misc  1  -  i012rd  "MARS_ISOIL"  "soil thermal inertia"    "tiu"
+state  real   mars_dsoil     ilj   misc  1  -  i012rd  "MARS_DSOIL"  "soil depths"             "m"
+state  real   mars_gw        ilj   misc  1  -  i012rd  "MARS_GW"     "gwparam"                 " "
+####
+####
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+
+
+
+#-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+#                                               
+# Variables for Eulerian mass coordinate dynamics                                            
+#                                               
+
+# Velocities
+#
+# U Vel
+state    real   u              ikjb     dyn_em      2         X     \
+     i01rhusdf=(bdy_interp:dt)       "U"                      "x-wind component"   "m s-1"
+state    real   ru             ikj     dyn_em      1         X      -        "MU_U"        "mu-coupled u"   "Pa m s-1"
+state    real   ru_m           ikj     dyn_em      1         X      -        "ru_m"        ""   ""
+state    real   ru_tend        ikj     dyn_em      1         X      -        "ru_tend"        ""   ""                                   
+i1       real   ru_tendf       ikj     dyn_em      1         X                                          
+state    real   u_save         ikj     dyn_em      1         X      -        "u_save"
+#                                               
+# V Vel
+state    real   v              ikjb     dyn_em      2         Y     \
+     i01rhusdf=(bdy_interp:dt)        "V"                     "y-wind component"   "m s-1"
+state    real   rv             ikj     dyn_em      1         Y      -        "MU_V"        "mu-coupled v"   "Pa m s-1"
+state    real   rv_m           ikj     dyn_em      1         Y      -        "rv_m"
+state    real   rv_tend        ikj     dyn_em      1         Y      -        "rv_tend"
+i1       real   rv_tendf       ikj     dyn_em      1         Y                                          
+state    real   v_save         ikj     dyn_em      1         Y      -        "v_save"                   
+#                                               
+# Vertical Vel                                          
+state    real   w              ikjb     dyn_em      2         Z     \
+        irhusdf=(bdy_interp:dt)  "w"                          "z-wind component"   "m s-1"
+state    real   ww             ikj     dyn_em      1         Z      r         "ww"   "mu-coupled eta-dot"    "Pa s-1"
+state    real   rw             ikj     dyn_em      1         Z      -         "rw"   "mu-coupled w"          "Pa m s-1"
+i1       real   ww1            ikj     dyn_em      1         Z                                          
+state    real   ww_m           ikj     dyn_em      1         Z      r         "ww_m"   "time-avg mu-coupled eta-dot"    "Pa s-1"
+i1       real   wwp            ikj     dyn_em      1         Z                                          
+i1       real   rw_tend        ikj     dyn_em      1         Z                                          
+i1       real   rw_tendf       ikj     dyn_em      1         Z                                          
+i1       real   w_save         ikj     dyn_em      1         Z                                          
+
+# Geopotential
+state    real   ph             ikjb     dyn_em      2         Z     \
+       irusdf=(bdy_interp:dt)   "ph"   "perturbation geopotential"  "m2 s-2"
+state    real   phb            ikj     dyn_em      1         Z     irdus  "phb"  "base-state geopotential"  "m2 s-2"
+state    real   phb_fine       ikj     dyn_em      1         Z      -     "phb_fine"  "for nesting, temp holding interpolated coarse grid phb"  "m2 s-2"
+state    real   ph0            ikj     dyn_em      1         Z      r     "ph0"  "initial geopotential"     "m2 s-2"
+state    real   php            ikj     dyn_em      1         Z      r     "php"  "geopotential"             "m2 s-2"
+i1       real   ph_tend        ikj     dyn_em      1         Z 
+i1       real   ph_tendf       ikj     dyn_em      1         Z 
+i1       real   ph_save        ikj     dyn_em      1         Z 
+##
+## MARS: TO GET LIGHTER HISTORY FILES
+##
+state    real   phtot          ikj     dyn_em      1         Z     irh       "PHTOT"        "total geopotential"      "m2 s-2"
+
+# Potential Temperature
+state    real   t              ikjb     dyn_em      2         -     \
+       i01rhusdf=(bdy_interp:dt)   "t"      "perturbation potential temperature (theta-t0)" "K"
+
+state    real   t_init         ikj     dyn_em      1         -      ir       "t_init" "initial potential temperature" "K"
+i1       real   t_tend         ikj     dyn_em      1         -  
+i1       real   t_tendf        ikj     dyn_em      1         -  
+state    real   tp             ikj     dyn_em      2         -  
+i1       real   t_2save        ikj     dyn_em      1         -   
+state    real   t_save         ikj     dyn_em      1         -               "t_save"
+#                                               
+
+
+# Mass
+state    real   mu              ijb     dyn_em      2         -     \
+     irusdf=(bdy_interp:dt)   "mu"  "perturbation dry air mass in column" "Pa"
+state    real   mub             ij     dyn_em      1         -     irdus        "mub" "base state dry air mass in column" "Pa"
+state    real   mub_fine        ij     dyn_em      1         -      -           "mub_fine" "nest temp, holds interpolated coarse grid mub" "Pa"
+state    real   mub_save        ij     dyn_em      1         -      -           "mub_save" "nest temp, holds orig fine grid mub" "Pa"
+state    real   mu0             ij     dyn_em      1         -     i01rdu       "mu0" "initial dry mass in column" "Pa"
+state    real   mudf            ij     dyn_em      1         -      -           "mudf" "" ""
+state    real   muu             ij     dyn_em      1          -                 "muu"
+i1       real   muus            ij     dyn_em      1          -     
+state    real   muv             ij     dyn_em      1          -                 "muv"
+i1       real   muvs            ij     dyn_em      1          -     
+state    real   mut             ij     dyn_em      1          -                 "mut"
+state    real   muts            ij     dyn_em      1          -                 "muts"
+i1       real   muave           ij     dyn_em      1          -     
+i1       real   mu_save         ij     dyn_em      1          -     
+i1       real   mu_tend         ij     dyn_em      1          -     
+i1       real   mu_tendf        ij     dyn_em      1          -     
+
+#diagnostic for looking at nest position in output. A mungy version of terrain height.
+state    real   nest_pos        ij     misc        1   -   ru=(mark_domain)  "NEST_POS"
+state    real   nest_mask       ij     misc        1   -   ru=(mark_domain)   "NEST_MASK"     "LOCATION OF NEST IF ANY"
+state    real   ht_coarse       ij     misc        1   -     r                -              "STORAGE FOR LOW-RES TERRAIN"
+
+
+# TKE
+state    real   tke            ikj     dyn_em      2         -       r        "tke"          "TURBULENCE KINETIC ENERGY"     "m2 s-2"
+i1       real   tke_tend       ikj     dyn_em      1         -      
+
+# Pressure and Density
+state    real   p              ikj     dyn_em      1         -      r         "p"           "perturbation pressure"         "Pa"
+state    real   al             ikj     dyn_em      1         -      r         "al"          "inverse perturbation density"  "m3 kg-1"
+state    real   alt            ikj     dyn_em      1         -      r         "alt"         "inverse density"               "m3 kg-1"
+state    real   alb            ikj     dyn_em      1         -      rdus      "alb"         "inverse base density"          "m3 kg-1"
+state    real   zx             ikj     dyn_em      1         X      -         " "  " "  " "    
+state    real   zy             ikj     dyn_em      1         Y      -         " "  " "  " "   
+state    real   rdz            ikj     dyn_em      1         Z      -         " "  " "  " "   
+state    real   rdzw           ikj     dyn_em      1         Z       -        " "  " "  " "   
+state    real   pb             ikj     dyn_em      1         -      rdus      "pb"          "BASE STATE PRESSURE "          "Pa"
+##
+## MARS: TO GET LIGHTER HISTORY FILES
+##
+state    real   ptot           ikj     dyn_em      1         -      irh       "PTOT"        "total pressure"      "Pa"
+####### if you choose h here, you will probably want not to output u,v,w,t,etc...
+state    real   uave           ikj     dyn_em      1         -      ir       "UAVE"        "average zonal wind"  "m/s"
+state    real   ustd           ikj     dyn_em      1         -      ir       "USTD"        "std dev zonal wind"  "m/s"
+state    real   vave           ikj     dyn_em      1         -      ir       "VAVE"        "average meridional wind"  "m/s"
+state    real   vstd           ikj     dyn_em      1         -      ir       "VSTD"        "std dev meridional wind"  "m/s"
+state    real   wave           ikj     dyn_em      1         -      ir       "WAVE"        "average vertical wind"  "m/s"
+state    real   wstd           ikj     dyn_em      1         -      ir       "WSTD"        "std dev vertical wind"  "m/s"
+state    real   tave           ikj     dyn_em      1         -      ir       "TAVE"        "average pert. potential temperature"  "K"
+state    real   tstd           ikj     dyn_em      1         -      ir       "TSTD"        "std dev pert. potential temperature"  "K"
+#######
+## ajouter tk, ptot, phtot ??? les deux derniers sont assez smooth...
+
+#                                               
+# Other dyn                                             
+#                                               
+i1       real   advect_tend    ikj     dyn_em      1         -                                          
+i1       real   alpha          ikj     dyn_em      1         -                                                  
+i1       real   a              ikj     dyn_em      1         -                                                  
+i1       real   gamma          ikj     dyn_em      1         -                                                  
+i1       real   c2a            ikj     dyn_em      1         -     -
+i1       real   rho            ikj     dyn_em      1         -     -
+i1       real   phm            ikj     dyn_em      1         -     -
+i1       real   cqu            ikj     dyn_em      1         -     -
+i1       real   cqv            ikj     dyn_em      1         -     -
+i1       real   cqw            ikj     dyn_em      1         -     -
+i1       real   pm1            ikj     dyn_em      1         -     -
+state    real   sr             ij      dyn_em      1         -      ir         "sr" "fraction of frozen precipitation"
+state    real   potevp         ij      dyn_em      1         -       r         "potevp" "accumulated potential evaporation" "W m-2"
+state    real   snopcx         ij      dyn_em      1         -       r         "snopcx" "snow phase change heat flux" "W m-2"
+state    real   soiltb         ij      dyn_em      1         -       -         "soiltb" "bottom soil temperature" "K"
+state    real    fnm            k       dyn_em      1         -     ir       "fnm"  "upper weight for vertical stretching"  ""
+state    real    fnp            k       dyn_em      1         -     ir       "fnp"  "lower weight for vertical stretching"  ""
+state    real    rdnw           k       dyn_em      1         -     ir       "rdnw"  "inverse d(eta) values between full (w) levels"   ""
+state    real    rdn            k       dyn_em      1         -     ir       "rdn"  "inverse d(eta) values between half (mass) levels"   ""
+state    real    dnw            k       dyn_em      1         -     ir       "dnw" "d(eta) values between full (w) levels"   ""
+state    real    dn             k       dyn_em      1         -     ir       "dn " "d(eta) values between half (mass) levels"   ""
+state    real    t_base         k       dyn_em      1         -     ir        "t_base"               "BASE STATE T IN IDEALIZED CASES"         "K"      
+state    real    z              ikj     dyn_em      1         -     -         " " " " " "
+i1       real    mu_3d          ikj     dyn_em      1         -                                          
+i1       real    z_at_w         ikj     dyn_em      1         Z 
+state    real    cfn            -       misc      -         -     ir       "cfn"    "extrapolation constant"  ""
+state    real    cfn1           -       misc      -         -     ir       "cfn1"   "extrapolation constant"  ""
+state    integer step_number    -       misc      -         -     ir        "step_number"  ""
+
+# 2m and 10m output diagnostics
+state    real   Q2               ij     misc        1         -     ird      "Q2"                   "QV at 2 M"         "kg kg-1"
+state    real   T2               ij     misc        1         -     ird      "T2"                   "TEMP at 2 M"       "K"
+state    real   TH2              ij     misc        1         -     ird      "TH2"                  "POT TEMP at 2 M"   "K"
+state    real   PSFC             ij     misc        1         -     i01rhd    "PSFC"                 "SFC PRESSURE"      "Pa"
+
+# these next 2 are for the HFSoLE/PET demo; writing these to auxhist1 output over MCEL for coupling
+# with wave model, only if compiled with -DMCELIO, JM 2003/05/29
+state    real   U10              ij     misc        1         -     ir01d      "U10"                "U at 10 M"         "m s-1"
+state    real   V10              ij     misc        1         -     ir01d      "V10"                "V at 10 M"         "m s-1"
+
+# these next 4 are for observational nudging
+state    real   uratx           ij      misc        1         -      r          "URATX"            "Ratio of U over U10 on mass points "         "dimensionless"
+state    real   vratx           ij      misc        1         -      r          "VRATX"            "Ratio of V over V10 on mass points "         "dimensionless"   
+state    real   tratx           ij      misc        1         -      r          "TRATX"            "Ratio of T over TH2 on mass points "         "dimensionless"   
+state    real   obs_savwt      hikj     dyn_em      1         X      -       "OBS_SAVWT"
+
+# Other
+state   real    rdx            -        misc      -         -     ir       "rdx"                   "INVERSE X GRID LENGTH"         ""      
+state   real    rdy            -        misc      -         -     ir       "rdy"                   "INVERSE Y GRID LENGTH"         ""      
+state   real    dts            -        misc      -         -     ir        "dts"                   "SMALL TIMESTEP"         ""      
+state   real    dtseps         -        misc      -         -     ir        "dtseps"                "TIME WEIGHT CONSTANT FOR SMALL STEPS"         ""      
+state   real    resm           -        misc      -         -     ir       "resm"                  "TIME WEIGHT CONSTANT FOR SMALL STEPS"         ""      
+state   real    zetatop        -        misc      -         -     ir       "zetatop"               "ZETA AT MODEL TOP"         ""      
+state   real    cf1            -        misc      -         -     ir       "cf1"                   "2nd order extrapolation constant"         ""      
+state   real    cf2            -        misc      -         -     ir       "cf2"                   "2nd order extrapolation constant"         ""      
+state   real    cf3            -        misc      -         -     ir       "cf3"                   "2nd order extrapolation constant"         ""      
+state   integer number_at_same_level    -        -          -         -     -        "number_at_same_level"  ""         ""      
+
+# State for derived time quantities.  
+state   integer itimestep      -        -          -         -     r         "itimestep"             ""         ""      
+state   real    xtime          -        -          -         -     r         "xtime"                 "minutes since simulation start"         ""      
+state   real    julian         -        -          -         -     -          "julian"                "day of year, 0.0 at 0Z on 1 Jan."         "days"      
+
+
+# input file descriptor for lbcs on parent domain                                               
+state   integer lbc_fid        -        -          -         -     -         "lbc_fid"               ""         ""      
+# indicates if tiling has been computed                                         
+state   logical tiled          -        -          -         -     -         "tiled"                 ""         ""      
+# indicates if patches have been computed                                               
+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                                                             
+state   logical press_adj      -        -          -         -     -         "press_adj"         "T/F flag adjust mu"         ""    
+
+# Mask for moving nest interpolations
+state    integer imask_nostag         ij      misc     1     -
+state    integer imask_xstag          ij      misc     1     X
+state    integer imask_ystag          ij      misc     1     Y
+state    integer imask_xystag         ij      misc     1     XY 
+# vortex center indices; need for restarts of moving nests
+state    real    xi                   -       misc     -     -    r
+state    real    xj                   -       misc     -     -    r
+state    real    vc_i                 -       misc     -     -    r
+state    real    vc_j                 -       misc     -     -    r
+
+#-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+# Scalar (4D) arrays
+
+# 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                                                
+# dry code will will still link properly)                                               
+#                                               
+state   real    -              ikjftb   moist       1         -     -    -
+state   real    qv             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QVAPOR"           "Water vapor mixing ratio"      "kg kg-1"
+state   real    qc             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QCLOUD"           "Cloud water mixing ratio"      "kg kg-1"
+state   real    qr             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QRAIN"            "Rain water mixing ratio"       "kg kg-1"
+state   real    qi             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QICE"             "Ice mixing ratio"              "kg kg-1"
+state   real    qs             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QSNOW"            "Snow mixing ratio"             "kg kg-1"
+state   real    qg             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QGRAUP"           "Graupel mixing ratio"          "kg kg-1"
+state   real    -              ikjftb   dfi_moist       1         -     -    -
+state   real    dfi_qv         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QVAPOR"       "Water vapor mixing ratio"      "kg kg-1"
+state   real    dfi_qc         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QCLOUD"       "Cloud water mixing ratio"      "kg kg-1"
+state   real    dfi_qr         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QRAIN"        "Rain water mixing ratio"       "kg kg-1"
+state   real    dfi_qi         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QICE"         "Ice mixing ratio"              "kg kg-1"
+state   real    dfi_qs         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QSNOW"        "Snow mixing ratio"             "kg kg-1"
+state   real    dfi_qg         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QGRAUP"       "Graupel mixing ratio"          "kg kg-1"
+
+
+# Chem Scalars
+state   real    -              ikjftb   chem        1         -     -    -                                       
+
+# Other Scalars
+state   real    -              ikjftb  scalar      1         -     -   -
+state   real    qndrop         ikjftb  scalar      1         -     \
+   i01rusdf=(bdy_interp:dt)    "QNDROP"        "Droplet number mixing ratio"        "# kg-1"
+state   real    qni            ikjftb  scalar      1         -     \
+   i01rusdf=(bdy_interp:dt)    "QNICE"         "Ice Number concentration" "# kg-1"
+state   real    qt             ikjftb  scalar      1         -     \
+   i01rusdf=(bdy_interp:dt)    "CWM"           "Total condensate mixing ratio"      "kg kg-1"
+state   real    qns            ikjftb  scalar      1         -     \
+   i01rusdf=(bdy_interp:dt)    "QNSNOW"         "Snow Number concentration"   "# kg(-1)"
+state   real    qnr            ikjftb  scalar      1         -     \
+   i01rusdf=(bdy_interp:dt)    "QNRAIN"        "Rain Number concentration"   "# kg(-1)"
+state   real    qng            ikjftb  scalar      1         -     \
+   i01rusdf=(bdy_interp:dt)    "QNGRAUPEL"     "Graupel Number concentration" "# kg(-1)"
+state   real    -              ikjftb  dfi_scalar      1         -     -   -
+state   real    dfi_qndrop     ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_QNDROP"    "Droplet number mixing ratio"        "# kg-1"
+state   real    dfi_qni        ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_QNICE"     "Ice Number concentration" "# kg-1"
+state   real    dfi_qt         ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_CWM"       "Total condensate mixing ratio"      "kg kg-1"
+state   real    dfi_qns        ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_QNSNOW"    "Snow Number concentration"   "# kg(-1)"
+state   real    dfi_qnr        ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_QNRAIN"    "Rain Number concentration"   "# kg(-1)"
+state   real    dfi_qng        ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_QNGRAUPEL" "Graupel Number concentration" "# kg(-1)"
+
+#-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+# Arrays for Specified LBCs  (lbc arrays REMOVED; Boundary arrays are now specified with the state array; see above, 20050413 JM )
+
+state    real   fcx            w         misc     -         -      ir       "fcx"                  "RELAXATION TERM FOR BOUNDARY ZONE"         ""
+state    real   gcx            w         misc     -         -      ir       "gcx"                  "2ND RELAXATION TERM FOR BOUNDARY ZONE"         ""
+state    real   dtbc            -        misc     -         -      ir       "dtbc"                 "TIME SINCE BOUNDARY READ"         ""
+
+#-------------------------------------------------------------------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------------------------------------------------------------------
+# Physics Related State Varibles
+
+#-------------------------------------------------------------------------------------------------------------------------------------------
+# SI - start variables from netCDF format from Standard Initialization, most eventually for use in LSM schemes
+#-------------------------------------------------------------------------------------------------------------------------------------------
+
+state   real   sm000007            ij    misc          1     -     i1      "SM000007"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm007028            ij    misc          1     -     i1      "SM007028"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm028100            ij    misc          1     -     i1      "SM028100"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm100255            ij    misc          1     -     i1      "SM100255"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   st000007            ij    misc          1     -     i1      "ST000007"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st007028            ij    misc          1     -     i1      "ST007028"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st028100            ij    misc          1     -     i1      "ST028100"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st100255            ij    misc          1     -     i1      "ST100255"      "LAYER SOIL TEMPERATURE" "K"
+state   real   sm000010            ij    misc          1     -     i1      "SM000010"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm010040            ij    misc          1     -     i1      "SM010040 "     "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm040100            ij    misc          1     -     i1      "SM040100 "     "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm100200            ij    misc          1     -     i1      "SM100200 "     "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm010200            ij    misc          1     -     i1      "SM010200"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm000            ij    misc          1     -     i1      "SOILM000"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm005            ij    misc          1     -     i1      "SOILM005"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm020            ij    misc          1     -     i1      "SOILM020"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm040            ij    misc          1     -     i1      "SOILM040"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm160            ij    misc          1     -     i1      "SOILM160"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm300            ij    misc          1     -     i1      "SOILM300"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sw000010            ij    misc          1     -     i1      "SW000010"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw010040            ij    misc          1     -     i1      "SW010040"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw040100            ij    misc          1     -     i1      "SW040100"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw100200            ij    misc          1     -     i1      "SW100200"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw010200            ij    misc          1     -     i1      "SW010200"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw000            ij    misc          1     -     i1      "SOILW000"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw005            ij    misc          1     -     i1      "SOILW005"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw020            ij    misc          1     -     i1      "SOILW020"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw040            ij    misc          1     -     i1      "SOILW040"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw160            ij    misc          1     -     i1      "SOILW160"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw300            ij    misc          1     -     i1      "SOILW300"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   st000010            ij    misc          1     -     i1      "ST000010"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st010040            ij    misc          1     -     i1      "ST010040"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st040100            ij    misc          1     -     i1      "ST040100"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st100200            ij    misc          1     -     i1      "ST100200"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st010200            ij    misc          1     -     i1      "ST010200"      "LAYER SOIL TEMPERATURE" "K"
+state   real   soilt000            ij    misc          1     -     i1      "SOILT000"      "LAYER SOIL TEMPERATURE" "K"
+state   real   soilt005            ij    misc          1     -     i1      "SOILT005"      "LAYER SOIL TEMPERATURE" "K"
+state   real   soilt020            ij    misc          1     -     i1      "SOILT020"      "LAYER SOIL TEMPERATURE" "K"
+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     -     i012rd=(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     -     i12     "TOPOSLPX"      "ELEVATION X SLOPE"  ""
+state   real   toposlpy            ij    misc          1     -     i12     "TOPOSLPY"      "ELEVATION Y SLOPE"  ""
+state   real   shdmax              ij    misc          1     -     i012r   "SHDMAX"        "ANNUAL MAX VEG FRACTION" ""
+state   real   shdmin              ij    misc          1     -     i012r   "SHDMIN"        "ANNUAL MIN VEG FRACTION" ""
+state   real   snoalb              ij    misc          1     -     i012r   "SNOALB"        "ANNUAL MAX SNOW ALBEDO IN FRACTION" ""
+state   real   slopecat            ij    misc          1     -     i12     "SLOPECAT"      "SLOPE CATEGORY"  ""
+state   real   toposoil            ij    misc          1     -     i12     "SOILHGT"       "ELEVATION OF LSM DATA"  "m"
+state   real   landusef            iuj   misc          1     Z     i012r   "LANDUSEF"      "LANDUSE FRACTION BY CATEGORY"  ""
+state   real   soilctop            isj   misc          1     Z     i012    "SOILCTOP"      "SOIL CAT FRACTION (TOP)"  ""
+state   real   soilcbot            isj   misc          1     Z     i012    "SOILCBOT"      "SOIL CAT FRACTION (BOTTOM)"  ""
+state   real   soilcat             ij    misc          1     -     i12     "SOILCAT"       "SOIL CAT DOMINANT TYPE" ""
+state   real   vegcat              ij    misc          1     -     i12     "VEGCAT"        "VEGETATION CAT DOMINANT TYPE" ""
+
+#---------------------------------------------------------------------------------------------------------------------------------------
+# SI - end variables from netCDF format from Standard Initialization
+#---------------------------------------------------------------------------------------------------------------------------------------
+
+# soil model variables  (Note that they are marked as staggered in the vertical dimension
+# because they are "fully dimensioned" -- they use every element in that dim
+state    real   TSLB           ilj       misc      1         Z     i02rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)           "TSLB"     "SOIL TEMPERATURE"   "K"
+
+# Time series variables
+state    real   ts_hour         ?!       misc      -         -      r        "TS_HOUR"        "Model integration time, hours"
+state    real   ts_u            ?!       misc      -         -      r        "TS_U"           "Surface wind U-component, earth-relative"
+state    real   ts_v            ?!       misc      -         -      r        "TS_V"           "Surface wind V-component, earth-relative"
+state    real   ts_q            ?!       misc      -         -      r        "TS_Q"           "Surface mixing ratio"
+state    real   ts_t            ?!       misc      -         -      r        "TS_T"           "Surface temperature"
+state    real   ts_psfc         ?!       misc      -         -      r        "TS_PSFC"        "Surface pressure"
+state    real   ts_glw          ?!       misc      -         -      r        "TS_GLW"         "Downward long wave flux at surface"
+state    real   ts_gsw          ?!       misc      -         -      r        "TS_GSW"         "Net short wave flux at surface"
+state    real   ts_hfx          ?!       misc      -         -      r        "TS_HFX"         "Upward heat flux at surface"
+state    real   ts_lh           ?!       misc      -         -      r        "TS_LH"          "Upward moisture flux at surface"
+state    real   ts_tsk          ?!       misc      -         -      r        "TS_TSK"         "Skin temperature"
+state    real   ts_tslb         ?!       misc      -         -      r        "TS_TSLB"        "Soil temperature"
+state    real   ts_clw          ?!       misc      -         -      r        "TS_CLW"         "Column integrated cloud water"
+state    real   ts_rainc        ?!       misc      -         -      r        "TS_RAINC"       "Cumulus precip"
+state    real   ts_rainnc       ?!       misc      -         -      r        "TS_RAINNC"      "Grid-scale precip"
+
+# urban model variables
+state    real   DZR             l        em      -            Z     r        "DZR"            "THICKNESSES OF ROOF LAYERS"                      "m"
+state    real   DZB             l        em      -            Z     r        "DZB"            "THICKNESSES OF WALL LAYERS"                      "m"
+state    real   DZG             l        em      -            Z     r        "DZG"            "THICKNESSES OF ROAD LAYERS"                      "m"
+
+# lsm State Variables
+
+state    real   SMOIS            ilj     -          1         Z     i02rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SMOIS"            "SOIL MOISTURE"     "m3 m-3"
+state    real   SH2O             ilj     -          1         Z     i02rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SH2O"             "SOIL LIQUID WATER" "m3 m-3"
+state    real   XICE             ij     misc        1         -     i0124rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)  "SEAICE"             "SEA ICE FLAG"  ""
+state    real   XICEM            ij     misc        1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)  "XICEM"             "SEA ICE FLAG (PREVIOUS STEP)"  ""
+state    real   SMSTAV           ij     misc        1         -      rd=(interp_mask_land_field:lu_index)       "SMSTAV"           "MOISTURE AVAILABILITY" ""
+state    real   SMSTOT           ij     misc        1         -      r                                          "SMSTOT"           "TOTAL SOIL MOISTURE" "m3 m-3"
+
+state    real   SFCRUNOFF        ij     misc        1         -      rd=(interp_mask_land_field:lu_index)      "SFROFF"           "SURFACE RUNOFF"     "mm"
+state    real   UDRUNOFF         ij     misc        1         -      rd=(interp_mask_land_field:lu_index)      "UDROFF"           "UNDERGROUND RUNOFF" "mm"
+state  integer  IVGTYP           ij     misc        1         -     i02rd=(interp_fcni)u=(copy_fcni)            "IVGTYP"           "DOMINANT VEGETATION CATEGORY" ""
+state  integer  ISLTYP           ij     misc        1         -     i02rd=(interp_fcni)u=(copy_fcni)            "ISLTYP"           "DOMINANT SOIL CATEGORY"       ""
+state    real   VEGFRA           ij     misc        1         -     i0124rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)   "VEGFRA"           "VEGETATION FRACTION" ""
+state    real   SFCEVP           ij     misc        1         -      r                                          "SFCEVP"           "SURFACE EVAPORATION" "kg m-2"
+state    real   GRDFLX           ij     misc        1         -      r                                          "GRDFLX"           "GROUND HEAT FLUX" "W m-2"
+state    real   SFCEXC           ij     misc        1         -      r                                          "SFCEXC "          "SURFACE EXCHANGE COEFFICIENT"   "m s-1"
+
+state    real   ACSNOW           ij     misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "ACSNOW"           "ACCUMULATED SNOW"         "kg m-2"
+state    real   ACSNOM           ij     misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "ACSNOM"           "ACCUMULATED MELTED SNOW"  "kg m-2"
+state    real   SNOW             ij     misc        1         -     i012rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SNOW"             "SNOW WATER EQUIVALENT"    "kg m-2"
+state    real   SNOWH            ij     misc        1         -     i012rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SNOWH"            "PHYSICAL SNOW DEPTH"      "m"
+state    real   RHOSN            ij     misc        1         -     i012rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "RHOSN"            " SNOW DENSITY"      "kg m-3" 
+state    real   CANWAT           ij     misc        1         -     i012rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "CANWAT"           "CANOPY WATER"             "kg m-2"
+state    real   SST              ij     misc        1         -     i0124rd=(interp_mask_water_field:lu_index)   "SST"              "SEA SURFACE TEMPERATURE" "K"
+state  integer  IFNDSNOWH        -      misc        1         -     i         "FNDSNOWH" "SNOWH_LOGICAL"
+state  integer  IFNDSOILW        -      misc        1         -     i         "FNDSOILW" "SOILW_LOGICAL"
+
+# DFI variables
+state   real   hcoeff           n    misc        1         -     -    "HCOEFF"               "initialization weights"
+state   real   hcoeff_tot       -    misc        1         -     -    "HCOEFF_TOT"               "initialization weights"
+state   real   dfi_p           ikj   misc        1         -     r    "P_DFI"           "perturbation pressure"         "Pa"
+state   real   dfi_al          ikj   misc        1         -     r    "AL_DFI"          "inverse perturbation density"  "m3 kg-1"
+state   real   dfi_mu          ij    misc        1         -     r    "MU_DFI"  "perturbation dry air mass in column" "Pa"
+state   real   dfi_phb         ikj   misc        1         Z     r    "PHB_DFI"  "base-state geopotential"  "m2 s-2"
+state   real   dfi_ph0         ikj   misc        1         Z     r    "PH0_DFI"  "initial geopotential"     "m2 s-2"
+state   real   dfi_php         ikj   misc        1         Z     r    "PHP_DFI"  "geopotential"             "m2 s-2"
+state   real   dfi_u           ikj   misc        1         -     r    "U_DFI"               "u accumulation array"          "   "
+state   real   dfi_v           ikj   misc        1         -     r    "V_DFI"               "v accumulation array"          "   "
+state   real   dfi_w           ikj   misc        1         -     r    "W_DFI"               "w accumulation array"          "   "
+state   real   dfi_ww          ikj   misc        1         Z     r    "WW_DFI"              "mu-coupled eta-dot"    "Pa s-1"
+state   real   dfi_t           ikj   misc        1         -     r    "TT_DFI"               "t accumulation array"          "   "
+state   real   dfi_ph          ikj   misc        1         -     r    "PH_DFI"               "p accumulation array"          "   "
+state   real   dfi_pb          ikj   misc        1         -     r    "PB_DFI"               "pb accumulation array"          "   "
+state   real   dfi_alt         ikj   misc        1         -     r    "ALT_DFI"             "1/rho accumulation array"          "   "
+state   real   dfi_tke         ikj   misc        1         -     r    "TKE_DFI"          "TURBULENCE KINETIC ENERGY"     "m2 s-2"
+
+state    real  dfi_TSLB        ilj   misc        1         Z     r    "TSLB_dfi"         "SOIL TEMPERATURE"   "K"
+state    real  dfi_SMOIS       ilj    -          1         Z     r    "SMOIS_dfi"        "SOIL MOISTURE"     "m3 m-3"
+state    real  dfi_SNOW        ij    misc        1         -     r    "SNOW_dfi"         "SNOW WATER EQUIVALENT"    "kg m-2"
+state    real  dfi_SNOWH       ij    misc        1         -     r    "SNOWH_dfi"        "PHYSICAL SNOW DEPTH"      "m"
+state    real  dfi_CANWAT      ij    misc        1         -     r    "CANWAT_dfi"       "CANOPY WATER"             "kg m-2"
+state    real  dfi_SMFR3D      ilj   misc        1         Z     r    "SMFR3D_dfi"           "SOIL ICE" ""
+state    real  dfi_KEEPFR3DFLAG ilj  misc        1         Z     r    "KEEPFR3DFLAG_dfi"     "FLAG - 1. FROZEN SOIL YES, 0 - NO"             ""
+
+# urban state variables
+state    real   TR_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TR_URB"              "URBAN ROOF SKIN TEMPERATURE"        "K"
+state    real   TB_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TB_URB"              "URBAN WALL SKIN TEMPERATURE"        "K" 
+state    real   TG_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TG_URB"              "URBAN ROAD SKIN TEMPERATURE"        "K" 
+state    real   TC_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TC_URB"              "URBAN CANOPY TEMPERATURE"           "K"
+state    real   QC_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "QC_URB"              "URBAN CANOPY HUMIDITY"          "kg kg{-1}"
+state    real   UC_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "UC_URB"              "URBAN CANOPY WIND"          "m s{-1}"
+state    real   XXXR_URB2D       ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "XXXR_URB" "M-O LENGTH ABOVE URBAN ROOF"   "dimensionless"
+state    real   XXXB_URB2D       ij    misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "XXXB_URB" "M-O LENGTH ABOVE URBAN WALL"   "dimensionless"
+state    real   XXXG_URB2D       ij    misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "XXXG_URB" "M-O LENGTH ABOVE URBAN ROAD"   "dimensionless"
+state    real   XXXC_URB2D       ij    misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "XXXC_URB" "M-O LENGTH ABOVE URBAN CANOPY" "dimensionless"
+state    real   TRL_URB3D        ilj    misc        1         Z     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "TRL_URB" "ROOF LAYER TEMPERATURE"          "K"
+state    real   TBL_URB3D        ilj    misc        1         Z     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "TBL_URB" "WALL LAYER TEMPERATURE"          "K"
+state    real   TGL_URB3D        ilj    misc        1         Z     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "TGL_URB" "ROAD LAYER TEMPERATURE"          "K"
+state    real   SH_URB2D        ij    misc        1         -     r       "SH_URB"  "SENSIBLE HEAT FLUX FROM URBAN SFC"  "W m{-2}"
+state    real   LH_URB2D        ij    misc        1         -     r       "LH_URB"  "LATENT HEAT FLUX FROM URBAN SFC"    "W m{-2}"
+state    real   G_URB2D         ij    misc        1         -     r        "G_URB"  "GROUND HEAT FLUX INTO URBAN"        "W m{-2}"
+state    real   RN_URB2D        ij    misc        1         -     r       "RN_URB"  "NET RADIATION ON URBAN SFC"         "W m{-2}"
+state    real   TS_URB2D        ij    misc        1         -     r       "TS_URB"  "SKIN TEMPERATURE"          "K"
+state    real   FRC_URB2D       ij    misc        1         -     rd=(interp_fcnm)u=(copy_fcnm)       "FRC_URB"  "URBAN FRACTION"         "dimensionless"
+state    integer   UTYPE_URB2D  ij    misc        1         -     rd=(interp_fcnm)u=(copy_fcnm)       "UTYPE_URB"  "URBAN TYPE"         "dimensionless"
+
+
+# urban variables from radiation model
+state    real   COSZ_URB2D       ij     misc        1         -      r       "COSZ_URB"  "COS of SOLAR ZENITH ANGLE"         "dimensionless"
+state    real   OMG_URB2D        ij     misc        1         -      r       "OMG_URB"   "SOLAR HOUR ANGLE"         "dimensionless"
+state    real   DECLIN_URB       -     misc        1         -       r       "DECLIN_URB"  "SOLAR DECLINATION"         "dimensionless"
+
+
+# RUC LSM
+state    real   SMFR3D           ilj    misc        1         Z      r        "SMFR3D"               "SOIL ICE" ""
+state    real   KEEPFR3DFLAG     ilj    misc        1         Z      r        "KEEPFR3DFLAG"          "FLAG - 1. FROZEN SOIL YES, 0 - NO"             ""
+
+# Additional for P-X PBL and LSM
+state    real   RA               ij     misc        1         -      r        "RA"           "AERODYNAMIC RESISTANCE"   "s m-1"
+state    real   RS               ij     misc        1         -      r        "RS"           "SURFACE RESISTANCE"       "s m-1"
+state    real   LAI              ij     misc        1         -      r        "LAI"          "Leaf area index"          "area/area"
+state    real   VEGF_PX          ij     misc        1         -      r        "VEGF_PX"      "Vegetation Fraction for PX LSM"    "area/area"
+state    real   T2OBS            ij     misc        1         -      r        "T2OBS"        "2-m temperature from analysis "          "K"
+state    real   Q2OBS            ij     misc        1         -      r        "Q2OBS"        "2-m mixing ratio from analysis "         "kg/kg"
+
+# MRF PBL variables
+i1      real   PSIM           ij     misc        1         -     -         "PSIM"                "SIMILARITY FUNCTION FOR MOMENTUM"     ""
+i1      real   PSIH           ij     misc        1         -     -         "PSIH"                "SIMILARITY FUNCTION FOR HEAT"         ""
+i1      real   WSPD           ij     misc        1         -     -         "WSPD"                "Wind speed"                           "m s-1"
+i1      real   GZ1OZ0         ij     misc        1         -     -         "GZ1OZ0"              "LOG OF Z1 over Z0"                     ""
+i1      real   BR             ij     misc        1         -     -         "BR"                  "Bulk Richardson"                       ""
+
+# MYJ PBL variables
+state    real   tke_myj        ikj     misc        1         -      r        "tke_myj"               "TKE FROM MELLOR-YAMADA-JANJIC"      "m2 s-2"
+state    real   EL_MYJ          ikj     misc        1         -     -        "el_myj"                "MIXING LENGTH FROM MELLOR-YAMADA-JANJIC"     "m"
+state    real   EXCH_H          ikj     misc        1         -     r          "EXCH_H"               "EXCHANGE COEFFICIENTS "
+state    real  CT              ij      misc        1         -      r        "CT"                    "COUNTERGRADIENT TERM"    "K"
+state   real   THZ0             ij     misc        1         -      r        "THZ0"                  "POTENTIAL TEMPERATURE AT ZNT"                 "K"
+state    real  Z0               ij     misc        1         -      r        "Z0"                    "Background ROUGHNESS LENGTH"                  "m"
+state   real   QZ0              ij     misc        1         -      r        "QZ0"                   "SPECIFIC HUMIDITY AT ZNT"                     "kg kg-1"
+state   real   UZ0              ij     misc        1         -      r        "UZ0"                   "U WIND COMPONENT AT ZNT"                      "m s-1"
+state   real   VZ0              ij     misc        1         -      r        "VZ0"                   "V WIND COMPONENT AT ZNT"                      "m s-1"
+state   real   QSFC             ij     misc        1         -      r        "QSFC"                  "SPECIFIC HUMIDITY AT LOWER BOUNDARY"          "kg kg-1"
+state   real   AKHS             ij     misc        1         -      r        "AKHS"                  "SFC EXCH COEFF FOR HEAT"                      "m s-1"    
+state   real   AKMS             ij     misc        1         -      r        "AKMS"                  "SFC EXCH COEFF FOR MOMENTUM"                  "m s-1"    
+state   integer KPBL            ij     misc        1         -     r         "KPBL"                  "LEVEL OF PBL TOP"                             ""
+state   real   TSHLTR           ij     misc        1         -     ir        "TSHLTR"                "SHELTER THETA FROM MYJ"                       "K"
+state   real   QSHLTR           ij     misc        1         -     ir        "QSHLTR"                "SHELTER SPECIFIC HUMIDITY FROM MYJ"           "kg kg-1"
+state   real   PSHLTR           ij     misc        1         -     ir        "PSHLTR"                "SHELTER PRESSURE FROM MYJ"           "Pa"
+state   real   TH10             ij     misc        1         -     ir        "TH10"                  "10-M THETA FROM MYJ"                          "K"
+state   real   Q10              ij     misc        1         -     ir        "Q10"                   "10-M SPECIFIC HUMIDITY FROM MYJ"              "kg kg-1"
+i1      real   CHKLOWQ          ij     misc        1         -     -         "CHKLOWQ"               "SURFACE SATURATION FLAG"        ""
+
+# gfdl (eta) radiation State Variables
+state    real    HTOP            ij     misc        1         -      r        "HTOP"                 "TOP OF CONVECTION LEVEL"         ""
+state    real    HBOT            ij     misc        1         -      r        "HBOT"                 "BOT OF CONVECTION LEVEL"         ""
+state    real    HTOPR           ij     misc        1         -      r        "HTOPR"                "TOP OF CONVECTION LEVEL FOR RADIATION"    ""
+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   rswtoa    ij    misc        1    -    i
+state  real   rlwtoa    ij    misc        1    -    i
+state  real   czmean    ij    misc      1    -     i
+state  real   cfracl    ij    misc      1    -     i
+state  real   cfracm    ij    misc      1    -     i
+state  real   cfrach    ij    misc      1    -     i
+state  real   acfrst    ij    misc        1    -    i
+state integer ncfrst    ij    misc        1    -    i
+state  real   acfrcv    ij    misc        1    -    i
+state integer ncfrcv    ij    misc        1    -    i
+
+# cam radiation variables
+state  real    -       iqjf ozmixm      1    -   -     -
+state  real   mth01    iqjf ozmixm      1    -   -     -
+state  real   mth02    iqjf ozmixm      1    -   -     -
+state  real   mth03    iqjf ozmixm      1    -   -     -
+state  real   mth04    iqjf ozmixm      1    -   -     -
+state  real   mth05    iqjf ozmixm      1    -   -     -
+state  real   mth06    iqjf ozmixm      1    -   -     -
+state  real   mth07    iqjf ozmixm      1    -   -     -
+state  real   mth08    iqjf ozmixm      1    -   -     -
+state  real   mth09    iqjf ozmixm      1    -   -     -
+state  real   mth10    iqjf ozmixm      1    -   -     -
+state  real   mth11    iqjf ozmixm      1    -   -     -
+state  real   mth12    iqjf ozmixm      1    -   -     -
+state  real   pin       q     misc      1    -   -      "PIN"             "PRESSURE LEVEL OF OZONE MIXING RATIO"  "millibar"
+state  real   m_ps       ij   misc      2    -   -      "m_ps"            "PS from MATCH on WRF grids"
+state  real    -       idjf aerosolc    2    -   -       -
+state  real   SUL      idjf aerosolc    2    -   -     "SUL"        "SUL aerosol concentration"
+state  real   SSLT     idjf aerosolc    2    -   -     "SSLT"        "SSLT aerosol concentration"
+state  real   DUST1    idjf aerosolc    2    -   -     "DUST1"        "DUST1 aerosol concentration"
+state  real   DUST2    idjf aerosolc    2    -   -     "DUST2"        "DUST2 aerosol concentration"
+state  real   DUST3    idjf aerosolc    2    -   -     "DUST3"        "DUST3 aerosol concentration"
+state  real   DUST4    idjf aerosolc    2    -   -     "DUST4"        "DUST4 aerosol concentration"
+state  real   OCPHO    idjf aerosolc    2    -   -     "OCPHO"        "OCPHO aerosol concentration"
+state  real   BCPHO    idjf aerosolc    2    -   -     "BCPHO"        "BCPHO aerosol concentration"
+state  real   OCPHI    idjf aerosolc    2    -   -     "OCPHI"        "OCPHI aerosol concentration"
+state  real   BCPHI    idjf aerosolc    2    -   -     "BCPHI"        "BCPHI aerosol concentration"
+state  real   BG       idjf aerosolc    2    -   -     "BG"        "BG aerosol concentration"
+state  real   VOLC     idjf aerosolc    2    -   -     "VOLC"        "VOLC aerosol concentration"
+state  real   m_hybi    d     misc      1    -   -     "m_hybi"         "MATCH hybi"
+
+# new eta microphpysics State Variables
+state    real    F_ICE_PHY       ikj    misc        1         -      rdu      "F_ICE_PHY"            "FRACTION OF ICE"         ""
+state    real    F_RAIN_PHY      ikj    misc        1         -      rdu      "F_RAIN_PHY"           "FRACTION OF RAIN "         ""
+state    real    F_RIMEF_PHY     ikj    misc        1         -      rdu      "F_RIMEF_PHY"          "MASS RATIO OF RIMED ICE "         ""
+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"            "PREVIOUS TIMESTEP CONDENSATIONAL HEATING"         "K s-1"      
+state   real    msft           ij      misc         1         -     i012rdu=(copy_fcnm)    "MAPFAC_M"         "Map scale factor on mass grid" ""
+state   real    msfu           ij      misc         1         X     i012rdu=(copy_fcnm)    "MAPFAC_U"         "Map scale factor on u-grid" ""
+state   real    msfv           ij      misc         1         Y     i012rdu=(copy_fcnm)    "MAPFAC_V"         "Map scale factor on v-grid" ""
+state   real    msftx          ij      misc         1         -     i012rdu=(copy_fcnm)    "MAPFAC_MX"         "Map scale factor on mass grid, x direction" ""
+state   real    msfty          ij      misc         1         -     i012rdu=(copy_fcnm)    "MAPFAC_MY"         "Map scale factor on mass grid, y direction" ""
+state   real    msfux          ij      misc         1         X     i012rdu=(copy_fcnm)    "MAPFAC_UX"         "Map scale factor on u-grid, x direction" ""
+state   real    msfuy          ij      misc         1         X     i012rdu=(copy_fcnm)    "MAPFAC_UY"         "Map scale factor on u-grid, y direction" ""
+state   real    msfvx          ij      misc         1         Y     i012rdu=(copy_fcnm)    "MAPFAC_VX"         "Map scale factor on v-grid, x direction" ""
+state   real    msfvx_inv      ij      misc         1         Y     i012rdu=(copy_fcnm)    "MF_VX_INV"         "Inverse map scale factor on v-grid, x direction" ""
+state   real    msfvy          ij      misc         1         Y     i012rdu=(copy_fcnm)    "MAPFAC_VY"         "Map scale factor on v-grid, y direction" ""
+
+state   real    f              ij      misc         1         -     i012rdu=(copy_fcnm)    "f"                "Coriolis sine latitude term"  "s-1"
+state   real    e              ij      misc         1         -     i012rdu=(copy_fcnm)    "e"                "Coriolis cosine latitude term"  "s-1"
+state   real    sina           ij      misc         1         -     i012rdu=(copy_fcnm)    "SINALPHA"         "Local sine of map rotation"   ""
+state   real    cosa           ij      misc         1         -     i012rdu=(copy_fcnm)    "COSALPHA"         "Local cosine of map rotation"  ""
+state   real    ht             ij      misc         1         -     i012rdus  "HGT"              "Terrain Height"   "m"
+state   real    ht_fine        ij      misc         1         -     -          "HGT_FINE"         "Fine Terrain Height"   "m"
+state   real    ht_int         ij      misc         1         -     -          "HGT_INT"          "Terrain Height Horizontally Interpolated"   "m"
+state   real    ht_input       ij      misc         1         -     -          "HGT_INPUT"        "Terrain Height from FG Input File"   "m"
+state   real    ht_shad        ijb     misc         1         -     df=(bdy_interp:dt)         "HGT_SHAD"        "Height of orographic shadow"   "m"
+i1      real    ht_loc         ij      misc         1         -     - 
+i1      integer  shadowmask    ij      misc         1         -     - 
+state   integer min_ptchsz     -       misc         1         -     r
+
+state   real    TSK            ij      misc         1         -     i012rdu=(copy_fcnm)    "TSK"                   "SURFACE SKIN TEMPERATURE"                  "K"
+state   real    dfi_TSK        ij      misc         1         -     r                       "TSK_dfi"               "saved SURFACE SKIN TEMPERATURE"
+state   real    TSK_SAVE       ij      misc         1         -     -         "TSK_SAVE" "SURFACE SKIN TEMPERATURE, EXTRA COPY FOR SEA ICE TESTS in REAL"       "K"
+state   real    u_base         k       misc         1         -     ir        "u_base"                "BASE STATE X WIND IN IDEALIZED CASES"         ""      
+state   real    v_base         k       misc         1         -     ir        "v_base"                "BASE STATE Y WIND IN IDEALIZED CASES"         ""      
+state   real    qv_base        k       misc         1         -     ir        "qv_base"               "BASE STATE QV IN IDEALIZED CASES"         ""      
+state   real    z_base         k       misc         1         -     ir        "z_base"                "BASE STATE HEIGHT IN IDEALIZED CASES"         ""      
+state   real    u_frame        -       misc         1         -     ir        "u_frame"               "FRAME X WIND"         "m s-1"      
+state   real    v_frame        -       misc         1         -     ir        "v_frame"               "FRAME Y WIND"         "m s-1"      
+# p_top appears as metadata between SI and real but as a state variable in real and WRF
+# since it is a scalar and a constant, it makes sense to have it as metadata -- there
+# are, however, probably post-processing programs that expect to see it as an I/O record
+# another problem: share/input_wrf tries to read this as metadata (fine for real reading
+# SI, but with model reading real output, it generates a warning when debug is > 0 in
+# namelist and causes repeated questions from users.  A third problem is the potential
+# collision between a metadata name and a field record in the I/O data
+# resolve this how?  Have the real program throw a switch to tell the code to get it
+# from the metadata?  Otherwise it's a field?
+state   real    p_top          -       misc         -         -     ir       "p_top"                 "PRESSURE TOP OF THE MODEL"  "Pa"
+state   real    max_msftx      -       misc         -         -      r       "max_mstfx"             "Max map factor in domain"  ""
+state   real    max_msfty      -       misc         -         -      r       "max_mstfy"             "Max map factor in domain"  ""
+                                                
+# Other physics variables
+                                                
+state    real  RTHCUTEN        ikj      misc        1         -      r        "RTHCUTEN"              "COUPLED THETA TENDENCY DUE TO CUMULUS SCHEME"     "Pa K s-1"
+state    real  RQVCUTEN        ikj      misc        1         -      r        "RQVCUTEN"              "COUPLED Q_V TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+state    real  RQRCUTEN        ikj      misc        1         -      r        "RQRCUTEN"              "COUPLED Q_R TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+state    real  RQCCUTEN        ikj      misc        1         -      r        "RQCCUTEN"              "COUPLED Q_C TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+state    real  RQSCUTEN        ikj      misc        1         -      r        "RQSCUTEN"              "COUPLED Q_S TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+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         -      rdu     "RAINC"                 "ACCUMULATED TOTAL CUMULUS PRECIPITATION"                 "mm"      
+state    real  RAINNC           ij      misc        1         -      rdu     "RAINNC"                "ACCUMULATED TOTAL GRID SCALE PRECIPITATION"              "mm"      
+state    real  PRATEC           ij      misc        1         -      r       "PRATEC"                "PRECIP RATE FROM CUMULUS SCHEME"                         "mm s-1"
+state    real  RAINCV           ij      misc        1         -      r       "RAINCV"                "TIME-STEP 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  SNOWNC           ij      misc        1         -      rdu     "SNOWNC"                "ACCUMULATED TOTAL GRID SCALE SNOW AND ICE"               "mm"
+state    real  GRAUPELNC        ij      misc        1         -      rdu     "GRAUPELNC"             "ACCUMULATED TOTAL GRID SCALE GRAUPEL"                    "mm"
+state    real  SNOWNCV          ij      misc        1         -      r        "SNOWNCV"               "TIME-STEP NONCONVECTIVE SNOW AND ICE"                    "mm"
+state    real  GRAUPELNCV       ij      misc        1         -      r        "GRAUPELNCV"            "TIME-STEP NONCONVECTIVE GRAUPEL"                      "mm"
+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"
+state    real  apr_w            ij      misc        1         -      r       "APR_W"                 "PRECIP FROM CLOSURE W"           "mm hour-1"
+state    real  apr_mc           ij      misc        1         -      r       "APR_MC"                "PRECIP FROM CLOSURE KRISH MV"    "mm hour-1"
+state    real  apr_st           ij      misc        1         -      r       "APR_ST"                "PRECIP FROM CLOSURE STABILITY"   "mm hour-1"
+state    real  apr_as           ij      misc        1         -      r       "APR_AS"                "PRECIP FROM CLOSURE AS-TYPE"     "mm hour-1"
+state    real  apr_capma        ij      misc        1         -      r       "APR_CAPMA"             "PRECIP FROM MAX CAP"             "mm hour-1"
+state    real  apr_capme        ij      misc        1         -      r       "APR_CAPME"             "PRECIP FROM MEAN CAP"            "mm hour-1"
+state    real  apr_capmi        ij      misc        1         -      r       "APR_CAPMI"             "PRECIP FROM MIN CAP"             "mm hour-1"
+state    real  edt_out          ij      misc        1         -      -        "EDT_OUT"             "EDT FROM GD SCHEME"             ""
+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         -      h        "CUGD_TTEN"             "INITIAL TTENDENCY OUT OFF GRELL CUMULUS SCHEME"  "K s-1"
+state    real  cugd_qvten       ikj     misc        1         -      h        "CUGD_QVTEN"            "INITIAL QTENDENCY OUT OFF GRELL CUMULUS SCHEME"  "K s-1"
+state    real  cugd_ttens       ikj     misc        1         -      h        "CUGD_TTENS"            "INITIAL SUBSIDENCE TTENDENCY OUT OFF GRELL CUMULUS SCHEME"  "K s-1"
+state    real  cugd_qvtens      ikj     misc        1         -      h        "CUGD_QVTENS"           "INITIAL SUBSIDNCE QTENDENCY OUT OFF GRELL CUMULUS SCHEME"  "K s-1"
+state    real  cugd_qcten       ikj     misc        1         -      h        "CUGD_QCTEN"            "INITIAL TEMPERATURE TENDENCY OUT OFF GRELL CUMULUS SCHEME"  "K s-1"
+#state    real  ACLWUPTC         ij      misc       1         -      rhdu     "ACLWUPTC"              "ACCUMULATED UPWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+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"
+
+state integer  STEPCU          -        misc        1         -      r        "STEPCU"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN CONVECTION CALLS"  ""
+                                                
+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  SWDOWN           ij      misc        1         -      rd      "SWDOWN"                "DOWNWARD SHORT WAVE FLUX AT GROUND SURFACE"           "W m-2"      
+state    real  SWDOWNC          ij      misc        1         -      -        "SWDOWNC"               "DOWNWARD CLEAR-SKY SHORT WAVE FLUX AT GROUND SURFACE"           "W m-2"      
+state    real  GSW              ij      misc        1         -      rd       "GSW"                   "NET SHORT WAVE FLUX AT GROUND SURFACE"           "W m-2"      
+state    real  GLW              ij      misc        1         -      rd      "GLW"                   "DOWNWARD LONG WAVE FLUX AT GROUND SURFACE"            "W m-2"      
+
+# 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"
+#state    real  ACSWDNT          ij      misc        1         -      rhdu     "ACSWDNT"               "ACCUMULATED DOWNWELLING SHORTWAVE FLUX AT TOP"          "J m-2"
+#state    real  ACSWDNTC         ij      misc        1         -      rhdu     "ACSWDNTC"              "ACCUMULATED DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2"
+#state    real  ACSWUPB          ij      misc        1         -      rhdu     "ACSWUPB"               "ACCUMULATED UPWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACSWUPBC         ij      misc        1         -      rhdu     "ACSWUPBC"              "ACCUMULATED UPWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  ACSWDNB          ij      misc        1         -      rhdu     "ACSWDNB"               "ACCUMULATED DOWNWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACSWDNBC         ij      misc        1         -      rhdu     "ACSWDNBC"              "ACCUMULATED DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  ACLWUPT          ij      misc        1         -      rhdu     "ACLWUPT"               "ACCUMULATED UPWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  ACLWUPTC         ij      misc        1         -      rhdu     "ACLWUPTC"              "ACCUMULATED UPWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  ACLWDNT          ij      misc        1         -      rhdu     "ACLWDNT"               "ACCUMULATED DOWNWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  ACLWDNTC         ij      misc        1         -      rhdu     "ACLWDNTC"              "ACCUMULATED DOWNWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  ACLWUPB          ij      misc        1         -      rhdu     "ACLWUPB"               "ACCUMULATED UPWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACLWUPBC         ij      misc        1         -      rhdu     "ACLWUPBC"              "ACCUMULATED UPWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  ACLWDNB          ij      misc        1         -      rhdu     "ACLWDNB"               "ACCUMULATED DOWNWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACLWDNBC         ij      misc        1         -      rhdu     "ACLWDNBC"              "ACCUMULATED DOWNWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  SWUPT            ij      misc        1         -      rhdu     "SWUPT"                 "INSTANTANEOUS UPWELLING SHORTWAVE FLUX AT TOP"          "J m-2"
+#state    real  SWUPTC           ij      misc        1         -      rhdu     "SWUPTC"                "INSTANTANEOUS UPWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2"
+#state    real  SWDNT            ij      misc        1         -      rhdu     "SWDNT"                 "INSTANTANEOUS DOWNWELLING SHORTWAVE FLUX AT TOP"          "J m-2"
+#state    real  SWDNTC           ij      misc        1         -      rhdu     "SWDNTC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2"
+#state    real  SWUPB            ij      misc        1         -      rhdu     "SWUPB"                 "INSTANTANEOUS UPWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  SWUPBC           ij      misc        1         -      rhdu     "SWUPBC"                "INSTANTANEOUS UPWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  SWDNB            ij      misc        1         -      rhdu     "SWDNB"                 "INSTANTANEOUS DOWNWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  SWDNBC           ij      misc        1         -      rhdu     "SWDNBC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  LWUPT            ij      misc        1         -      rhdu     "LWUPT"                 "INSTANTANEOUS UPWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  LWUPTC           ij      misc        1         -      rhdu     "LWUPTC"                "INSTANTANEOUS UPWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  LWDNT            ij      misc        1         -      rhdu     "LWDNT"                 "INSTANTANEOUS DOWNWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  LWDNTC           ij      misc        1         -      rhdu     "LWDNTC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  LWUPB            ij      misc        1         -      rhdu     "LWUPB"                 "INSTANTANEOUS UPWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  LWUPBC           ij      misc        1         -      rhdu     "LWUPBC"                "INSTANTANEOUS UPWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  LWDNB            ij      misc        1         -      rhdu     "LWDNB"                 "INSTANTANEOUS DOWNWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  LWDNBC           ij      misc        1         -      rhdu     "LWDNBC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+
+state    real  SWCF             ij      misc        1         -      r         "SWCF"                  "SHORT WAVE CLOUD FORCING AT TOA"                     "W m-2"
+state    real  LWCF             ij      misc        1         -      r         "LWCF"                  "LONG WAVE CLOUD FORCING AT TOA"                      "W m-2"
+state    real  OLR              ij      misc        1         -      r        "OLR"                   "TOA OUTGOING LONG WAVE"                              "W m-2"
+
+# these next 2 are for the HFSoLE/PET demo; writing these to auxhist1 output over MCEL for coupling
+# with wave model, only if compiled with -DMCELIO, JM 2003/05/29
+state    real  XLAT             ij      misc        1         -     i0123r01du=(copy_fcnm)      "XLAT"                "LATITUDE, SOUTH IS NEGATIVE"                                          "degree_north"
+state    real  XLONG            ij      misc        1         -     i0123r01du=(copy_fcnm)      "XLONG"               "LONGITUDE, WEST IS NEGATIVE"                                          "degree_east"
+state    real  XLAT_U           ij      dyn_em      1         X     i012r01du=(copy_fcnm)       "XLAT_U"              "LATITUDE, SOUTH IS NEGATIVE"                                          "degree_north"
+state    real  XLONG_U          ij      dyn_em      1         X     i012r01du=(copy_fcnm)       "XLONG_U"             "LONGITUDE, WEST IS NEGATIVE"                                          "degree_east"
+state    real  XLAT_V           ij      dyn_em      1         Y     i012r01du=(copy_fcnm)       "XLAT_V"              "LATITUDE, SOUTH IS NEGATIVE"                                          "degree_north"
+state    real  XLONG_V          ij      dyn_em      1         Y     i012r01du=(copy_fcnm)       "XLONG_V"             "LONGITUDE, WEST IS NEGATIVE"                                          "degree_east"
+state    real  ALBEDO           ij      misc        1         -      r          "ALBEDO"                   "ALBEDO"
+state    real  CLAT             ij      misc        1         -     i012rdu=(copy_fcnm)          "CLAT"                "COMPUTATIONAL GRID LATITUDE, SOUTH IS NEGATIVE"                       "degree_north"
+state    real  CLONG            ij      misc        1         -     i012rdu=(copy_fcnm)          "CLONG"               "COMPUTATIONAL GRID LONGITUDE, WEST IS NEGATIVE"                       "degree_east"
+state    real  ALBBCK           ij      misc        1         -     i0124r   "ALBBCK"                "BACKGROUND ALBEDO"        ""
+state    real  EMBCK            ij      misc        1         -      r        "EMBCK"                 "BACKGROUND EMISSIVITY"         ""
+state    real  EMISS            ij      misc        1         -      r       "EMISS"                 "SURFACE EMISSIVITY"         "" 
+
+state    real  CLDEFI           ij      misc        1         -      r        "CLDEFI"                "precipitation efficiency in BMJ SCHEME"    ""      
+state integer  STEPRA          -        misc        1         -      r        "STEPRA"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN RADIATION CALLS"        ""
+                                                
+state    real  RUBLTEN         ikj      misc        1         -      r        "RUBLTEN"               "COUPLED X WIND TENDENCY DUE TO PBL PARAMETERIZATION"  "Pa m s-2"
+state    real  RVBLTEN         ikj      misc        1         -      r        "RVBLTEN"               "COUPLED Y WIND TENDENCY DUE TO PBL PARAMETERIZATION"  "Pa m s-2"
+state    real  RTHBLTEN        ikj      misc        1         -      r        "RTHBLTEN"              "COUPLED THETA TENDENCY DUE TO PBL PARAMETERIZATION"   "Pa K s-1"
+state    real  RQVBLTEN        ikj      misc        1         -      r        "RQVBLTEN"              "COUPLED Q_V TENDENCY DUE TO PBL PARAMETERIZATION"     "Pa kg kg-1 s-1"
+state    real  RQCBLTEN        ikj      misc        1         -      r        "RQCBLTEN"              "COUPLED Q_C TENDENCY DUE TO PBL PARAMETERIZATION"     "Pa kg kg-1 s-1"
+state    real  RQIBLTEN        ikj      misc        1         -      r        "RQIBLTEN"              "COUPLED Q_I TENDENCY DUE TO PBL PARAMETERIZATION"     "Pa kg kg-1 s-1"      
+
+# State vector for etampnew microphysics. Must be declared state because it is not read-once and is needed for restarting.
+state    real  mp_restart_state   p      misc        1         -      r       "MP_RESTART_STATE"       "STATE VECTOR FOR MICROPHYSICS RESTARTS"
+state    real  tbpvs_state        p      misc        1         -      r        "TBPVS_STATE"           "STATE FOR ETAMPNEW MICROPHYSICS"
+state    real  tbpvs0_state       p      misc        1         -      r        "TBPVS0_STATE"          "STATE FOR ETAMPNEW MICROPHYSICS"
+
+# State variables for landuse_init, Must be declared state because they are read in and needed for restarts. Had been SAVE vars in
+# landuse_init (phys/module_physics_init.F)
+state    integer  landuse_isice   -      misc       -          -     r
+state    integer  landuse_lucats  -      misc       -          -     r
+state    integer  landuse_luseas  -      misc       -          -     r
+state    integer  landuse_isn     -      misc       -          -     r
+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         -                                          
+i1       real  t_phy           ikj      misc        1         -                                          
+i1       real  u_phy           ikj      misc        1         -                                          
+i1       real  v_phy           ikj      misc        1         -                                          
+i1       real  dz8w            ikj      misc        1         Z                                          
+i1       real  p8w             ikj      misc        1         Z                                          
+i1       real  t8w             ikj      misc        1         Z                                          
+i1       real  rho_phy         ikj      misc        1         -                                          
+i1    logical  CU_ACT_FLAG     ij       misc        1         -
+
+                                                
+state    real  TMN              ij      misc        1         -     i012rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TMN"                   "SOIL TEMPERATURE AT LOWER BOUNDARY"           "K"
+state    real  XLAND            ij      misc        1         -     i02rd=(interp_fcnm)u=(copy_fcnm)       "XLAND"                 "LAND MASK (1 FOR LAND, 2 FOR WATER)"          ""      
+state    real  ZNT              ij      misc        1         -      i3r      "ZNT"                   "TIME-VARYING ROUGHNESS LENGTH"                "m"      
+state    real  CK               ij      misc        1         -      r        "CK"                    "ENTHALPY EXCHANGE COEFF AT 10 m"                      ""
+state    real  CKA              ij      misc        1         -      r        "CKA"                   "ENTHALPY EXCHANGE COEFF AT LOWEST MODEL LVL"          ""
+state    real  CD               ij      misc        1         -      r        "CD"                    "DRAG COEFF AT 10m"                      ""
+state    real  CDA              ij      misc        1         -      r        "CDA"                   "DRAG COEFF AT LOWEST MODEL LVL"                      ""
+state    real  UST              ij      misc        1         -      r        "UST"                   "U* IN SIMILARITY THEORY"                      "m s-1"    
+state    real  USTM             ij      misc        1         -      rh       "USTM"                  "U* IN SIMILARITY THEORY WITHOUT VCONV"        "m s-1"    #SAVEMARS2 ust
+i1       real  HOL              ij      misc        1         -      -        "HOL"                   "PBL HEIGHT OVER MONIN-OBUKHOV LENGTH"         ""
+state    real  RMOL             ij      misc        1         -      r        "RMOL"                  "1./Monin Ob. Length"                      ""
+state    real  MOL              ij      misc        1         -      r        "MOL"                   "T* IN SIMILARITY THEORY"                      "K"      
+state    real  PBLH             ij      misc        1         -      r       "PBLH"                  "PBL HEIGHT"         "m"      
+state    real  CAPG             ij      misc        1         -      r        "CAPG"                  "HEAT CAPACITY FOR SOIL"                       "J K-1 m-3"      
+state    real  THC              ij      misc        1         -      r        "THC"                   "THERMAL INERTIA"                              "Cal cm-1 K-1 s-0.5"      
+state    real  HFX              ij      misc        1         -      rh       "HFX"                   "UPWARD HEAT FLUX AT THE SURFACE"              "W m-2"     #SAVEMARS2 hfx
+state    real  QFX              ij      misc        1         -      r       "QFX"                   "UPWARD MOISTURE FLUX AT THE SURFACE"          "kg m-2 s-1"      
+state    real  LH               ij      misc        1         -      r       "LH"                    "LATENT HEAT FLUX AT THE SURFACE"              "W m-2"
+state    real  FLHC             ij      misc        1         -      r        "FLHC"                  "SURFACE EXCHANGE COEFFICIENT FOR HEAT"       ""
+state    real  FLQC             ij      misc        1         -      r        "FLQC"                  "SURFACE EXCHANGE COEFFICIENT FOR MOISTURE"   ""
+state    real  QSG              ij      misc        1         -      r        "QSG"                   "SURFACE SATURATION WATER VAPOR MIXING RATIO"   "kg kg-1"
+state    real  QVG              ij      misc        1         -      r        "QVG"                   "WATER VAPOR MIXING RATIO AT THE SURFACE"      "kg kg-1"
+state    real  dfi_QVG          ij      misc        1         -      r        "QVG_dfi"               "WATER VAPOR MIXING RATIO AT THE SURFACE"      "kg kg-1"
+state    real  QCG              ij      misc        1         -      r        "QCG"                   "CLOUD WATER MIXING RATIO AT THE SURFACE"      "kg kg-1"
+state    real  SOILT1           ij      misc        1         -      r        "SOILT1"                "TEMPERATURE INSIDE SNOW "    "K"
+state    real  dfi_SOILT1       ij      misc        1         -      r        "SOILT1_dfi"            "TEMPERATURE INSIDE SNOW "    "K"
+state    real  TSNAV            ij      misc        1         -      r        "TSNAV"                 "AVERAGE SNOW TEMPERATURE "                    "C"
+state    real  dfi_TSNAV        ij      misc        1         -      r        "TSNAV_dfi"             "AVERAGE SNOW TEMPERATURE "                    "C"
+state    real  REGIME           ij      misc        1         -      r        "REGIME"  "FLAGS: 1=Night/Stable, 2=Mechanical Turbulent, 3=Forced Conv, 4=Free Conv" ""
+state    real  SNOWC            ij      misc        1         -     ird=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "SNOWC"                 "FLAG INDICATING SNOW COVERAGE (1 FOR SNOW COVER)"         ""
+state    real  dfi_SNOWC        ij      misc        1         -      r        "SNOWC_dfi"             "FLAG INDICATING SNOW COVERAGE (1 FOR SNOW COVER)"         ""
+state    real  MAVAIL           ij      misc        1         -      r        "MAVAIL"                "SURFACE MOISTURE AVAILABILITY"                ""
+                                                
+state   real   tkesfcf          ij      misc        1         -      r        "tkesfcf"               "TKE AT THE SURFACE"                           "m2 s-2"      
+                                                
+state integer  STEPBL          -        misc        1         -      r        "STEPBL"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN PBL CALLS" ""      
+state    real  taucldi         ikj      misc        1         -      r        "TAUCLDI"               "CLOUD OPTICAL THICKNESS FOR ICE"              ""
+state    real  taucldc         ikj      misc        1         -      r        "TAUCLDC"               "CLOUD OPTICAL THICKNESS FOR WATER"            ""
+                                                
+state   real  defor11          ikj      misc        1         -     r         "defor11"               "DEFORMATION 11"              "s-1"      
+state   real  defor22          ikj      misc        1         -     r         "defor22"               "DEFORMATION 22"              "s-1"      
+state   real  defor12          ikj      misc        1         -     r         "defor12"               "DEFORMATION 12"              "s-1"      
+state   real  defor33          ikj      misc        1         z     r         "defor33"               "DEFORMATION 33"              "s-1"      
+state   real  defor13          ikj      misc        1         z     r         "defor13"               "DEFORMATION 13"              "s-1"      
+state   real  defor23          ikj      misc        1         z     r         "defor23"               "DEFORMATION 23"              "s-1"      
+state   real   xkmv            ikj      misc        1         -     r         "xkmv"                  "VERTICAL EDDY VISCOSITY"     "m2 s-1"      
+state   real   xkmh            ikj      misc        1         -     r         "xkmh"                  "HORIZONTAL EDDY VISCOSITY"   "m2 s-1"      
+state   real   xkhv            ikj      misc        1         -     r         "xkhv"                  "VERTICAL EDDY DIFFUSIVITY OF HEAT"                               "m2 s-1"      
+state   real   xkhh            ikj      misc        1         -     r         "xkhh"                  "HORIZONTAL EDDY DIFFUSIVITY OF HEAT"                             "m2 s-1"      
+state   real    div            ikj      misc        1         -     r         "div"                   "DIVERGENCE"                                                      "s-1"
+state   real    BN2            ikj      misc        1         -     r         "BN2"                   "BRUNT-VAISALA FREQUENCY"                                         "s-2"
+state  logical warm_rain        -       misc        1         -     -         "warm_rain"              "WARM_RAIN_LOGICAL"
+state  logical adv_moist_cond   -       misc        1         -     -         "adv_moist_cond"         "ADVECT MOIST CONDENSATES LOGICAL"
+
+## FDDA variables
+
+state integer  STEPFG            -        misc        1         -      r        "STEPFG"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN FDDA GRID CALLS" ""
+state    real  RUNDGDTEN         ikj      misc        1         X      r        "RUNDGDTEN"               "COUPLED X WIND TENDENCY DUE TO FDDA GRID NUDGING"  "Pa m s-2"
+state    real  RVNDGDTEN         ikj      misc        1         Y      r        "RVNDGDTEN"               "COUPLED Y WIND TENDENCY DUE TO FDDA GRID NUDGING"  "Pa m s-2"
+state    real  RTHNDGDTEN        ikj      misc        1         -      r        "RTHNDGDTEN"              "COUPLED THETA TENDENCY DUE TO FDDA GRID NUDGING"   "Pa K s-1"
+state    real  RQVNDGDTEN        ikj      misc        1         -      r        "RQVNDGDTEN"              "COUPLED Q_V TENDENCY DUE TO FDDA GRID NUDGING"     "Pa kg kg-1 s-1"
+state    real  RMUNDGDTEN        ij       misc        1         -      r        "RMUNDGDTEN"              "MU TENDENCY DUE TO FDDA GRID NUDGING"     "Pa s-1"
+state    real    -               ikjf     fdda3d      1         -     -    -
+state    real  U_NDG_NEW         ikjf     fdda3d      1         X      igr      "U_NDG_NEW"               "NEW X WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  V_NDG_NEW         ikjf     fdda3d      1         Y      igr      "V_NDG_NEW"               "NEW Y WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  T_NDG_NEW         ikjf     fdda3d      1         -      igr      "T_NDG_NEW"               "NEW PERT POT TEMP FOR FDDA GRID NUDGING"  "K"
+state    real  Q_NDG_NEW         ikjf     fdda3d      1         -      igr      "Q_NDG_NEW"               "NEW WATER VAPOR MIX RATIO FOR FDDA GRID NUDGING"  "kg/kg"
+state    real  PH_NDG_NEW        ikjf     fdda3d      1         Z      igr      "PH_NDG_NEW"              "NEW PERT GEOPOTENTIAL FOR FDDA GRID NUDGING"  "kg/kg"
+state    real  U_NDG_OLD         ikjf     fdda3d      1         X      igr      "U_NDG_OLD"               "OLD X WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  V_NDG_OLD         ikjf     fdda3d      1         Y      igr      "V_NDG_OLD"               "OLD Y WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  T_NDG_OLD         ikjf     fdda3d      1         -      igr      "T_NDG_OLD"               "OLD PERT POT TEMP FOR FDDA GRID NUDGING"  "K"
+state    real  Q_NDG_OLD         ikjf     fdda3d      1         -      igr      "Q_NDG_OLD"               "OLD WATER VAPOR MIX RATIO FOR FDDA GRID NUDGING"  "kg/kg"
+state    real  PH_NDG_OLD        ikjf     fdda3d      1         Z      igr      "PH_NDG_OLD"              "OLD PERT GEOPOTENTIAL FOR FDDA GRID NUDGING"  "kg/kg"
+state    real    -               ivjf     fdda2d      1         Z     -    -
+state    real  MU_NDG_NEW        ivjf     fdda2d      1         Z      igr      "MU_NDG_NEW"              "NEW PERT COLUMN DRY MASS FOR FDDA GRID NUDGING"  "Pa"
+state    real  T2_NDG_NEW        ivjf     fdda2d      1         -      igr      "T2_NDG_NEW"               "NEW 2m TEMP FOR PX LSM "  "K"
+state    real  Q2_NDG_NEW        ivjf     fdda2d      1         -      igr      "Q2_NDG_NEW"               "NEW 2m WATER VAPOR MIX RATIO FOR PX LSM "  "kg/kg"
+state    real  MU_NDG_OLD        ivjf     fdda2d      1         Z      igr      "MU_NDG_OLD"              "OLD PERT COLUMN DRY MASS FOR FDDA GRID NUDGING"  "Pa"
+state    real  T2_NDG_OLD        ivjf     fdda2d      1         -      igr      "T2_NDG_OLD"               "OLD 2m TEMP F FOR PX LSM"  "K"
+state    real  Q2_NDG_OLD        ivjf     fdda2d      1         -      igr      "Q2_NDG_OLD"               "OLD 2m WATER VAPOR MIX RATIO  FOR PX LSM"  "kg/kg"
+state    real  SN_NDG_NEW        ivjf     fdda2d      1         -      igr      "SN_NDG_NEW"               "NEW Snow Depth "  "m"
+state    real  SN_NDG_OLD        ivjf     fdda2d      1         -      igr      "SN_NDG_OLD"               "OLD Snow Depth"  "m"
+
+
+# flag for nest movement
+state  logical moved            -       misc        1         -     -          
+
+# special cam radiation restart arrays
+state  real   abstot   ikcj   misc      1    Z   -     ""   ""  " "
+state  real   absnxt   ikaj   misc      1    -   -     ""   ""  " "
+state  real   emstot   ikj    misc      1    Z   -     ""   ""  " "
+
+# model diagnostics
+state   real  dpsdt            ij       misc        1         -     -         "dpsdt"           "surface pressure tendency"                         "Pa/sec"
+state   real  dmudt            ij       misc        1         -     -         "dmudt"           "mu tendency"                                       "Pa/sec"
+state   real  pk1m             ij       misc        1         -     -         "pk1m"            "surface pressure at previous step"                 "Pa"
+state   real  mu_2m            ij       misc        1         -     -         "mu_2m"           "mu_2 at previous step"                             "Pa"
+
+state   real    max_cfl         -       misc        1         -     -       "max_cfl"           "maximum CFL value in grid at a time" "-"
+
+# Ocean Mixed-Layer State Variables
+state   real    TML            ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "TML"    "OCEAN MIXED-LAYER TEMPERATURE"   "K"
+state   real    T0ML           ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "T0ML"   "INITIAL OCEAN MIXED-LAYER TEMPERATURE"   "K"
+state   real    HML            ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "HML"    "OCEAN MIXED-LAYER DEPTH"   "m"
+state   real    H0ML           ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "H0ML"   "INITIAL OCEAN MIXED-LAYER DEPTH"   "m"
+state   real    HUML           ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "HUML"   "OCEAN MIXED-LAYER DEPTH * U-CURRENT"  " m2s-1 "
+state   real    HVML           ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "HVML"   "OCEAN MIXED-LAYER DEPTH * V-CURRENT"  " m2s-1 " 
+#
+#---------------------------------------------------------------------------------------------------------------------------------------
+#                                               
+
+######                                          
+#                                               
+# Variables that are set at run-time to control configuration  (namelist-settable)                                              
+#                                               
+#<Table>  <Type>  <Sym>                   <How set>          <Nentries>   <Default>                                             
+
+
+# Time Control
+rconfig   integer run_days                namelist,time_control		1             0       irh   "run_days"              "NUMBER OF DAYS TO RUN"
+rconfig   integer run_hours               namelist,time_control		1             0       irh   "run_hours"             "NUMBER OF HOURS TO RUN"
+rconfig   integer run_minutes             namelist,time_control		1             0       irh   "run_minutes"           "NUMBER OF MINUTES TO RUN"
+rconfig   integer run_seconds             namelist,time_control		1             0       irh   "run_seconds"           "NUMBER OF SECONDS TO RUN"
+rconfig   integer start_year              namelist,time_control 	max_domains    2024   irh   "start_year"            "4 DIGIT YEAR OF START OF MODEL" "YEARS"
+rconfig   integer start_month             namelist,time_control		max_domains      01    irh   "start_month"           "2 DIGIT MONTH OF THE YEAR OF START OF MODEL, 1-12" "MONTHS"
+rconfig   integer start_day               namelist,time_control		max_domains      01    irh   "start_day"             "2 DIGIT DAY OF THE MONTH OF START OF MODEL, 1-31" "DAYS"
+rconfig   integer start_hour              namelist,time_control		max_domains      00    irh   "start_hour"            "2 DIGIT HOUR OF THE DAY OF START OF MODEL, 0-23" "HOURS"
+rconfig   integer start_minute            namelist,time_control		max_domains      00    irh   "start_minute"          "2 DIGIT MINUTE OF THE HOUR OF START OF MODEL, 0-59" "MINUTES"
+rconfig   integer start_second            namelist,time_control		max_domains      00    irh   "start_second"          "2 DIGIT SECOND OF THE MINUTE OF START OF MODEL, 0-59" "SECONDS"
+rconfig   integer end_year                namelist,time_control		max_domains    2024    irh   "end_year"              "4 DIGIT YEAR OF END OF MODEL" "YEARS"
+rconfig   integer end_month               namelist,time_control		max_domains      01    irh   "end_month"             "2 DIGIT MONTH OF THE YEAR OF END OF MODEL, 1-12" "MONTHS"
+rconfig   integer end_day                 namelist,time_control		max_domains      02    irh   "end_day"               "2 DIGIT DAY OF THE MONTH OF END OF MODEL, 1-31" "DAYS"
+rconfig   integer end_hour                namelist,time_control		max_domains      00    irh   "end_hour"              "2 DIGIT HOUR OF THE DAY OF END OF MODEL, 0-23" "HOURS"
+rconfig   integer end_minute              namelist,time_control		max_domains      00    irh   "end_minute"            "2 DIGIT MINUTE OF THE HOUR OF END OF MODEL, 0-59" "MINUTES"
+rconfig   integer end_second              namelist,time_control		max_domains      00    irh   "end_second"            "2 DIGIT SECOND OF THE MINUTE OF END OF MODEL, 0-59" "SECONDS"
+rconfig   integer interval_seconds        namelist,time_control		1             43200    irh   "interval_seconds"      "SECONDS BETWEEN ANALYSIS AND BOUNDARY PERIODS" "SECONDS"
+rconfig   logical input_from_file         namelist,time_control		max_domains    .false. irh    "input_from_file"      "T/F INPUT FOR THIS DOMAIN FROM A SEPARATE INPUT FILE"  ""
+rconfig   integer fine_input_stream       namelist,time_control		max_domains    0       irh    "fine_input_stream"      "0 THROUGH 11, WHAT INPUT STREAM IS FINE GRID IC FROM"  ""
+rconfig   logical input_from_hires        namelist,time_control		max_domains    .false. irh    "input_from_hires"     "T/F INPUT FOR THIS DOMAIN FROM USGS HI RES TERRAIN"  ""
+rconfig   character rsmas_data_path       namelist,time_control		1              "."     -    "rsmas_data_path"      ""  ""
+rconfig   logical all_ic_times            namelist,time_control		1              .false. irh    "all_ic_times"     "T/F WRITE ALL IC TIME PERIODS"  ""
+
+include registry.io_boilerplate
+
+rconfig   integer JULYR                   namelist,time_control		max_domains    0       h    "JULYR"                 ""      ""
+rconfig   integer JULDAY                  namelist,time_control		max_domains    1       h    "JULDAY"                ""      ""
+rconfig   real    GMT                     namelist,time_control		max_domains    0.      h    "GMT"           ""      ""
+rconfig   character  input_inname      namelist,time_control		1  "wrfinput_d<domain>"          -     "name of input   infile"   ""      ""
+rconfig   character  input_outname     namelist,time_control		1  "wrfinput_d<domain>"          -     "name of input   outfile"  ""      ""
+rconfig   character  bdy_inname        namelist,time_control		1  "wrfbdy_d<domain>"            -     "name of boundary infile"  ""      ""
+rconfig   character  bdy_outname       namelist,time_control		1  "wrfbdy_d<domain>"            -     "name of boundary outfile" ""      ""
+rconfig   character  rst_inname        namelist,time_control		1  "wrfrst_d<domain>_<date>"     -     "name of restrt infile"    ""      ""
+rconfig   character  rst_outname       namelist,time_control		1  "wrfrst_d<domain>_<date>"     -     "name of restrt outfile"   ""      ""
+rconfig   logical write_input             namelist,time_control		1             .false. -    "write input data for 3dvar etc."              ""      ""
+rconfig   logical write_restart_at_0h     namelist,time_control		1             .false. h    "write_restart_at_0h"              ""      ""
+rconfig   logical adjust_output_times     namelist,time_control         1             .false. -    "adjust_output_times"
+rconfig   logical adjust_input_times      namelist,time_control         1             .false. -    "adjust_input_times"
+
+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"
+
+# DFI namelist
+rconfig   integer dfi_opt                namelist,dfi_control   1       0     rh   "dfi_opt"                ""      ""
+rconfig   integer dfi_nfilter            namelist,dfi_control   1       7     rh   "dfi_nfilter"                "Digital filter type"      ""
+rconfig   logical dfi_write_filtered_input  namelist,dfi_control  1  .true.   rh   "dfi_write_filtered_input"                "Write a wrfinput_filtered_d0n file?"      ""
+rconfig   logical dfi_write_dfi_history  namelist,dfi_control   1   .false.   rh   "dfi_write_dfi_history"    "Write history files during filtering?"      ""
+rconfig   integer dfi_cutoff_seconds     namelist,dfi_control   1    3600     rh   "dfi_cutoff_seconds"       "Digital filter cutoff time"      ""
+rconfig   integer dfi_time_dim           namelist,dfi_control   1    1000     rh   "dfi_time_dim"             "MAX DIMENSION FOR HCOEFF"
+rconfig   integer dfi_fwdstop_year       namelist,dfi_control   1    2004     rh   "dfi_fwdstop_year"         "4 DIGIT YEAR OF START OF DFI" "YEARS"
+rconfig   integer dfi_fwdstop_month      namelist,dfi_control   1      03     rh   "dfi_fwdstop_month"        "2 DIGIT MONTH OF THE YEAR OF START OF DFI" "MONTHS"
+rconfig   integer dfi_fwdstop_day        namelist,dfi_control   1      13     rh   "dfi_fwdstop_day"          "2 DIGIT DAY OF THE MONTH OF START OF DFI" "DAYS"
+rconfig   integer dfi_fwdstop_hour       namelist,dfi_control   1      12     rh   "dfi_fwdstop_hour"         "2 DIGIT HOUR OF THE DAY OF START OF DFI" "HOURS"
+rconfig   integer dfi_fwdstop_minute     namelist,dfi_control   1      00     rh   "dfi_fwdstop_minute"       "2 DIGIT MINUTE OF THE HOUR OF START OF DFI" "MINUTES"
+rconfig   integer dfi_fwdstop_second     namelist,dfi_control   1      00     rh   "dfi_fwdstop_second"       "2 DIGIT SECOND OF THE MINUTE OF START OF DFI" "SECONDS"
+rconfig   integer dfi_bckstop_year       namelist,dfi_control   1    2004     rh   "dfi_bckstop_year"         "4 DIGIT YEAR OF END OF DFI" "YEARS"
+rconfig   integer dfi_bckstop_month      namelist,dfi_control   1      03     rh   "dfi_bckstop_month"        "2 DIGIT MONTH OF THE YEAR OF END OF DFI" "MONTHS"
+rconfig   integer dfi_bckstop_day        namelist,dfi_control   1      14     rh   "dfi_bckstop_day"          "2 DIGIT DAY OF THE MONTH OF END OF DFI" "DAYS"
+rconfig   integer dfi_bckstop_hour       namelist,dfi_control   1      12     rh   "dfi_bckstop_hour"         "2 DIGIT HOUR OF THE DAY OF END OF DFI" "HOURS"
+rconfig   integer dfi_bckstop_minute     namelist,dfi_control   1      00     rh   "dfi_bckstop_minute"       "2 DIGIT MINUTE OF THE HOUR OF END OF DFI" "MINUTES"
+rconfig   integer dfi_bckstop_second     namelist,dfi_control   1      00     rh   "dfi_bckstop_second"       "2 DIGIT SECOND OF THE MINUTE OF END OF DFI" "SECONDS"
+
+# Domains
+rconfig   integer time_step               namelist,domains	1             -       ih   "time_step"     
+rconfig   integer time_step_fract_num     namelist,domains	1             0       ih   "time_step_fract_num"     
+rconfig   integer time_step_fract_den     namelist,domains	1             1       ih   "time_step_fract_den"     
+
+rconfig   integer min_time_step           namelist,domains      max_domains   -1      h    "min_time_step"
+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   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"
+rconfig   logical use_adaptive_time_step  namelist,domains      1         .false.     h    "use_adaptive_time_step"
+
+rconfig   integer max_dom                 namelist,domains	1             1       irh  "max_dom"               ""      ""
+rconfig   integer s_we                    namelist,domains	max_domains    1       irh    "s_we"          ""      ""
+rconfig   integer e_we                    namelist,domains	max_domains    32      irh    "e_we"          ""      ""
+rconfig   integer s_sn                    namelist,domains	max_domains    1       irh    "s_sn"          ""      ""
+rconfig   integer e_sn                    namelist,domains	max_domains    32      irh    "e_sn"          ""      ""
+rconfig   integer s_vert                  namelist,domains	max_domains    1       irh    "s_vert"                ""      ""
+rconfig   integer e_vert                  namelist,domains	max_domains    31      irh    "e_vert"                ""      ""
+rconfig   integer num_metgrid_levels      namelist,domains	1              27      irh    "num_metgrid_levels"                ""      ""
+rconfig   real    p_top_requested         namelist,domains      1              5000    irh    "p_top_requested" "Pa"      ""
+rconfig   integer interp_type             namelist,domains	1              2       irh    "interp_type"  "1=interp in pressure, 2=interp in LOG pressure"  ""
+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   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_surface             namelist,domains	1             .true.   irh    "use_surface"   "T/F: use input surface level in interpolation" ""
+rconfig   integer lagrange_order          namelist,domains	1              1       irh    "lagrange_order"   "1=linear, 2=quadratic vertical interpolation"      ""
+rconfig   integer force_sfc_in_vinterp    namelist,domains	1              1       irh    "force_sfc_in_vinterp"   "number of eta levels forced to use sfc in vert interp"      ""
+rconfig   real    zap_close_levels        namelist,domains	1              500     irh    "zap_close_levels"   "delta p where level is removed in vert interp"      "Pa"
+rconfig   logical sfcp_to_sfcp            namelist,domains	1              .false. irh    "sfcp_to_sfcp"   "T/F use incoming sfc pres to compute new sfc pres"      "flag"
+rconfig   logical adjust_heights          namelist,domains	1              .false. irh    "adjust_heights"   "T/F adjust pressure level input to match 500 mb height"      "flag"
+rconfig   logical smooth_cg_topo          namelist,domains	1              .false. irh    "smooth_cg_topo"   "T/F smooth CG topo on boundarries" "flag"
+rconfig   real    dx                      namelist,domains     max_domains    200     h     "dx"        "X HORIZONTAL RESOLUTION"   "METERS"
+rconfig   real    dy                      namelist,domains   	max_domains    200     h     "dy"        "Y HORIZONTAL RESOLUTION"   "METERS"
+rconfig   integer grid_id                 namelist,domains	max_domains    1       irh    "id"            ""      ""
+rconfig   logical grid_allowed            namelist,domains	max_domains    .true.  irh    "allowed"            ""      ""
+rconfig   integer parent_id               namelist,domains	max_domains    0       h     "parent_id"             ""      ""
+rconfig   integer i_parent_start          namelist,domains	max_domains    1       rh     "i_parent_start"                ""      ""
+rconfig   integer j_parent_start          namelist,domains	max_domains    1       rh     "j_parent_start"                ""      ""
+rconfig   integer parent_grid_ratio       namelist,domains	max_domains    1       h     "parent_grid_ratio"             ""      ""
+rconfig   integer parent_time_step_ratio  namelist,domains	max_domains    1       h     "parent_time_step_ratio"                ""      ""
+rconfig   integer feedback                namelist,domains	1    1       h     "feedback"          ""      ""
+rconfig   integer smooth_option           namelist,domains	1    2       h     "smooth_option"          ""      ""
+rconfig   integer blend_width             namelist,domains	1    5       h     "blend_width"  "width of cg fg terrain blended zone"      ""
+rconfig   real    ztop                    namelist,domains	max_domains    15000.  h    "ztop"          ""      ""
+rconfig   integer moad_grid_ratio         namelist,domains	max_domains    1       h     "moad_grid_ratio"               ""      ""
+rconfig   integer moad_time_step_ratio    namelist,domains	max_domains    1       h     "moad_time_step_ratio"          ""      ""
+rconfig   integer shw                     namelist,domains	max_domains    2       h     "stencil_half_width"   "HORIZONTAL INTERPOLATION STENCIL HALF-WIDTH"  "GRID POINTS"
+rconfig   integer tile_sz_x               namelist,domains	1             0       -      "tile_sz_x"             ""      ""
+rconfig   integer tile_sz_y               namelist,domains	1             0       -      "tile_sz_y"             ""      ""
+rconfig   integer numtiles                namelist,domains	1             1       -      "numtiles"              ""      ""
+rconfig   integer nproc_x                 namelist,domains	1             -1       -      "nproc_x"              "-1 means not set"      ""
+rconfig   integer nproc_y		  namelist,domains	1             -1       -      "nproc_y"              "-1 means not set"      ""
+rconfig   integer irand                   namelist,domains	1             0       -      "irand"           ""      ""
+rconfig   real    dt                      derived              max_domains    2.      h     "dt"        "TEMPORAL RESOLUTION"      "SECONDS"
+rconfig   integer   num_moves       namelist,domains    1                0
+rconfig   integer   ts_buf_size     namelist,domains    1                200          -       "ts_buf_size"   "Size of time series buffer"
+rconfig   integer   max_ts_locs     namelist,domains    1                5            -       "max_ts_locs"   "Maximum number of time series locations"
+rconfig   integer   vortex_interval  namelist,domains   max_domains      15  -  "" "" "minutes"
+rconfig   integer   max_vortex_speed namelist,domains   max_domains      40  -  "" "" "meters per second"
+rconfig   integer   corral_dist     namelist,domains    max_domains      8
+rconfig   integer   track_level     namelist,domains    1                50000
+rconfig   integer   move_id         namelist,domains    max_moves        0
+rconfig   integer   move_interval   namelist,domains    max_moves        999999999
+rconfig   integer   move_cd_x       namelist,domains    max_moves        0
+rconfig   integer   move_cd_y       namelist,domains    max_moves        0
+rconfig   logical   swap_x          namelist,domains    max_domains    .false. rh    "swap_x"            ""      ""
+rconfig   logical   swap_y          namelist,domains    max_domains    .false. rh    "swap_y"            ""      ""
+rconfig   logical   cycle_x         namelist,domains    max_domains    .false. rh    "cycle_x"            ""      ""
+rconfig   logical   cycle_y         namelist,domains    max_domains    .false. rh    "cycle_y"            ""      ""
+rconfig   logical   reorder_mesh    namelist,domains    1              .false. rh    "reorder_mesh"       ""      ""
+rconfig   logical   perturb_input   namelist,domains    1              .false. h     "" "" ""
+rconfig   real      eta_levels      namelist,domains    max_eta        -1.
+rconfig   real      max_dz          namelist,domains    1               1000.
+
+# Physics
+######
+###### MARS SPECIFIC NAMELIST ENTRIES
+######
+rconfig  integer  mars      namelist,physics  max_domains  0        rh   "mars"      "model mode"              ""
+rconfig  real     init_TI   namelist,physics  max_domains  0        irh  "init_TI"   "thermal inertia"         ""
+rconfig  real     init_AL   namelist,physics  max_domains  0        irh  "init_AL"   "albedo"                  ""
+rconfig  real     init_U    namelist,physics  max_domains  0        irh  "init_U"    "zonal wind"              ""
+rconfig  real     init_V    namelist,physics  max_domains  0        irh  "init_V"    "meridional wind"         ""
+rconfig  integer  init_WX   namelist,physics  max_domains  0        irh  "init_WX"   "x coord"                 ""
+rconfig  integer  init_WY   namelist,physics  max_domains  0        irh  "init_WY"   "y coord"                 ""
+rconfig  real     init_MU   namelist,physics  max_domains  0        irh  "init_MU"   "zonal wind mult."        ""
+rconfig  real     init_MV   namelist,physics  max_domains  0        irh  "init_MV"   "meridional wind mult."   ""
+rconfig  logical  init_LES  namelist,physics  max_domains  .false.  irh  "init_LES"  "LES mode"                ""
+rconfig  logical  modif_wrf namelist,physics  max_domains  .true.   ir   "modif_wrf" "true if tweaked WRF"     ""
+#######
+####### MARS SPECIFIC NAMELIST ENTRIES
+#######
+rconfig   integer     mp_physics          namelist,physics	max_domains    0       rh       "mp_physics"            ""      ""
+rconfig   integer     gsfcgce_hail        namelist,physics      1              0       rh       "gsfcgce select hail/graupel"  ""      ""
+rconfig   integer     gsfcgce_2ice        namelist,physics      1              0       rh       "gsfcgce select 2ice/3ice"  ""      ""
+rconfig   integer     progn               namelist,physics      max_domains    0       rh       "progn"                 ""      ""
+rconfig   integer     ra_lw_physics       namelist,physics	max_domains    0       rh       "ra_lw_physics"         ""      ""
+rconfig   integer     ra_sw_physics       namelist,physics	max_domains    0       rh       "ra_sw_physics"         ""      ""
+rconfig   real    radt                    namelist,physics	max_domains    1       h    "RADT"          ""      ""
+rconfig   real    naer                    namelist,physics      max_domains    1e9     rh   "NAER"          ""      ""
+rconfig   integer     sf_sfclay_physics   namelist,physics	max_domains    0       rh       "sf_sfclay_physics"             ""      ""
+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   real    BLDT                    namelist,physics	max_domains    0       h    "BLDT"          ""      ""
+rconfig   integer     cu_physics          namelist,physics	max_domains    0       rh       "cu_physics"            ""      ""
+rconfig   real    CUDT                    namelist,physics	max_domains    0       h    "CUDT"          ""      ""
+rconfig   real    GSMDT                   namelist,physics	max_domains    0       h    "GSMDT"          ""      ""
+rconfig   integer ISFFLX                  namelist,physics 	1             1       irh    "ISFFLX"                        ""      ""
+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 num_soil_layers         namelist,physics	1            10       irh    "num_soil_layers"               ""      ""
+rconfig   integer num_months              namelist,physics      1            12       irh    "num_months"               ""      ""
+rconfig   integer maxiens                 namelist,physics	1             1       irh    "maxiens"                    ""      ""
+rconfig   integer maxens                  namelist,physics	1             3       irh    "maxens"                    ""      ""
+rconfig   integer maxens2                 namelist,physics	1             3       irh    "maxens2"                    ""      ""
+rconfig   integer maxens3                 namelist,physics	1            16       irh    "maxens3"                    ""      ""
+rconfig   integer ensdim                  namelist,physics	1            144      irh    "ensdim"                    ""      ""
+rconfig   integer cugd_avedx              namelist,physics      1            1      irh    "cugd_avedx"                    ""      ""
+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     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"                  ""      ""
+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"
+rconfig   real mp_zero_out_thresh         namelist,physics	1          1.e-8      -      "mp_zero_out_thresh"  "minimum threshold for non-Qv moist fields, below are set to zero"  "kg/kg"
+rconfig   real    seaice_threshold        namelist,physics	1            271       h    "seaice_threshold"  "tsk below which which water points are set to sea ice for slab scheme"   "K"
+rconfig   integer sst_update              namelist,physics	1            0         h    "sst_update"  "update sst from wrflowinp file  0=no, 1=yes"   ""
+rconfig   integer ucmcall                 namelist,physics      max_domains  0         h    "ucmcall"     "activate urban model  0=no, 1=yes"   ""
+rconfig   logical usemonalb               namelist,physics      1            .false.   h    "usemonalb"   "use 2d field vs table values  false=table, True=2d"   ""
+rconfig   integer co2tf                   namelist,physics	1            1         -    "co2tf" "GFDL radiation co2 flag" ""
+rconfig   integer ra_call_offset          namelist,physics	1            0         -    "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"
+rconfig   integer levsiz                  namelist,physics      1             1       -      "levsiz" "Number of ozone data levels for CAM radiation (59)"  ""
+rconfig   integer paerlev                 namelist,physics      1             1       -      "paerlev" "Number of aerosol data levels for CAM radiation (29)"  ""
+rconfig   integer cam_abs_dim1            namelist,physics      1             1       -      "cam_abs_dim1" "dimension for absnxt in CAM radiation"  ""
+rconfig   integer cam_abs_dim2            namelist,physics      1             1       -      "cam_abs_dim2" "dimension for abstot in CAM radiation"  ""
+rconfig   logical cu_rad_feedback         namelist,physics      max_domains   .false.  -     "feedback cumulus to radiation"  ""
+rconfig   integer pxlsm_smois_init           namelist,physics  max_domains   1       irh    "PXLSM_SMOIS_INIT"    "Soil moisture initialization option 0-From analysis 1-From MAVAIL"      ""
+rconfig   integer omlcall                 namelist,physics      1            0         h     "omlcall"     "activate simple ocean mixed layer model  0=no, 1=yes"   ""
+rconfig   real    oml_hml0                namelist,physics      1            50        h     "oml_hml0"    "oml initial mixed layer depth value"   "m"
+rconfig   real    oml_gamma               namelist,physics      1            0.14      h     "oml_gamma"   "oml deep water lapse rate"   "K m-1"
+rconfig   integer isftcflx                namelist,physics      1            0         h     "isftcflx"    "switch to control sfc fluxes"   ""
+rconfig   real    shadlen                 namelist,physics      1            25000.    -     "shadow_length" "maximum length of orographic shadow" "m"
+rconfig   integer slope_rad               namelist,physics      max_domains    0       -     "slope_rad"  "1: use slope-dependent radiation, 0:not" ""
+rconfig   integer topo_shading            namelist,physics      max_domains    0       -     "topo_shading" "1: apply topographic shading to radiation, 0:not" ""
+rconfig   integer no_mp_heating           namelist,physics      1              0       -     "no_mp_heating" "switch to turn of latent heating in mp schemes"   ""
+
+#FDDA namelist parameters
+rconfig   real    FGDT                    namelist,fdda         max_domains    0       h        "FGDT"          ""      ""
+rconfig   integer  grid_fdda              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_no_pbl_nudging_uv   namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_no_pbl_nudging_t    namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_no_pbl_nudging_q    namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_zfac_uv             namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer   k_zfac_uv             namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_zfac_t              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer   k_zfac_t              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_zfac_q              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer   k_zfac_q              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real        guv                 namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real        gt                  namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real        gq                  namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real    dtramp_min              namelist,fdda         1              0       h        "grid_fdda"            ""      ""
+rconfig   integer if_ramping              namelist,fdda         1              0       h        "grid_fdda"            ""      ""
+
+#Observational Nudging
+rconfig   integer     obs_nudge_opt       namelist,fdda            max_domains    0       rh       "obs_nudge_opt"     "Obs-nudging flag for domain"          ""
+rconfig   integer     max_obs             namelist,fdda            1              0       h        "max_obs"           "Maximum number of observations"       ""
+rconfig   real        fdda_start          namelist,fdda            max_domains    0       rh       "fdda_start"        "Nudging start time for domain"        "min"
+rconfig   real        fdda_end            namelist,fdda            max_domains    0       rh       "fdda_end"          "Nudging end time for domain"          "min"
+rconfig   integer     obs_nudge_wind      namelist,fdda            max_domains    0       rh       "obs_nudge_wind"    "Wind-nudging flag for domain"         ""
+rconfig   real        obs_coef_wind       namelist,fdda            max_domains    0       rh       "obs_coef_wind"     "Wind-nudging coeficient for domain"   "s-1"
+rconfig   integer     obs_nudge_temp      namelist,fdda            max_domains    0       rh       "obs_nudge_temp"    "Temperature-nudging flag for domain"  ""
+rconfig   real        obs_coef_temp       namelist,fdda            max_domains    0       rh       "obs_coef_temp"     "Temperature-nudging coef for domain"  "s-1"
+rconfig   integer     obs_nudge_mois      namelist,fdda            max_domains    0       rh       "obs_nudge_mois"    "Moisture-nudging flag for domain"     ""
+rconfig   real        obs_coef_mois       namelist,fdda            max_domains    0       rh       "obs_coef_mois"     "Moisture-nudging coef for domain"     "s-1"
+rconfig   integer     obs_nudge_pstr      namelist,fdda            max_domains    0       rh       "obs_nudge_pstr"    "Not used"                             ""
+rconfig   real        obs_coef_pstr       namelist,fdda            max_domains    0       rh       "obs_coef_pstr"     "Not used"                             ""
+rconfig   real        obs_rinxy           namelist,fdda            max_domains    0       rh       "obs_rinxy"         "Horizontal radius of influence"       "km"
+rconfig   real        obs_rinsig          namelist,fdda            1              0       h        "obs_rinsig"        "Vertical radius of influence"         "sigma"
+rconfig   real        obs_twindo          namelist,fdda            max_domains    0       rh       "obs_twindo"        "Half-period time window for nudging"  "hrs"
+rconfig   integer     obs_npfi            namelist,fdda            1              0       h        "obs_npfi"          "Freq in cg timesteps for diag print"  ""
+rconfig   integer     obs_ionf            namelist,fdda            max_domains    1       rh       "obs_ionf"          "Freq in cg timesteps for obs input and error calc"   ""
+rconfig   integer     obs_idynin          namelist,fdda            1              0       h        "obs_idynin"        "Flag for dynamic initialization"      ""
+rconfig   real        obs_dtramp          namelist,fdda            1              0       h        "obs_dtramp"        "Time period for ramping (idynin)"     "min"
+rconfig   integer     obs_nobs_prt        namelist,fdda            max_domains    0       rh       "obs_nobs_prt"      "Number of current obs to print grid coord. info."   ""
+rconfig   logical     obs_ipf_in4dob      namelist,fdda            1              .false. h        "obs_ipf_in4dob"    "Print obs input diagnostics"   ""
+rconfig   logical     obs_ipf_errob       namelist,fdda            1              .false. h        "obs_ipf_errob"     "Print obs error diagnostics"   ""
+rconfig   logical     obs_ipf_nudob       namelist,fdda            1              .false. h        "obs_ipf_nudob"     "Print obs nudge diagnostics"   ""
+rconfig   logical     obs_ipf_init        namelist,fdda            1              .true.  h        "obs_ipf_init"      "Enable obs init warning messages"   ""
+
+
+# Dynamics
+# dynamics option (see package definitions, below)
+rconfig   integer rk_ord                  namelist,dynamics	1             3       irh   "rk_order"               ""      ""
+rconfig   integer w_damping               namelist,dynamics	1             0       irh    "w_damping"             ""      ""
+# diff_opt 1=old diffusion, 2=new
+rconfig   integer diff_opt                namelist,dynamics	1             1       irh    "diff_opt"              ""      ""
+# km_opt   1=old coefs, 2=tke, 3=Smagorinksy
+rconfig   integer km_opt                  namelist,dynamics	1             1       irh    "km_opt"                ""      ""
+# km_opt_dfi is needed for backward integration in dfi
+rconfig   integer km_opt_dfi              namelist,dynamics	1             1       irh    "km_opt_dfi"                ""      ""
+rconfig   integer damp_opt                namelist,dynamics	1             0       irh    "damp_opt"              ""      ""
+rconfig   real    zdamp                   namelist,dynamics	max_domains    5000.   h    "zdamp"         ""      ""
+rconfig   real    dampcoef                namelist,dynamics     max_domains    0.      h    "dampcoef"              ""      ""
+rconfig   real    khdif                   namelist,dynamics	max_domains    0       h    "khdif"         ""      ""
+rconfig   real    kvdif                   namelist,dynamics	max_domains    0       h    "kvdif"         ""      ""
+rconfig   real    diff_6th_factor         namelist,dynamics     max_domains    0.2     h    "diff_6th_factor" "factor that controls rate of 6th-order numerical diffusion"
+rconfig   integer diff_6th_opt            namelist,dynamics     max_domains    2      irh   "diff_6th_opt" "switch for 6th-order numerical diffusion"
+rconfig   real    c_s                     namelist,dynamics	max_domains    0.25    h    "c_s"         "Smagorinsky coeff"      ""
+rconfig   real    c_k                     namelist,dynamics	max_domains    0.15    h    "c_k"         "TKE coeff"      ""
+rconfig   real    smdiv                   namelist,dynamics	max_domains    0.1     h    "smdiv"         ""      ""
+rconfig   real    emdiv                   namelist,dynamics	max_domains    0.01    h    "emdiv"         ""      ""
+rconfig   real    epssm                   namelist,dynamics	max_domains    0.1     h    "epssm"         ""      ""
+rconfig   logical non_hydrostatic         namelist,dynamics	max_domains  .true.   irh  "non_hydrostatic"    ""   ""
+rconfig   integer time_step_sound         namelist,dynamics	max_domains    6       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"               ""      ""
+rconfig   integer     h_sca_adv_order     namelist,dynamics	max_domains    5       rh       "h_sca_adv_order"               ""      ""
+rconfig   integer     v_sca_adv_order     namelist,dynamics	max_domains    3       rh       "v_sca_adv_order"               ""      ""
+rconfig   logical     pd_moist            namelist,dynamics	max_domains    .false.  rh    "pd_moist"         "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_moist_dfi        namelist,dynamics	max_domains    .false.  rh    "pd_moist_dfi"    "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_chem             namelist,dynamics	max_domains    .false. rh    "pd_chem"          "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_scalar           namelist,dynamics	max_domains    .false. rh    "pd_scalar"        "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_tke              namelist,dynamics	max_domains    .false. rh    "pd_tke"           "positive-definite RK3 transport switch"      ""
+rconfig   logical top_radiation           namelist,dynamics	max_domains    .false. rh    "top_radiation"         ""      ""
+rconfig   integer mix_isotropic           namelist,dynamics	max_domains    0       h    "mix_isotropic"            "0=anistropic, 1=isotropic"      ""
+rconfig   real    mix_upper_bound         namelist,dynamics	max_domains    0.1     h    "mix_upper_bound"          "non-dimensional limit"      ""
+rconfig   logical top_lid                 namelist,dynamics     max_domains    .false. rh    "top_lid"               ""      ""
+rconfig   real    tke_upper_bound         namelist,dynamics	max_domains    1000.   h    "tke_upper_bound"            ""      ""
+rconfig   real    tke_drag_coefficient    namelist,dynamics	max_domains    0.      h    "tke_drag_coefficient"       ""      "dimensionless"
+rconfig   real    tke_heat_flux           namelist,dynamics	max_domains    0.      h    "tke_heat_flux"              ""      "K m s-1"
+rconfig   logical pert_coriolis           namelist,dynamics	max_domains  .false.  irh  "pert_coriolis"    ""   ""
+rconfig   logical coriolis2d              namelist,dynamics	max_domains  .false.  irh  "coriolis2d"    ""   ""
+rconfig   logical mix_full_fields         namelist,dynamics     max_domains  .false.  irh  "mix_full_field"   ""   ""
+rconfig   real    base_pres               namelist,dynamics	1          100000.     h    "base_pres"  "Base state pressure - do not change (10^5 Pa), real only"      "Pa"
+rconfig   real    base_temp               namelist,dynamics	1             290.     h    "base_temp"  "Base state sea level temperature, real only"      "K"
+rconfig   real    base_lapse              namelist,dynamics	1              50.     h    "base_lapse" "Base state temperature difference between base pres and 1/e of atm depth - do not change, real only"      "K"
+rconfig   real    fft_filter_lat          namelist,dynamics     1              45.     h    "fft_filter_lat"   ""   "grid latitude to start polar filter"
+rconfig   logical rotated_pole            namelist,dynamics     1            .false.  irh   "rotated_pole"    ""   ""
+rconfig   logical do_coriolis             namelist,dynamics	max_domains  .true.   irh  "do_coriolis"    ""   ""
+rconfig   logical do_curvature            namelist,dynamics	max_domains  .true.   irh  "do_curvature"   ""   ""
+rconfig   logical do_gradp                namelist,dynamics	max_domains  .true.   irh  "do_gradp"    ""   ""
+
+
+# Bdy_control
+rconfig   integer spec_bdy_width          namelist,bdy_control		1             5       irh    "spec_bdy_width"                ""      ""
+rconfig   integer spec_zone               namelist,bdy_control		1             1       irh    "spec_zone"                     ""      ""
+rconfig   integer relax_zone              namelist,bdy_control		1             4       irh    "relax_zone"                    ""      ""
+rconfig   logical specified               namelist,bdy_control	max_domains    .false. rh    "specified"             ""      ""
+rconfig   logical periodic_x              namelist,bdy_control	max_domains    .false. rh    "periodic_x"            ""      ""
+rconfig   logical symmetric_xs            namelist,bdy_control	max_domains    .false. rh    "symmetric_xs"          ""      ""
+rconfig   logical symmetric_xe            namelist,bdy_control	max_domains    .false. rh    "symmetric_xe"          ""      ""
+rconfig   logical open_xs                 namelist,bdy_control	max_domains    .false. rh    "open_xs"               ""      ""
+rconfig   logical open_xe                 namelist,bdy_control	max_domains    .false. rh    "open_xe"               ""      ""
+rconfig   logical periodic_y              namelist,bdy_control	max_domains    .false. rh    "periodic_y"            ""      ""
+rconfig   logical symmetric_ys            namelist,bdy_control	max_domains    .false. rh    "symmetric_ys"          ""      ""
+rconfig   logical symmetric_ye            namelist,bdy_control	max_domains    .false. rh    "symmetric_ye"          ""      ""
+rconfig   logical open_ys                 namelist,bdy_control	max_domains    .false. rh    "open_ys"               ""      ""
+rconfig   logical open_ye                 namelist,bdy_control	max_domains    .false. rh    "open_ye"               ""      ""
+rconfig   logical polar                   namelist,bdy_control	max_domains    .false. rh    "polar"                 ""      ""
+rconfig   logical nested                  namelist,bdy_control	max_domains    .false. rh    "nested"                ""      ""
+rconfig   real    spec_exp                namelist,bdy_control          1     0.      irh    "spec_exp"              ""      ""
+rconfig   integer real_data_init_type     namelist,bdy_control		1                 1    irh   "real_data_init_type"   "REAL DATA INITIALIZATION OPTIONS: 1=SI, 2=MM5, 3=GENERIC" "PRE-PROCESSOR TYPES"
+
+rconfig   integer background_proc_id      namelist,grib2 	        1     255    rh    "background_proc_id"    "Background processing id for grib2"  ""
+rconfig   integer forecast_proc_id        namelist,grib2 	        1     255    rh    "forecast_proc_id"      "Analysis and forecast processing id for grib2"  ""
+rconfig   integer production_status       namelist,grib2 	        1     255    rh    "production_status"     "Background processing id for grib2"  ""
+rconfig   integer compression             namelist,grib2 	        1      40    rh    "compression"           "grib2 compression, 40 for JPEG2000 or 41 for PNG"  ""
+
+# NAMELIST DERIVED
+rconfig   integer nobs_ndg_vars           derived                       1         5       -        "num_ndg_vars"         "Number of nudging variables"          ""
+rconfig   integer nobs_err_flds           derived                       1         9       -        "num_err_flds"         "Number of error fields"               ""
+rconfig   real    cen_lat                 derived                  max_domains    0       -        "cen_lat"              "center latitude"      "degrees, negative is south"
+rconfig   real    cen_lon                 derived                  max_domains    0       -        "cen_lon"              "central longitude"      "degrees, negative is west"
+rconfig   real    truelat1                derived                  max_domains    0       -        "true_lat1"             "first standard parallel"      "degrees, negative is south"
+rconfig   real    truelat2                derived                  max_domains    0       -        "true_lat2"             "second standard parallel"      "degrees, negative is south"
+rconfig   real    moad_cen_lat            derived                  max_domains    0       -        "moad_cen_lat"             "center latitude of the most coarse grid"      "degrees, negative is south"
+rconfig   real    stand_lon               derived                  max_domains    0       -        "stand_lon"             "standard longitude, parallel to j-direction, perpendicular to i-direction "      "degrees, negative is west"
+rconfig   real    bdyfrq                  derived                  max_domains    0       -        "bdyfrq"               "lateral boundary input frequency"      "seconds"
+rconfig   integer iswater                 derived                  max_domains    0       -        "iswater"              "land use index of water"      "index category"
+rconfig   integer isice                   derived                  max_domains    0       -        "isice"                "land use index of ice"        "index category"
+rconfig   integer isurban                 derived                  max_domains    0       -        "isurban"              "land use index for 'urban and built-up"     "index category"
+rconfig   integer isoilwater              derived                  max_domains    0       -        "isoilwater"           "land use index of water for soil"        "index category"
+rconfig   integer map_proj                derived                  max_domains    0       -        "map_proj"             "domain map projection"      "0=none (Cylindrical), 1=Lambert, 2=polar, 3=Mercator"
+rconfig   integer use_wps_input           derived                       1         0       -        "use_wps_input"        "0/1 flag, using wps input"      "0=no, 1=yes"
+rconfig   integer dfi_stage               derived                       1         3       -        "dfi_stage"            "current stage of DFI processing"      "0=DFI setup, 1=DFI backward integration, 2=DFI forward integration, 3=WRF forecast"
+rconfig   integer mp_physics_dfi          derived                  max_domains   -1       -        "mp_physics_dfi"       ""      "-1 = no DFI and so no need to allocate DFI moist and scalar variables, >0 = running with DFI, so allocate DFI moist and scalar variables appropriate for selected microphysics package"
+
+#
+# Single dummy declaration to define a nodyn dyn option
+state integer nodyn_dummy - dyn_nodyn -  -  -  "" "" ""      
+
+#
+#---------------------------------------------------------------------------------------------------------------------------------------
+# Package Declarations
+#                                               
+
+#key      package       associated                package          associated 4d scalars
+#         name          namelist choice           state vars
+
+
+##### MARS OPTIONS
+##### MARS OPTIONS
+##### MARS OPTIONS
+##
+## CHANGING THE OPTION CHANGE THE NUMBER OF TRACERS WITHOUT ANY NEED TO RECOMPILE ENTIRELY WRF
+## HOWEVER, YOU STILL NEED TO RECOMPILE THE PHYSICS BEFORE CHANGING THE OPTION
+## JUST USE THE COMPILE_ALL SCRIPT FOR A FAST RECOMPILATION 
+## -------
+## ONE REMAINING PROBLEM IS THE FACT THAT YOU NEED TO RECOMPILE
+## ENTIRELY IF YOU DO NOT WANT TO OUTPUT THE TRACERS
+## (FOR EXAMPLE, IF THEY ARE TURNED OFF ...)
+## -------
+##
+##
+package   nowater      mars==0                      -              moist:qv
+package   water        mars==1                      -              moist:qv;scalar:qh2o,qh2o_ice
+package   dust         mars==2                      -              moist:qv;scalar:qdust
+package   radioac      mars==20                     -              scalar:qtrac1
+##### MARS OPTIONS
+##### MARS OPTIONS
+##### MARS OPTIONS
+
+
+
+
+#package   passivec1     chem_opt==0                  -             
+package   passiveqv     mp_physics==0                -             moist:qv
+package   kesslerscheme mp_physics==1                -             moist:qv,qc,qr
+package   linscheme     mp_physics==2                -             moist:qv,qc,qr,qi,qs,qg
+package   wsm3scheme    mp_physics==3                -             moist:qv,qc,qr
+package   wsm5scheme    mp_physics==4                -             moist:qv,qc,qr,qi,qs
+package   etampnew      mp_physics==5                -             moist:qv,qc,qr,qi,qs,qg;scalar:qt
+package   wsm6scheme    mp_physics==6                -             moist:qv,qc,qr,qi,qs,qg
+package   gsfcgcescheme mp_physics==7                -             moist:qv,qc,qr,qi,qs,qg
+package   thompson       mp_physics==8               -             moist:qv,qc,qr,qi,qs,qg;scalar:qni
+package   morr_two_moment  mp_physics==10            -             moist:qv,qc,qr,qi,qs,qg;scalar:qni,qns,qnr,qng
+
+package   nodfimoist        mp_physics_dfi==-1       -             -
+package   passiveqv_dfi     mp_physics_dfi==0        -             dfi_moist:dfi_qv
+package   kesslerscheme_dfi mp_physics_dfi==1        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr
+package   linscheme_dfi     mp_physics_dfi==2        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg
+package   wsm3scheme_dfi    mp_physics_dfi==3        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr
+package   wsm5scheme_dfi    mp_physics_dfi==4        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs
+package   etampnew_dfi      mp_physics_dfi==5        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qt
+package   wsm6scheme_dfi    mp_physics_dfi==6        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg
+package   gsfcgcescheme_dfi mp_physics_dfi==7        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg
+package   thompson_dfi      mp_physics_dfi==8        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qni
+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   noprogn       progn==0                     -             -
+package   progndrop     progn==1                     -             scalar:qndrop;dfi_scalar:dfi_qndrop
+
+package   rrtmscheme    ra_lw_physics==1             -             -
+package   camlwscheme   ra_lw_physics==3             -             ozmixm:mth01,mth02,mth03,mth04,mth05,mth06,mth07,mth08,mth09,mth10,mth11,mth12;aerosolc:sul,sslt,dust1,dust2,dust3,dust4,ocpho,bcpho,ocphi,bcphi,bg,volc
+package   gfdllwscheme  ra_lw_physics==99            -             -
+package   heldsuarez    ra_lw_physics==31            -             -
+
+package   swradscheme   ra_sw_physics==1             -             -
+package   gsfcswscheme  ra_sw_physics==2             -             -
+package   camswscheme   ra_sw_physics==3             -             ozmixm:mth01,mth02,mth03,mth04,mth05,mth06,mth07,mth08,mth09,mth10,mth11,mth12;aerosolc:sul,sslt,dust1,dust2,dust3,dust4,ocpho,bcpho,ocphi,bcphi,bg,volc
+package   gfdlswscheme  ra_sw_physics==99            -             -
+
+package   sfclayscheme   sf_sfclay_physics==1        -             state:regime
+package   myjsfcscheme   sf_sfclay_physics==2        -             -
+package   gfssfcscheme   sf_sfclay_physics==3        -             -
+package   pxsfcscheme    sf_sfclay_physics==7        -             state:regime
+
+package   slabscheme     sf_surface_physics==1       -             -
+package   lsmscheme      sf_surface_physics==2       -             -
+package   ruclsmscheme   sf_surface_physics==3       -             -
+package   pxlsmscheme    sf_surface_physics==7       -             fdda2d:t2_ndg_new,q2_ndg_new,t2_ndg_old,q2_ndg_old
+
+package   ysuscheme      bl_pbl_physics==1           -             state:regime
+package   myjpblscheme   bl_pbl_physics==2           -             -
+package   gfsscheme      bl_pbl_physics==3           -             -
+package   acmpblscheme   bl_pbl_physics==7           -             state:regime
+package   mrfscheme      bl_pbl_physics==99          -             state:regime
+
+package   kfetascheme    cu_physics==1               -             -
+package   bmjscheme      cu_physics==2               -             -
+package   gdscheme       cu_physics==3               -             -
+package   sasscheme      cu_physics==4               -             -
+package   g3scheme       cu_physics==5               -             state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten
+package   kfscheme       cu_physics==99              -             -
+
+package   psufddagd      grid_fdda==1                -             fdda3d:u_ndg_old,v_ndg_old,t_ndg_old,q_ndg_old,ph_ndg_old,u_ndg_new,v_ndg_new,t_ndg_new,q_ndg_new,ph_ndg_new;fdda2d:mu_ndg_old,mu_ndg_new,t2_ndg_new,q2_ndg_new,t2_ndg_old,q2_ndg_old,sn_ndg_new,sn_ndg_old;state:rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten
+
+package   restofwrf      use_wps_input==0            -             -
+
+package   dfi_setup      dfi_stage==0                -             -
+package   dfi_bck        dfi_stage==1                -             -
+package   dfi_fwd        dfi_stage==2                -             -
+package   dfi_fst        dfi_stage==3                -             -
+
+#package   digifilter     dfi_opt==1                  -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qndrop,dfi_qni,dfi_qt,dfi_qns,dfi_qnr,dfi_qng;state:dfi_u,dfi_v,dfi_w,dfi_ph,dfi_phb,dfi_ph0,dfi_php,dfi_t,dfi_p,dfi_ww,dfi_mu,dfi_tke,dfi_pb,dfi_al,dfi_alt
+package   dfi_nodfi     dfi_opt==0                  -             -
+package   dfi_dfl       dfi_opt==1                  -             state:dfi_u,dfi_v,dfi_w,dfi_ph,dfi_phb,dfi_ph0,dfi_php,dfi_t,dfi_p,dfi_ww,dfi_mu,dfi_tke,dfi_pb,dfi_al,dfi_alt,dfi_TSLB,dfi_SMOIS,dfi_SNOW,dfi_SNOWH,dfi_CANWAT,dfi_SMFR3D,dfi_KEEPFR3DFLAG,dfi_TSK,dfi_SOILT1,dfi_TSNAV,dfi_SNOWC,dfi_QVG
+package   dfi_ddfi      dfi_opt==2                  -             state:dfi_u,dfi_v,dfi_w,dfi_ph,dfi_phb,dfi_ph0,dfi_php,dfi_t,dfi_p,dfi_ww,dfi_mu,dfi_tke,dfi_pb,dfi_al,dfi_alt,dfi_TSLB,dfi_SMOIS,dfi_SNOW,dfi_SNOWH,dfi_CANWAT,dfi_SMFR3D,dfi_KEEPFR3DFLAG,dfi_TSK,dfi_SOILT1,dfi_TSNAV,dfi_SNOWC,dfi_QVG
+package   dfi_tdfi      dfi_opt==3                  -             state:dfi_u,dfi_v,dfi_w,dfi_ph,dfi_phb,dfi_ph0,dfi_php,dfi_t,dfi_p,dfi_ww,dfi_mu,dfi_tke,dfi_pb,dfi_al,dfi_alt,dfi_TSLB,dfi_SMOIS,dfi_SNOW,dfi_SNOWH,dfi_CANWAT,dfi_SMFR3D,dfi_KEEPFR3DFLAG,dfi_TSK,dfi_SOILT1,dfi_TSNAV,dfi_SNOWC,dfi_QVG
+ifdef RUC_CLOUD
+package   realonly       use_wps_input==1            -             state:u_gc,v_gc,t_gc,rh_gc,ght_gc,p_gc,xlat_gc,xlong_gc,ht_gc,tsk_gc,tavgsfc,tmn_gc,pslv_gc,greenfrac,albedo12m,pd_gc,psfc_gc,intq_gc,pdhs,qv_gc,qr_gc,qc_gc,qs_gc,qi_gc,qg_gc,qni_gc
+endif
+ifndef RUC_CLOUD
+package   realonly       use_wps_input==1            -             state:u_gc,v_gc,t_gc,rh_gc,ght_gc,p_gc,xlat_gc,xlong_gc,ht_gc,tsk_gc,tavgsfc,tmn_gc,pslv_gc,greenfrac,albedo12m,pd_gc,psfc_gc,intq_gc,pdhs,qv_gc
+endif
+
+
+# only need to specify these once; not for every io_form* variable
+package   io_intio    io_form_restart==1                     -             -
+package   io_netcdf   io_form_restart==2                     -             -
+# Placeholders for additional packages (we can go beyond zzz
+# but that will entail modifying frame/module_io.F and frame/md_calls.m4)
+# Please note these are placeholders; HDF has not been implemented yet.
+package   io_hdf      io_form_restart==3                     -             -
+package   io_phdf5    io_form_restart==4                     -             -
+package   io_grib1    io_form_restart==5                     -             -
+package   io_mcel     io_form_restart==6                     -             -
+package   io_esmf     io_form_restart==7                     -             -
+package   io_yyy      io_form_restart==8                     -             -
+package   io_zzz      io_form_restart==9                     -             -
+package   io_grib2    io_form_restart==10                    -             -
+package   io_pnetcdf  io_form_restart==11                     -             -
+                                                
+#---------------------------------------------------------------------------------------------------------------------------------------
+## communications                                               
+
+### 8. Edit the Registry file and create a halo-exchange for x_1.
+
+# Halo Update Communications
+
+halo      HALO_EM_INIT_1 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,ph_1,ph_2
+halo      HALO_EM_INIT_2 dyn_em 48:t_1,t_2,mu_1,mu_2,tke_1,tke_2,ww,phb
+halo      HALO_EM_INIT_3 dyn_em 48:ph0,php,t_init,mub,mu0,p,al,alt,alb
+halo      HALO_EM_INIT_4 dyn_em 48:pb,h_diabatic,msftx,msfty,msfux,msfuy,msfvx,msfvy,msfvx_inv,f,e,sina,cosa,ht,potevp,snopcx,soiltb,xlat,xlong,xlat_u,xlat_v,xlong_u,xlong_v,clat,clong
+halo      HALO_EM_INIT_5 dyn_em 48:moist,chem,scalar
+halo      HALO_EM_VINTERP_UV_1 dyn_em 8:pd_gc,pb
+halo      HALO_EM_A dyn_em  8:ru,rv,rw,ww,php,alt,al,p,muu,muv,mut
+halo      HALO_EM_PHYS_A  dyn_em 4:u_2,v_2
+halo      HALO_EM_PHYS_PBL dyn_em        4:rublten,rvblten
+halo      HALO_EM_FDDA dyn_em            4:rundgdten,rvndgdten
+halo      HALO_EM_PHYS_DIFFUSION dyn_em  4:defor11,defor22,defor12,defor13,defor23,div,xkmv,xkmh,xkhv,xkhh,tke_1,tke_2
+halo      HALO_EM_TKE_ADVECT_3 dyn_em 24:tke_2
+halo      HALO_EM_TKE_ADVECT_5 dyn_em 48:tke_2
+halo      HALO_EM_TKE_A dyn_em 4:ph_2,phb
+halo      HALO_EM_TKE_B dyn_em 4:z,rdz,rdzw,zx,zy
+halo      HALO_EM_TKE_C dyn_em 8:u_2,v_2,z,zx,zy,rdz,rdzw,ustm
+halo      HALO_EM_TKE_D dyn_em 8:defor11,defor22,defor33,defor12,defor13,defor23,div
+halo      HALO_EM_TKE_E dyn_em 8:xkmv,xkmh,xkhv,xkhh,BN2,moist
+halo      HALO_EM_TKE_3 dyn_em   24:tke_1,tke_2
+halo      HALO_EM_TKE_5 dyn_em   48:tke_1,tke_2
+halo      HALO_EM_TKE_7 dyn_em   80:tke_1,tke_2
+halo      HALO_EM_TKE_F dyn_em   48:tke_1,tke_2
+halo      HALO_EM_TKE_OLD_E_5 dyn_em   48:tke_1
+halo      HALO_EM_TKE_OLD_E_7 dyn_em   80:tke_1
+halo      HALO_EM_B dyn_em 4:ph_2,al,p,t_1,t_save,u_save,v_save,mu_1,mu_2,mudf,php,alt,pb
+halo      HALO_EM_B2 dyn_em 4:ru_tend,rv_tend
+halo      HALO_EM_C dyn_em    4:u_2,v_2
+halo      HALO_EM_C2 dyn_em    4:ph_2,al,p,mu_2,muts,mudf
+halo      HALO_EM_D dyn_em    24:ru_m,rv_m,ww_m,mut
+halo      HALO_EM_D2_3 dyn_em 24:u_2,v_2,w_2,t_2,ph_2;24:moist,chem,scalar;4:mu_2,al
+halo      HALO_EM_D2_5 dyn_em 48:u_2,v_2,w_2,t_2,ph_2;24:moist,chem,scalar;4:mu_2,al
+halo      HALO_EM_D3_3 dyn_em 24:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,moist,chem,scalar;4:mu_1,mu_2
+halo      HALO_EM_D3_5 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,moist,chem,scalar;4:mu_1,mu_2
+halo      HALO_EM_E_3 dyn_em 24:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,;4:mu_1,mu_2
+halo      HALO_EM_E_5 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,;4:mu_1,mu_2
+halo      HALO_EM_MOIST_E_3 dyn_em 24:moist
+halo      HALO_EM_MOIST_E_5 dyn_em 48:moist
+halo      HALO_EM_MOIST_E_7 dyn_em 80:moist
+halo      HALO_CUP_G3_IN dyn_em 24:RTHFTEN,RQVFTEN,w_2
+halo      HALO_CUP_G3_OUT dyn_em 48:cugd_tten,cugd_qvten,cugd_ttens,cugd_qvtens,raincv
+halo      HALO_EM_CHEM_E_3 dyn_em 24:chem
+halo      HALO_EM_CHEM_E_5 dyn_em 48:chem
+halo      HALO_EM_CHEM_E_7 dyn_em 80:chem
+halo      HALO_EM_SCALAR_E_3 dyn_em 24:scalar
+halo      HALO_EM_SCALAR_E_5 dyn_em 48:scalar
+halo      HALO_EM_SCALAR_E_7 dyn_em 80:scalar
+halo      HALO_TOPOSHAD phys 24:ht_shad
+
+halo      HALO_EM_MOIST_OLD_E_3 dyn_em 24:moist_old
+halo      HALO_EM_MOIST_OLD_E_5 dyn_em 48:moist_old
+halo      HALO_EM_MOIST_OLD_E_7 dyn_em 80:moist_old
+halo      HALO_EM_CHEM_OLD_E_3 dyn_em 24:chem_old
+halo      HALO_EM_CHEM_OLD_E_5 dyn_em 48:chem_old
+halo      HALO_EM_CHEM_OLD_E_7 dyn_em 80:chem_old
+halo      HALO_EM_SCALAR_OLD_E_3 dyn_em 24:scalar_old
+halo      HALO_EM_SCALAR_OLD_E_5 dyn_em 48:scalar_old
+halo      HALO_EM_SCALAR_OLD_E_7 dyn_em 80:scalar_old
+
+halo      HALO_EM_FEEDBACK   dyn_em 48:ht
+halo      HALO_EM_HYDRO_UV   dyn_em 8:u_2,v_2
+
+halo      HALO_EM_COUPLE_A   dyn_em 24:mub,mu_1,mu_2
+period    PERIOD_EM_COUPLE_A dyn_em 2:mub,mu_1,mu_2
+halo      HALO_EM_COUPLE_B   dyn_em 48:ph_1,ph_2,w_1,w_2,t_1,t_2,u_1,u_2,v_1,v_2,\
+                                       moist,chem,scalar
+period    PERIOD_EM_COUPLE_B dyn_em 3:ph_1,ph_2,w_1,w_2,t_1,t_2,u_1,u_2,v_1,v_2,\
+                                       moist,chem,scalar
+
+# For moving nests
+halo      em_shift_halo_y  dyn_em 48:imask_nostag,imask_xstag,imask_ystag,imask_xystag,u_2,v_2,t_2
+halo      em_shift_halo_x  dyn_em 48:imask_nostag,imask_xstag,imask_ystag,imask_xystag,u_2,v_2,t_2
+
+# For observational nudging
+halo      HALO_OBS_NUDGE dyn_em 24:pb,p,uratx,vratx,tratx
+
+# Periodic Boundary Communications
+
+period    PERIOD_BDY_EM_INIT dyn_em 3:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,t_init,phb,ph0,php,pb,al,alt,alb,mu_1,mu_2,mub,mu0,ht,msftx,msfty,msfux,msfuy,msfvx,msfvy,msfvx_inv,sina,cosa,e,f
+period    PERIOD_BDY_EM_MOIST dyn_em 3:moist
+period    PERIOD_BDY_EM_CHEM dyn_em 3:chem
+period    PERIOD_BDY_EM_SCALAR dyn_em 3:scalar
+period    PERIOD_BDY_EM_MOIST2 dyn_em 3:moist
+period    PERIOD_BDY_EM_CHEM2 dyn_em 3:chem
+period    PERIOD_BDY_EM_SCALAR2 dyn_em 3:scalar
+period    PERIOD_BDY_EM_MOIST_OLD dyn_em 3:moist_old
+period    PERIOD_BDY_EM_CHEM_OLD dyn_em 3:chem_old
+period    PERIOD_BDY_EM_SCALAR_OLD dyn_em 3:scalar_old
+period    PERIOD_BDY_EM_TKE_OLD dyn_em 3:tke_1
+period    PERIOD_EM_HYDRO_UV dyn_em 1:u_2,v_2
+period    PERIOD_BDY_EM_A dyn_em 2:ru,rv,rw,ww,php,alt,p,muu,muv,mut,ph_2,al
+period    PERIOD_BDY_EM_A1  dyn_em 3:rdzw,rdz,z,zx,zy,ustm
+period    PERIOD_BDY_EM_PHY_BC dyn_em 2:rublten,rvblten,xkmh,xkmv,xkhh,xkhv,div,defor11,defor22,defor12,defor13,defor23,defor33,tke_2
+period    PERIOD_BDY_EM_FDDA_BC dyn_em 2:rundgdten,rvndgdten
+period    PERIOD_BDY_EM_B dyn_em 2:ru_tend,rv_tend,ph_2,al,p,t_1,t_save,u_save,v_save,mu_1,mu_2,mudf,php,alt,pb
+period    PERIOD_BDY_EM_B3 dyn_em 2:ph_2,al,p,mu_2,muts,mudf
+period    PERIOD_BDY_EM_B2 dyn_em 2:ru_tend,rv_tend
+period    PERIOD_BDY_EM_C dyn_em 2:u_2,u_save,v_2,v_save,t_2,t_save,muv,msfvx,msfvy,muu,msfux,msfuy,msfvx_inv
+period    PERIOD_BDY_EM_D dyn_em 3:u_2,v_2,w_2,t_2,ph_2,mu_2,tke_2
+period    PERIOD_BDY_EM_D3 dyn_em 3:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,mu_1,mu_2
+
+#
+#swap SWAP_ETAMP_NEW  dyn_em 1:dz8w,p_phy,pi_phy,rho,th_phy,moist,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,RAINNC,RAINNCV,SR,LOWLYR
+#swap SWAP_WSM3       dyn_em 1:th_phy,moist,w_2,rho,pi_phy,p_phy,dz8w,rainnc,rainncv
+#cycle CYCLE_TEST       dyn_em 1:xlong
+
+##
+
+# FDDA (Observational-nudging) Variables
+typedef fdob_type integer domain_tot   # total number of domains to apply obs-nudging
+typedef fdob_type integer IEODI        # end of obs data flag for current model step
+typedef fdob_type integer IWTSIG       # flag for nudging on pressure surfaces
+typedef fdob_type integer NSTAT        # number of obs stations used to nudge current model step
+typedef fdob_type integer NSTAW        # number of obs stations within current time window
+typedef fdob_type integer KTAUR        # restart model step
+typedef fdob_type integer SN_MAXCG     # coarse domain grid dimension in south-north coordinate
+typedef fdob_type integer WE_MAXCG     # coarse domain grid dimension in west-east coordinate
+typedef fdob_type integer SN_END       # ending north-south grid index
+typedef fdob_type integer LEVIDN(max_domains)   # level of nest
+typedef fdob_type real    WINDOW       # time window half-period for nudging (in minutes) 
+typedef fdob_type real    RTLAST       # time in hours of last obs used in current model step
+typedef fdob_type real    DATEND       # time in minutes after which data are asuumed to have ended
+typedef fdob_type real    RINFMN       # minimum radius of influence
+typedef fdob_type real    RINFMX       # maximum radius of influence
+typedef fdob_type real    PFREE        # pressure level (cb) where terrain effect becomes small
+typedef fdob_type real    DCON         # 1/DPSMX
+typedef fdob_type real    DPSMX        # max pres change (cb) allowed within infl range of surf obs 
+typedef fdob_type real    TFACI        # scale factor used for ramp-down in dynamic initialization
+typedef fdob_type real    KNOWN_LAT    # Latitude  of origin point (i,j)=(1,1)
+typedef fdob_type real    KNOWN_LON    # Longitude of origin point (i,j)=(1,1)
+
+# table entries are of the form
+#      <Table>  <Type>  <Sym>                <Dims>   <Use>   <NumTLev> <Stagger> <IO>     <DNAME>             <DESCRIP>     <UNITS>
+#Grid variables
+typedef fdob_type real    varobs               rz       -         1        -       -       "varobs"          "observational values in each variable"
+typedef fdob_type real    errf                 hz       -         1        -       -       "errf"            "errors between model and obs values"
+typedef fdob_type real    timeob               z        -         1        -       -       "timeob"          "model times for each observation"          "hours"
+typedef fdob_type real    nlevs_ob             z        -         1        -       -       "nlevs_ob"        "numbers of levels in sounding obs"
+typedef fdob_type real    lev_in_ob            z        -         1        -       -       "lev_in_ob"       "level in sounding-type obs"
+typedef fdob_type real    plfo                 z        -         1        -       -       "plfo"            "index for type of obs-platform"
+typedef fdob_type real    elevob               z        -         1        -       -       "elevob"          "elevation of observation"                  "meters"
+typedef fdob_type real    rio                  z        -         1        -       -       "rio"             "west-east grid coordinate"
+typedef fdob_type real    rjo                  z        -         1        -       -       "rjo"             "south-north grid coordinate"
+typedef fdob_type real    rko                  z        -         1        -       -       "rko"             "vertical grid coordinate"
+
+state fdob_type fdob - -
+
+# xpose variables for polar fft
+state    real   t_xxx          ikjx    -           1        -
+state    real   u_xxx          ikjx    -           1        X
+state    real   ru_xxx         ikjx    -           1        X
+state    real   v_xxx          ikjx    -           1        Y
+state    real   rv_xxx         ikjx    -           1        Y
+state    real   w_xxx          ikjx    -           1        Z
+state    real   ww_xxx         ikjx    -           1        Z
+state    real   ph_xxx         ikjx    -           1        Z
+state    real   dum_yyy        ikjy    -           1        -
+state    real   fourd_xxx      ikjx    -           1        -
+state    real   clat_xxx       ijx     -           1        -
+state    real   ht_xxx         ijx     -           1        -
+state    real   mf_xxx         ijx     -           1        -
+
+xpose XPOSE_POLAR_FILTER_TOPO dyn_em t_init,t_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_T  dyn_em t_2,t_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_U  dyn_em u_2,u_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_RU dyn_em ru_m,ru_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_V  dyn_em v_2,v_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_RV dyn_em rv_m,rv_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_W  dyn_em w_2,w_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_WW dyn_em ww_m,ww_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_PH dyn_em ph_2,ph_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_MOIST dyn_em moist,fourd_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_CHEM dyn_em chem,fourd_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_SCALAR dyn_em scalar,fourd_xxx,dum_yyy
+
+##
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Registry.bash
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Registry.bash	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/Registry.bash	(revision 142)
@@ -0,0 +1,1 @@
+link ../../WRFV2/Registry/Registry.bash
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/getturb.pro
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/getturb.pro	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/getturb.pro	(revision 142)
@@ -0,0 +1,430 @@
+pro getturb, saveps=saveps
+
+
+
+;----------------------------------
+; USE: getturb
+;      getturb, saveps='false'     
+;----------------------------------
+
+
+history_interval_s = 100.
+smoothampl=3700/history_interval_s
+smoothampl=0.
+
+;
+; constantes
+;
+p0=610. & t0=220. & r_cp=1/4.4 & grav=3.72 & R=192.
+
+;
+; graphics definition
+;
+if (n_elements(saveps) eq 0) then saveps='true'
+if (saveps eq 'false') then begin
+   ;!p.multi=[0,3,2] 
+   !P.CHARSIZE=2.
+   WINDOW, /PIXMAP & WDELETE & DEVICE,BYPASS_TRANSLATION=0,DECOMPOSED=0,RETAIN=2
+endif else begin
+   PREF_SET, 'IDL_PATH', '/home/spiga/Save/SOURCES/IDL/fsc_psconfig:<IDL_DEFAULT>', /COMMIT
+endelse
+
+;
+; retrieve fields
+;
+openr,unit,'getturb.dat',/get_lun,error=err
+IF (err ne 0) THEN BEGIN
+
+;
+; input files
+;
+OPENR, 22, 'input_coord' & READF, 22, lonu & READF, 22, latu & READF, 22, lsu & READF, 22, lctu & CLOSE, 22
+OPENR, 23, 'input_more' & READF, 23, hgtu, tsurfu & CLOSE, 23
+
+;
+; get fields
+;
+domain='d01' & filesWRF = FindFile('wrfout_'+domain+'_????-??-??_??:??:??') & nf=n_elements(filesWRF)
+
+;
+; get dimensions
+;
+id=ncdf_open(filesWRF(0))
+NCDF_DIMINQ, id, NCDF_DIMID(id, 'west_east'    ), toto, nx & NCDF_DIMINQ, id, NCDF_DIMID(id, 'south_north'  ), toto, ny
+NCDF_DIMINQ, id, NCDF_DIMID(id, 'bottom_top'   ), toto, nz & NCDF_DIMINQ, id, NCDF_DIMID(id, 'Time'         ), toto, nt
+NCDF_CLOSE, id 
+
+;
+; prepare loop
+;
+nloop1 = nf-1 & nloop2 = nt & yeye = 0 
+localtime = lctu + history_interval_s*findgen(nloop1*nloop2)/3700.
+wt  = fltarr(nz,nloop1*nloop2) & tke = fltarr(nz,nloop1*nloop2) & ztke = fltarr(nz,nloop1*nloop2) & t = fltarr(nz,nloop1*nloop2)
+p = fltarr(nz) & ph = fltarr(nz) & pht = fltarr(nz,nloop1*nloop2) & pt = fltarr(nz,nloop1*nloop2) & stst = fltarr(nz,nloop1*nloop2)
+
+;
+; loop loop
+;
+for loop  = 0, nloop1-1 do begin
+                                          timetime = SYSTIME(1)
+for loop2 = 0, nloop2-1 do begin
+
+   ; t' = t - <t>
+   ; ------------
+ yeyeye = 1.
+ tprime = getget(filesWRF(loop), 'T', anomaly=yeyeye, count=[0,0,0,1], offset=[0,0,0,loop2])  ;; t' = t - <t>
+ t(*,yeye) = t0 + TEMPORARY(yeyeye)
+   ; w' = w   
+   ; ------
+ wprime  = getget(filesWRF(loop), 'W', count=[0,0,0,1], offset=[0,0,0,loop2])     
+   ; tke = 0.5 ( <u'^2> + <v'^2> + <w'^2> ) ; u' = u ; v' = v  
+   ; --------------------------------------------------------
+ ztke(*,yeye) = 0.5 * TOTAL(TOTAL(wprime^2,1),1) / float(nx) / float(ny)
+ tke(*,yeye) = ztke(*,yeye) + $
+               0.5 * ( $
+        TOTAL(TOTAL(getget(filesWRF(loop), 'U', count=[0,0,0,1], offset=[0,0,0,loop2])^2,1),1) + $  
+        TOTAL(TOTAL(getget(filesWRF(loop), 'V', count=[0,0,0,1], offset=[0,0,0,loop2])^2,1),1)   $  
+        ) / float(nx) / float(ny)  
+   ; <w't'>
+   ; ------
+ wt(*,yeye)  = TOTAL(TOTAL(TEMPORARY(tprime)  * TEMPORARY(wprime),1),1) / float(nx) / float(ny)  
+   ; p & ph
+   ; ------
+ if (loop + loop2 eq 0) then nloopbeware = nloop2-1 else nloopbeware = nloop2  ; 1ere valeur vaut 0
+ pht(*,yeye) = TOTAL(TOTAL(getget(filesWRF(loop), 'PHTOT',  count=[0,0,0,1], offset=[0,0,0,loop2]),1),1) / float(nx) / float(ny) / 1000. / 3.72
+ pt(*,yeye)  = TOTAL(TOTAL(getget(filesWRF(loop), 'PTOT' ,  count=[0,0,0,1], offset=[0,0,0,loop2]),1),1) / float(nx) / float(ny)
+ ph = TEMPORARY(ph) + pht(*,yeye) / nloopbeware / nloop1
+ p  = TEMPORARY(p ) + pt(*,yeye) / nloop2 / nloop1
+   ; static stability
+   ; ----------------
+ stst(*,yeye) = DERIV( reform(pht(*,yeye)) - hgtu/1000. , reform(t(*,yeye)) * ( reform(pt(*,yeye)) /p0 )^r_cp ) + 1000.*grav / (R / r_cp)  ;; 4.9 dans Hinson
+   ; loop count
+   ; ---------
+ yeye = TEMPORARY(yeye) + 1 
+
+endfor
+                                          print, 'file '+string(loop+1,'(I0)'), SYSTIME(1) - timetime, ' s'
+endfor
+h  = TEMPORARY(ph)  - hgtu/1000.  ;; altitude above ground
+ht = TEMPORARY(pht) - hgtu/1000.  
+;
+; save
+;
+save, wt, tke, ztke, h, ht, t, p, pt, stst, localtime, filename='getturb.dat'
+
+ENDIF ELSE BEGIN
+
+print, 'OK, file is here'
+restore, filename='getturb.dat'
+
+ENDELSE
+
+;
+; smooth smooth
+;
+wt  = SMOOTH(TEMPORARY(wt),  [0,smoothampl], /EDGE_TRUNCATE)
+tke = SMOOTH(TEMPORARY(tke), [0,smoothampl], /EDGE_TRUNCATE)
+ztke = SMOOTH(TEMPORARY(ztke), [0,smoothampl], /EDGE_TRUNCATE)
+
+
+;*******************;
+;*******************;
+; PLOTS PLOTS PLOTS ;
+;*******************;
+;*******************;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+zefield       =  transpose(tke) 
+zex           =  localtime 
+zey           =  h
+set_name      =  'TKE.ps'
+set_title     =  "Turbulent Kinetic Energy 0.5[<u'!U2!N>+<v'!U2!N>+<w'!U2!N>] (m!U2!N.s!U-2!N)"
+set_titlex    =  'Local Time (h)'
+set_titley    =  'Altitude above surface (km)'
+set_subtitle  =  'Mean over the simulation domain'
+set_xrange    =  [8.,18.]
+set_yrange    =  [0.,10.]
+set_tickx     =  1.
+set_ticky     =  1.
+minval        =  0.
+maxval        =  20. ;15.
+nlev          =  maxval-minval
+pal           =  22
+rrr           =  'no'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then PS_Start, FILENAME=set_name
+!P.Charsize = 1.2
+;; 0. levels
+lev = minval + (maxval-minval)*findgen(nlev+1)/float(nlev) & if (minval ne 0.) then lev = lev[where(lev ne 0.)]
+;;; 1. background
+loadct, 0 & contour, /NODATA, zefield, zex, zey, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0 
+;; 2. color field
+loadct, pal & if (rrr eq 'yes') then TVLCT, r, g, b, /Get & if (rrr eq 'yes') then TVLCT, Reverse(r), Reverse(g), Reverse(b) 
+            contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /overplot, /cell_fill
+;; 3. contour field
+loadct, 0 & contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /noerase, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, C_LINESTYLE = (lev LT 0.0)
+;; 4. choose output
+if (saveps eq 'true') then PS_End, /PNG
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+zefield       =  transpose(ztke)
+;zefield       =  100.*transpose(ztke)/transpose(tke) & zefield[where(transpose(tke) lt 1.)]=0.
+zex           =  localtime
+zey           =  h
+set_name      =  'zTKE.ps'
+set_title     =  "Vertical Turbulent Kinetic Energy 0.5[<w'!U2!N>] (m!U2!N.s!U-2!N)"
+set_titlex    =  'Local Time (h)'
+set_titley    =  'Altitude above surface (km)'
+set_subtitle  =  'Mean over the simulation domain'
+set_xrange    =  [8.,18.]
+set_yrange    =  [0.,10.]
+set_tickx     =  1.
+set_ticky     =  1.
+minval        =  0.
+maxval        =  14. ;10.
+nlev          =  maxval-minval
+pal           =  22
+rrr           =  'no'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then PS_Start, FILENAME=set_name
+!P.Charsize = 1.2
+;; 0. levels
+lev = minval + (maxval-minval)*findgen(nlev+1)/float(nlev) & if (minval ne 0.) then lev = lev[where(lev ne 0.)]
+;;; 1. background
+loadct, 0 & contour, /NODATA, zefield, zex, zey, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0
+;; 2. color field
+loadct, pal & if (rrr eq 'yes') then TVLCT, r, g, b, /Get & if (rrr eq 'yes') then TVLCT, Reverse(r), Reverse(g), Reverse(b)
+            contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /overplot, /cell_fill
+;; 3. contour field
+loadct, 0 & contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /noerase, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, C_LINESTYLE = (lev LT 0.0)
+;; 4. choose output
+if (saveps eq 'true') then PS_End, /PNG
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+zefield       =  transpose(wt)
+zex           =  localtime
+zey           =  h
+set_name      =  'HF.ps'
+set_title     =  "Vertical Eddy Heat Flux <w'!7h!3'> (K.m.s!U-1!N)"
+set_titlex    =  'Local Time (h)'
+set_titley    =  'Altitude above surface (km)'
+set_subtitle  =  'Mean over the simulation domain'
+set_xrange    =  [8.,18.]
+set_yrange    =  [0.,10.]
+set_tickx     =  1.
+set_ticky     =  1.
+minval        =  -2.
+maxval        =  2.
+nlev          =  floor(maxval-minval)*10
+pal           =  33 ;4 
+rrr           =  'no'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then PS_Start, FILENAME=set_name
+!P.Charsize = 1.2
+;; 0. levels
+lev = minval + (maxval-minval)*findgen(nlev+1)/float(nlev) & if (minval ne 0.) then lev = lev[where(lev ne 0.)]
+;;; 1. background
+loadct, 0 & contour, /NODATA, zefield, zex, zey, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0
+;; 2. color field
+loadct, pal & if (rrr eq 'yes') then TVLCT, r, g, b, /Get & if (rrr eq 'yes') then TVLCT, Reverse(r), Reverse(g), Reverse(b)
+            ;;;--------------------------------------------------------------------------------------------------------------------------------
+            ;;; WHITE ZONE - 1. get location of interval in the CT - 2. change the CT to have a white zone
+            ulim=0.09 & dlim=-0.09 & w=where(lev le dlim) & n1=w[n_elements(w)-1] & w=where(lev ge ulim) & n2=w[0] & yy=BYTSCL(lev) & nd=yy[n1] & nu=yy[n2]-5
+            nu = nd + (nu-nd)/2  ;; otherwise the interval is too large (because we removed 0)
+            TVLCT, r, g, b, /Get & r[nd:nu]=255 & g[nd:nu]=255 & b[nd:nu]=255 & TVLCT, r, g, b
+            ;;;--------------------------------------------------------------------------------------------------------------------------------
+            contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /overplot, /cell_fill
+;; 3. contour field
+loadct, 0 & contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /noerase, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, C_LINESTYLE = (lev LT 0.0)
+;; 4. choose output
+if (saveps eq 'true') then PS_End, /PNG
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+zefield       =  t
+zey           =  ht 
+set_name      =  'T.ps'
+set_title     =  "Potential Temperature (K)"
+set_titlex    =  'Potential Temperature (K)'
+set_titley    =  'Altitude above surface (km)'
+set_subtitle  =  'Mean over the simulation domain'
+set_xrange    =  [min(t),max(t)]
+set_yrange    =  [0.,10.]
+set_tickx     =  5.
+set_ticky     =  1.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+localtimes = [9,10,11,12,13,14,15,16,17,18]
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then PS_Start, FILENAME=set_name
+!P.Charsize = 1.2
+altlin=0 & loadct, 0
+user_lt=localtimes[0] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0)
+plot, zefield(*,nntt), zey(*,nntt), xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, linestyle=altlin
+for ll = 1, n_elements(localtimes)-1 do begin
+  CASE altlin OF
+  0: altlin=1
+  1: altlin=0
+  ENDCASE  
+  user_lt=localtimes[ll] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0)
+  if (nntt ne -1) then oplot, zefield(*,nntt), zey(*,nntt), linestyle=altlin
+endfor
+if (saveps eq 'true') then PS_End, /PNG
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+zefield       =  stst
+zey           =  ht 
+set_name      =  'STST.ps'
+set_title     =  'Static stability (K.m!U-1!N)'
+set_titlex    =  'Static stability (K.m!U-1!N)'
+set_titley    =  'Altitude above surface (km)'
+set_subtitle  =  'Mean over the simulation domain'
+set_xrange    =  [-1.,5.]
+set_yrange    =  [0.,10.]
+set_tickx     =  1.
+set_ticky     =  1.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+localtimes = [9,11,13,15,17]
+localtimes = [17]
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then PS_Start, FILENAME=set_name
+!P.Charsize = 1.2
+altlin=0 & loadct, 0
+user_lt=localtimes[0] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0)
+plot, zefield(*,nntt), zey(*,nntt), xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, linestyle=altlin
+oplot, zefield(*,nntt), zey(*,nntt), psym=5
+for ll = 1, n_elements(localtimes)-1 do begin
+  CASE altlin OF
+  0: altlin=1 
+  1: altlin=0
+  ENDCASE
+  user_lt=localtimes[ll] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0)
+  if (nntt ne -1) then oplot, zefield(*,nntt), zey(*,nntt), linestyle=altlin
+  ;if (nntt ne -1) then oplot, zefield(*,nntt), zey(*,nntt), psym=5
+endfor
+oplot, 0.*zefield(*,nntt) + 1.5, zey(*,nntt), linestyle=2  
+if (saveps eq 'true') then PS_End, /PNG
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+stop
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+goto, no_staticstab
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then begin
+  device, /close
+  set_plot, 'ps' & device, filename='plot/staticstab.ps'
+endif
+
+user_lt=17. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+
+   ;;; recompute height @ given local time 
+   caca=heightp+hgtu/1000.
+   height=reform(ph(*,0,*,*))
+   height=total(height,1)/n_elements(height(*,0,0))
+   height=reform(height)
+   height=reform(height(*,yeah(0)))
+   height=height/1000./3.72
+   heightp=height(0:n_elements(height(*))-2) 
+   print, 'new minus old', heightp - caca
+   ;;; recompute height @ given local time 
+
+        press=reform(p(*,0,*,*))
+        press=total(press,1)/n_elements(press(*,0,0))
+        press=reform(press)
+        press=reform(press(*,yeah(0)))
+        press=press(0:n_elements(press(*))-2)
+
+staticstab = DERIV( heightp , reform(what_I_plot5(*,yeah(0))) ) + 1000.*3.72/844.6  ;; 4.9 dans Hinson
+   staticstab = staticstab(0:n_elements(staticstab)-5)
+   heightp = heightp(0:n_elements(heightp)-5)
+
+plot, $
+        staticstab, $
+        heightp,$
+        xtitle='Static stability (K/km)',$
+        xrange=[-1.,5.], $
+        xtickinterval=0.5, $
+        ytitle='Altitude above surface (km)', $
+        yrange=[min(heightp),max(heightp)], $
+        ytickinterval=1., $
+        title="LMD LES Static stability @ LT 17h (K/km)", $
+        subtitle='zonal average at lat. '+latwrite
+oplot, $
+        staticstab, $
+        heightp,$
+        psym=5
+oplot, $
+       findgen(n_elements(heightp))*0. + 1.,$
+       heightp,$
+       linestyle=2
+oplot, $
+       findgen(n_elements(heightp))*0. + 2.,$
+       heightp,$
+       linestyle=2
+
+;;;;;;;;;;
+w = where((staticstab gt 1.5) and ((heightp- hgtu/1000.) gt 1.))
+t_top_plus = what_I_plot5(w(0),yeah(0))
+z_top_plus = heightp(w(0))
+p_top_plus = press(w(0))
+t_top_moins = what_I_plot5(w(0)-1,yeah(0))
+z_top_moins = heightp(w(0)-1)
+p_top_moins = press(w(0)-1)
+pbl_depth = (z_top_plus*alog(p_top_plus) + z_top_moins*alog(p_top_moins))/(alog(p_top_plus) + alog(p_top_moins)) - hgtu/1000.
+xyouts, 3., 1.5 + (max(heightp) + min(heightp)) / 3., 'Ls = '+string(lsu,'(F5.1)')+'!Uo!N', CHARSIZE=1
+xyouts, 3., 1. + (max(heightp) + min(heightp)) / 3., 'Lat = '+string(latu,'(F5.1)')+'!Uo!N', CHARSIZE=1
+xyouts, 3., 0.5 + (max(heightp) + min(heightp)) / 3., 'LonE = '+string(lonu,'(F6.1)')+'!Uo!N', CHARSIZE=1
+xyouts, 3., (max(heightp) + min(heightp)) / 3., 'T!Dt!N = '+string(t_top_plus,'(I0)')+'/'+string(t_top_moins,'(I0)')+' K ', CHARSIZE=1
+xyouts, 3., -0.5 + (max(heightp) + min(heightp)) / 3., 'p!Dt!N = '+string(p_top_plus,'(I0)')+'/'+string(p_top_moins,'(I0)')+' Pa', CHARSIZE=1
+xyouts, 3., -1. + (max(heightp) + min(heightp)) / 3., 'z!Dt!N = '+string(z_top_plus,'(F4.1)')+'/'+string(z_top_moins,'(F4.1)')+' km', CHARSIZE=1
+xyouts, 3., -1.5 + (max(heightp) + min(heightp)) / 3., 'z!Ds!N = '+string(hgtu/1000.,'(F4.1)')+' km', CHARSIZE=1
+xyouts, 3., -2. + (max(heightp) + min(heightp)) / 3., 'D = '+string(pbl_depth,'(F4.1)')+' km', CHARSIZE=1
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+no_staticstab:
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then begin
+  device, /close
+endif
+stop
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+user_lt=13.
+yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+
+user_h=0.1
+walt=where(abs(heightp-user_h) eq (min(abs(heightp-user_h))))
+
+;mapfield=reform(t[*,*,walt(0),w(0)])
+;help, mapfield
+;contour, mapfield
+
+section=reform(w[*,0,*,yeah(0)])
+
+section=reform(w[*,0,*,160])
+
+lev=[-12.,-8.,-4.,4.,8.,12.]
+lev=[-5.,-4.,-3.,-2.,-1.,1.,2.,3.,4.,5.]
+contour, $
+	section, $
+	(lon(*,0)-lon(0,0))*59., $
+	heightp, $
+	levels=lev , $
+	C_LINESTYLE = (lev LT 0.0)
+
+device, /close
+
+end
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/input_vert
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/input_vert	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/input_vert	(revision 142)
@@ -0,0 +1,2 @@
+3. 0.4
+delt z_scale
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/launch
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/launch	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/launch	(revision 142)
@@ -0,0 +1,43 @@
+#PBS -S  /bin/bash
+#PBS -j  oe
+#PBS -q  infini
+#PBS -N  EXOMARS 
+#PBS -l "nodes=1:ppn=8"
+##PBS -l "nodes=4:ppn=4"
+##PBS -l "nodes=2:ppn=4"
+##PBS -l "nodes=1:ppn=12"
+
+##PBS -l walltime=10:30,mem=320kb
+
+######## openMP threads
+#cat $PBS_NODEFILE | sort | uniq > /tmp/coucou
+#cat /tmp/coucou
+#declare -x OMP_NUM_THREADS=4
+
+#declare -x MP_STACK_SIZE=64000000
+
+####### prep run
+cd $PBS_O_WORKDIR
+\rm  *rsl.* 2>  /dev/null
+\rm  wrfo*  2>  /dev/null
+\rm  wrfi*  2>  /dev/null
+./ideal.exe
+mv rsl.out.0000 ideal_rsl.out.0000
+
+####### run
+#mpirun yeye
+mpirun wrf.exe
+
+
+################
+
+###PBS -l "nodes=2:ppn=8"
+
+#declare -x OMP_NUM_THREADS=4
+#declare -x MP_STACK_SIZE=64000000
+
+#mpirun wrf.exe 
+
+####PBS -m ae
+####PBS -M spiga@lmd.jussieu.fr
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/les_save_this_simu
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/les_save_this_simu	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/les_save_this_simu	(revision 142)
@@ -0,0 +1,63 @@
+#! /bin/bash
+
+\rm simtime 2> /dev/null
+
+mkdir results
+
+if [[ -f extract_turb ]]
+then
+
+  #./extract_turb
+  mv *.nc results/
+
+fi
+
+if [[ -d plot ]]
+then
+
+  mv plot results/
+  mv getcdf.pro results/
+  mv turbulence.pro results/
+  \rm turbulence.dat 2> /dev/null   
+
+fi
+
+if [[ -f rsl.error.0000 ]]
+then
+
+  timesec=$(more rsl.error.0000 | grep elapsed | grep 'Timing for main' | awk '{s+=$9} END{print s}')
+  touch simtime
+  echo ${timesec} seconds
+  echo ${timesec} seconds >> simtime
+
+  head -10000 rsl.out.0000 > red_rsl.out.0000
+  head -4000 rsl.error.0000 > red_rsl.error.0000
+  mv red_rsl.* results/
+  mv ideal_rsl.out.0000 results/
+  mv simtime results/
+
+else
+
+  timesec=$(more log_wrf | grep elapsed | grep 'Timing for main' | awk '{s+=$9} END{print s}')
+  touch simtime
+  echo ${timesec} seconds
+  echo ${timesec} seconds >> simtime
+
+  head -10000 log_wrf > red_log_wrf
+  mv red_log_wrf results/
+  mv simtime results/  
+  mv met_em/log_real results/
+
+fi
+
+tar czvf def.tar.gz namelist.input *.def input_* launch 
+cp def.tar.gz results/ 
+
+mv wrfout* results/
+mv namelist.output results/
+ls -lh results
+du -bh results
+echo '*****************************************************'
+echo '*** BEWARE ! *** output files were moved in the folder named results !!!'
+echo 'what you may keep: results folder and def.tar.gz file'
+echo '*****************************************************'
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/makeles
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/makeles	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/makeles	(revision 142)
@@ -0,0 +1,176 @@
+#! /bin/bash
+
+#------------------------------
+# makeles
+#------------------------------
+#     MMM must be defined
+#------------------------------
+# A. Spiga 01/2009
+#------------------------------
+
+
+echo "Use -n if you don't want to recompile physics"
+echo "Use -p if you want the new LMD physics"
+
+#
+# SPECIAL CICLAD
+#
+
+donotcompilephys=0
+phys=""
+while getopts "np" options; do
+  case $options in
+   n ) donotcompilephys=1;; ## do not recompile physics
+   p ) phys="newphys_";;    ## with new physics
+  esac
+done
+
+#
+# LOCATIONS
+#
+here=$PWD
+whereliblmd=$here
+
+
+##############################################################
+##############################################################
+if [ ${donotcompilephys} -eq 0 ]
+then
+
+#
+# COMPILE PHYSICS
+#
+cd $MMM
+  if [[ "${phys}" == "newphys_" ]]
+  then
+    makemeso -j -p
+  else
+    makemeso -j
+  fi 
+#
+#makemeso -rd < last > /dev/null
+folder=$PWD'/'$(more what_folder)'/WRFV2/'
+libphys_folder=$folder'mars_lmd/libo/'
+phymars_folder=$folder'mars_lmd/libf/phymars/'
+\rm what_folder 2> /dev/null
+
+#
+# GET liblmd GENERATED LIBRARY and INCLUDEs
+#
+echo $libphys_folder
+cp -rf ${libphys_folder}/liblmd.a ${whereliblmd}/
+#cp -rf ${phymars_folder}/dimphys.h ${here}/modif_mars/
+cp -rf ${phymars_folder}/dimphys.h ${here}/mars_lmd/libf/phymars/
+#cp -rf ${folder}/call_meso_inifis.inc ${here}/modif_mars/
+#cp -rf ${folder}/call_meso_physiq.inc ${here}/modif_mars/
+cp -rf ${folder}/call_meso_inifis.inc ${here}/
+cp -rf ${folder}/call_meso_physiq.inc ${here}/
+#cp -rf ${folder}/inc/module_lmd_driver_output*.inc ${here}/modif_mars/
+cp -rf ${folder}/inc/module_lmd_driver_output*.inc ${here}/inc/
+#cp -rf ${phymars_folder}/wrf_output_2d.h ${here}/modif_mars/
+#cp -rf ${phymars_folder}/wrf_output_3d.h ${here}/modif_mars/
+cp -rf ${phymars_folder}/wrf_output_2d.h ${here}/mars_lmd/libf/phymars/
+cp -rf ${phymars_folder}/wrf_output_3d.h ${here}/mars_lmd/libf/phymars/
+fi
+##############################################################
+##############################################################
+
+
+cd $here
+
+##------------------------------
+##------------------------------
+##
+## MPI (dm) 64 bits 
+##
+##TODO: le rendre adapte aux reponses du user a makemeso
+touch conf
+echo 3 >> conf 
+##echo 4 >> conf  #openMP n'arrange pas beaucoup de le tps de calcul
+echo 1 >> conf
+##------------------------------
+##------------------------------
+
+
+
+### SINGLE PROC 32 bits g95
+#touch conf
+#echo 5 >> conf
+#echo 0 >> conf
+
+## SINGLE PROC 64 bits
+#touch conf
+#echo 1 >> conf
+#echo 0 >> conf
+
+### MPI (dm) 64 bits IFORT
+#echo IFORT IFORT IFORT IFORT
+#touch conf
+#echo 7 >> conf
+#echo 1 >> conf
+
+
+#
+# CONFIGURE
+#
+echo "configure..."
+#touch configure.wrf
+\rm configure.wrf
+./configure < conf > /dev/null 2> /dev/null
+#./configure 
+#sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+'mpif90 -f90=$(SFC)'+'/usr/lib64/openmpi/1.2.8-pgf/bin/mpif90'+g | sed s+'mpicc -cc=$(SCC)'+'/usr/lib64/openmpi/1.2.8-gcc/bin/mpicc -DMPI2_SUPPORT'+g > yeah
+## WHERE_MPI must be defined
+sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+"mpif90"+"$WHERE_MPI/mpif90"+g | sed s+"mpicc"+"$WHERE_MPI/mpicc -DMPI2_SUPPORT"+g > yeah
+#sed s+"# -g"+"-fno-second-underscore # -g"+g configure.wrf | sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g > yeah
+#sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+"#-g"+"-g"+g > yeah
+#sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf > yeah
+mv yeah configure.wrf
+
+	####
+	#### provoque des seg faults....
+	####
+	#sed s+"-fastsse"+"-fastsse -mcmodel=medium -Mlarge_arrays"+g configure.wrf > yeah
+	#### TEST TEST
+	#mv yeah configure.wrf
+
+sed s+"-fastsse"+" "+g configure.wrf > yeah
+#sed s+"-fastsse"+"-mcmodel=medium -Mlarge_arrays"+g configure.wrf > yeah ##marche pas
+#
+# sometimes fastsse is problematic
+#
+
+##sed s+"-fastsse"+"-fastsse -mcmodel=medium"+g configure.wrf > yeah
+mv yeah configure.wrf
+
+#sed s+"-Mvect=noaltcode"+"#-Mvect=noaltcode"+g configure.wrf > yeah ; mv yeah configure.wrf
+
+#sed s+"-mp -Minfo=mp"+"-mp -Minfo=mp -mp=nonuma"+g configure.wrf > yeah
+#mv yeah configure.wrf
+
+#### OBLIGATOIRE POUR IFORT, OK AVEC LES AUTRES ??? a priori oui
+sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah
+mv yeah configure.wrf
+
+#############################################################
+  if [[ "${phys}" == "newphys_" ]]
+  then
+     sed s+"ARCH_LOCAL      =       "+"ARCH_LOCAL      =       -DNEWPHYS "+g configure.wrf > yeah
+     mv -f yeah configure.wrf
+  fi
+#############################################################
+
+
+\rm conf
+
+#
+# COMPILE LES TEST CASE w/ LMD PHYSICS
+#
+touch modif_mars/module_lmd_driver.F
+\rm log_compile
+\rm log_error
+echo "compile LES WRF with LMD Mars physics... look log_compile and log_error"
+compile em_les > log_compile 2> log_error
+
+echo '***********************************'
+tail -n 20 log_error
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/makeles_ciclad
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/makeles_ciclad	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/makeles_ciclad	(revision 142)
@@ -0,0 +1,180 @@
+#! /bin/bash
+
+#------------------------------
+# makeles
+#------------------------------
+#     MMM must be defined
+#------------------------------
+# A. Spiga 01/2009
+#------------------------------
+
+
+echo "Use -n if you don't want to recompile physics"
+echo "Use -p if you want the new LMD physics"
+
+#
+# SPECIAL CICLAD
+#
+
+donotcompilephys=0
+phys=""
+while getopts "np" options; do
+  case $options in
+   n ) donotcompilephys=1;; ## do not recompile physics
+   p ) phys="newphys_";;    ## with new physics
+  esac
+done
+
+#
+# LOCATIONS
+#
+here=$PWD
+whereliblmd=$here
+
+
+##############################################################
+##############################################################
+if [ ${donotcompilephys} -eq 0 ]
+then
+
+#
+# COMPILE PHYSICS
+#
+cd $MMM
+  if [[ "${phys}" == "newphys_" ]]
+  then
+    makemeso -j -p
+  else
+    makemeso -j
+  fi 
+#
+#makemeso -rd < last > /dev/null
+folder=$PWD'/'$(more what_folder)'/WRFV2/'
+libphys_folder=$folder'mars_lmd/libo/'
+phymars_folder=$folder'mars_lmd/libf/phymars/'
+\rm what_folder 2> /dev/null
+
+#
+# GET liblmd GENERATED LIBRARY and INCLUDEs
+#
+echo $libphys_folder
+cp -rf ${libphys_folder}/liblmd.a ${whereliblmd}/
+#cp -rf ${phymars_folder}/dimphys.h ${here}/modif_mars/
+cp -rf ${phymars_folder}/dimphys.h ${here}/mars_lmd/libf/phymars/
+#cp -rf ${folder}/call_meso_inifis.inc ${here}/modif_mars/
+#cp -rf ${folder}/call_meso_physiq.inc ${here}/modif_mars/
+cp -rf ${folder}/call_meso_inifis.inc ${here}/
+cp -rf ${folder}/call_meso_physiq.inc ${here}/
+#cp -rf ${folder}/inc/module_lmd_driver_output*.inc ${here}/modif_mars/
+cp -rf ${folder}/inc/module_lmd_driver_output*.inc ${here}/inc/
+#cp -rf ${phymars_folder}/wrf_output_2d.h ${here}/modif_mars/
+#cp -rf ${phymars_folder}/wrf_output_3d.h ${here}/modif_mars/
+cp -rf ${phymars_folder}/wrf_output_2d.h ${here}/mars_lmd/libf/phymars/
+cp -rf ${phymars_folder}/wrf_output_3d.h ${here}/mars_lmd/libf/phymars/
+fi
+##############################################################
+##############################################################
+
+
+cd $here
+
+##------------------------------
+##------------------------------
+##
+## MPI (dm) 64 bits 
+##
+##TODO: le rendre adapte aux reponses du user a makemeso
+touch conf
+echo 3 >> conf 
+##echo 4 >> conf  #openMP n'arrange pas beaucoup de le tps de calcul
+echo 1 >> conf
+##------------------------------
+##------------------------------
+
+
+
+### SINGLE PROC 32 bits g95
+#touch conf
+#echo 5 >> conf
+#echo 0 >> conf
+
+## SINGLE PROC 64 bits
+#touch conf
+#echo 1 >> conf
+#echo 0 >> conf
+
+### MPI (dm) 64 bits IFORT
+#echo IFORT IFORT IFORT IFORT
+#touch conf
+#echo 7 >> conf
+#echo 1 >> conf
+
+
+#
+# CONFIGURE
+#
+echo "configure..."
+#touch configure.wrf
+\rm configure.wrf
+./configure < conf > /dev/null 2> /dev/null
+#./configure 
+#sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+'mpif90 -f90=$(SFC)'+'/usr/lib64/openmpi/1.2.8-pgf/bin/mpif90'+g | sed s+'mpicc -cc=$(SCC)'+'/usr/lib64/openmpi/1.2.8-gcc/bin/mpicc -DMPI2_SUPPORT'+g > yeah
+#sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+'mpif90 -f90=$(SFC)'+'/usr/lib64/openmpi/1.2.8-pgf/bin/mpif90'+g | sed s+'mpicc -cc=$(SCC)'+'/usr/lib64/openmpi/1.2.8-pgf/bin/mpicc -DMPI2_SUPPORT'+g > yeah
+   ##### NEW NEW NEW NEW
+   #sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+'mpif90 -f90=$(SFC)'+'/usr/lib64/openmpi/1.4.2-pgf/bin/mpif90'+g | sed s+'mpicc -cc=$(SCC)'+'/usr/lib64/openmpi/1.4.2-gfortran/bin/mpicc -DMPI2_SUPPORT'+g > yeah
+   sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+'mpif90 -f90=$(SFC)'+'/usr/lib64/openmpi/1.4.3-pgfgcc/bin/mpif90'+g | sed s+'mpicc -cc=$(SCC)'+'/usr/lib64/openmpi/1.4.3-pgfgcc/bin/mpicc -DMPI2_SUPPORT'+g > yeah
+#sed s+"# -g"+"-fno-second-underscore # -g"+g configure.wrf | sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g > yeah
+#sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+"#-g"+"-g"+g > yeah
+#sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf > yeah
+mv yeah configure.wrf
+
+	####
+	#### provoque des seg faults....
+	####
+	#sed s+"-fastsse"+"-fastsse -mcmodel=medium -Mlarge_arrays"+g configure.wrf > yeah
+	#### TEST TEST
+	#mv yeah configure.wrf
+
+sed s+"-fastsse"+" "+g configure.wrf > yeah
+#sed s+"-fastsse"+"-mcmodel=medium -Mlarge_arrays"+g configure.wrf > yeah ##marche pas
+#
+# sometimes fastsse is problematic
+#
+
+##sed s+"-fastsse"+"-fastsse -mcmodel=medium"+g configure.wrf > yeah
+mv yeah configure.wrf
+
+#sed s+"-Mvect=noaltcode"+"#-Mvect=noaltcode"+g configure.wrf > yeah ; mv yeah configure.wrf
+
+#sed s+"-mp -Minfo=mp"+"-mp -Minfo=mp -mp=nonuma"+g configure.wrf > yeah
+#mv yeah configure.wrf
+
+#### OBLIGATOIRE POUR IFORT, OK AVEC LES AUTRES ??? a priori oui
+sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah
+mv yeah configure.wrf
+
+#############################################################
+  if [[ "${phys}" == "newphys_" ]]
+  then
+     sed s+"ARCH_LOCAL      =       "+"ARCH_LOCAL      =       -DNEWPHYS "+g configure.wrf > yeah
+     mv -f yeah configure.wrf
+     #touch modif_mars/module_model_constants.F
+     #touch modif_mars/module_first_rk_step_part1.F
+  fi
+#############################################################
+
+
+\rm conf
+
+#
+# COMPILE LES TEST CASE w/ LMD PHYSICS
+#
+touch modif_mars/module_lmd_driver.F
+\rm log_compile
+\rm log_error
+echo "compile LES WRF with LMD Mars physics... look log_compile and log_error"
+compile em_les > log_compile 2> log_error
+
+echo '***********************************'
+tail -n 20 log_error
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/makeles_gnome
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/makeles_gnome	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/makeles_gnome	(revision 142)
@@ -0,0 +1,176 @@
+#! /bin/bash
+
+#------------------------------
+# makeles
+#------------------------------
+#     MMM must be defined
+#------------------------------
+# A. Spiga 01/2009
+#------------------------------
+
+
+echo "Use -n if you don't want to recompile physics"
+echo "Use -p if you want the new LMD physics"
+
+#
+# SPECIAL CICLAD
+#
+
+donotcompilephys=0
+phys=""
+while getopts "np" options; do
+  case $options in
+   n ) donotcompilephys=1;; ## do not recompile physics
+   p ) phys="newphys_";;    ## with new physics
+  esac
+done
+
+#
+# LOCATIONS
+#
+here=$PWD
+whereliblmd=$here
+
+
+##############################################################
+##############################################################
+if [ ${donotcompilephys} -eq 0 ]
+then
+
+#
+# COMPILE PHYSICS
+#
+cd $MMM
+  if [[ "${phys}" == "newphys_" ]]
+  then
+    makemeso -j -p
+  else
+    makemeso -j
+  fi 
+#
+#makemeso -rd < last > /dev/null
+folder=$PWD'/'$(more what_folder)'/WRFV2/'
+libphys_folder=$folder'mars_lmd/libo/'
+phymars_folder=$folder'mars_lmd/libf/phymars/'
+\rm what_folder 2> /dev/null
+
+#
+# GET liblmd GENERATED LIBRARY and INCLUDEs
+#
+echo $libphys_folder
+cp -rf ${libphys_folder}/liblmd.a ${whereliblmd}/
+#cp -rf ${phymars_folder}/dimphys.h ${here}/modif_mars/
+cp -rf ${phymars_folder}/dimphys.h ${here}/mars_lmd/libf/phymars/
+#cp -rf ${folder}/call_meso_inifis.inc ${here}/modif_mars/
+#cp -rf ${folder}/call_meso_physiq.inc ${here}/modif_mars/
+cp -rf ${folder}/call_meso_inifis.inc ${here}/
+cp -rf ${folder}/call_meso_physiq.inc ${here}/
+#cp -rf ${folder}/inc/module_lmd_driver_output*.inc ${here}/modif_mars/
+cp -rf ${folder}/inc/module_lmd_driver_output*.inc ${here}/inc/
+#cp -rf ${phymars_folder}/wrf_output_2d.h ${here}/modif_mars/
+#cp -rf ${phymars_folder}/wrf_output_3d.h ${here}/modif_mars/
+cp -rf ${phymars_folder}/wrf_output_2d.h ${here}/mars_lmd/libf/phymars/
+cp -rf ${phymars_folder}/wrf_output_3d.h ${here}/mars_lmd/libf/phymars/
+fi
+##############################################################
+##############################################################
+
+
+cd $here
+
+###------------------------------
+###------------------------------
+###
+### MPI (dm) 64 bits 
+###
+###TODO: le rendre adapte aux reponses du user a makemeso
+#touch conf
+#echo 3 >> conf 
+###echo 4 >> conf  #openMP n'arrange pas beaucoup de le tps de calcul
+#echo 1 >> conf
+###------------------------------
+###------------------------------
+
+
+
+### SINGLE PROC 32 bits g95
+#touch conf
+#echo 5 >> conf
+#echo 0 >> conf
+
+## SINGLE PROC 64 bits
+#touch conf
+#echo 1 >> conf
+#echo 0 >> conf
+
+### MPI (dm) 64 bits IFORT
+echo IFORT IFORT IFORT IFORT
+touch conf
+echo 7 >> conf
+echo 1 >> conf
+
+
+#
+# CONFIGURE
+#
+echo "configure..."
+#touch configure.wrf
+\rm configure.wrf
+./configure < conf > /dev/null 2> /dev/null
+#./configure 
+#sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+'mpif90 -f90=$(SFC)'+'/usr/lib64/openmpi/1.2.8-pgf/bin/mpif90'+g | sed s+'mpicc -cc=$(SCC)'+'/usr/lib64/openmpi/1.2.8-gcc/bin/mpicc -DMPI2_SUPPORT'+g > yeah
+## WHERE_MPI must be defined
+sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+"mpif90"+"$WHERE_MPI/mpif90"+g | sed s+"mpicc"+"$WHERE_MPI/mpicc -DMPI2_SUPPORT"+g > yeah
+#sed s+"# -g"+"-fno-second-underscore # -g"+g configure.wrf | sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g > yeah
+#sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf | sed s+"#-g"+"-g"+g > yeah
+#sed s+"-lnetcdf"+"-lnetcdf -L$whereliblmd -llmd"+g configure.wrf > yeah
+mv yeah configure.wrf
+
+	####
+	#### provoque des seg faults....
+	####
+	#sed s+"-fastsse"+"-fastsse -mcmodel=medium -Mlarge_arrays"+g configure.wrf > yeah
+	#### TEST TEST
+	#mv yeah configure.wrf
+
+sed s+"-fastsse"+" "+g configure.wrf > yeah
+#sed s+"-fastsse"+"-mcmodel=medium -Mlarge_arrays"+g configure.wrf > yeah ##marche pas
+#
+# sometimes fastsse is problematic
+#
+
+##sed s+"-fastsse"+"-fastsse -mcmodel=medium"+g configure.wrf > yeah
+mv yeah configure.wrf
+
+#sed s+"-Mvect=noaltcode"+"#-Mvect=noaltcode"+g configure.wrf > yeah ; mv yeah configure.wrf
+
+#sed s+"-mp -Minfo=mp"+"-mp -Minfo=mp -mp=nonuma"+g configure.wrf > yeah
+#mv yeah configure.wrf
+
+#### OBLIGATOIRE POUR IFORT, OK AVEC LES AUTRES ??? a priori oui
+sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah
+mv yeah configure.wrf
+
+#############################################################
+  if [[ "${phys}" == "newphys_" ]]
+  then
+     sed s+"ARCH_LOCAL      =       "+"ARCH_LOCAL      =       -DNEWPHYS "+g configure.wrf > yeah
+     mv -f yeah configure.wrf
+  fi
+#############################################################
+
+
+\rm conf
+
+#
+# COMPILE LES TEST CASE w/ LMD PHYSICS
+#
+touch modif_mars/module_lmd_driver.F
+\rm log_compile
+\rm log_error
+echo "compile LES WRF with LMD Mars physics... look log_compile and log_error"
+compile em_les > log_compile 2> log_error
+
+echo '***********************************'
+tail -n 20 log_error
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_big_step_utilities_em.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_big_step_utilities_em.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_big_step_utilities_em.F	(revision 142)
@@ -0,0 +1,5601 @@
+!wrf:MODEL_LAYER:DYNAMICS
+!
+
+#if (RWORDSIZE == 4)
+#   define VPOWX vspowx
+#   define VPOW  vspow
+#else
+#   define VPOWX vpowx
+#   define VPOW  vpow
+#endif
+
+
+MODULE module_big_step_utilities_em
+
+   USE module_domain, ONLY : domain
+   USE module_model_constants
+   USE module_state_description
+   USE module_configure, ONLY : grid_config_rec_type
+   USE module_wrf_error
+
+CONTAINS
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE calc_mu_uv ( config_flags,                 &
+                        mu, mub, muu, muv,            &
+                        ids, ide, jds, jde, kds, kde, &
+                        ims, ime, jms, jme, kms, kme, &
+                        its, ite, jts, jte, kts, kte )
+
+   IMPLICIT NONE
+   
+   ! Input data
+
+   TYPE(grid_config_rec_type   ) ,   INTENT(IN   ) :: config_flags
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte 
+
+   REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(  OUT) :: muu, muv
+   REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: mu, mub
+
+   !  local stuff
+
+   INTEGER :: i, j, itf, jtf, im, jm
+
+!<DESCRIPTION>
+!
+!  calc_mu_uv calculates the full column dry-air mass at the staggered
+!  horizontal velocity points (u,v) and places the results in muu and muv.
+!  This routine uses the reference state (mub) and perturbation state (mu)
+!
+!</DESCRIPTION>
+
+
+      itf=ite
+      jtf=MIN(jte,jde-1)
+
+      IF      ( ( its .NE. ids ) .AND. ( ite .NE. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its,itf
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j)+mub(i,j)+mub(i-1,j))
+         ENDDO
+         ENDDO
+      ELSE IF ( ( its .EQ. ids ) .AND. ( ite .NE. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its+1,itf
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j)+mub(i,j)+mub(i-1,j))
+         ENDDO
+         ENDDO
+         i=its
+         im = its
+         if(config_flags%periodic_x) im = its-1
+         DO j=jts,jtf
+!            muu(i,j) =      mu(i,j)          +mub(i,j)
+!  fix for periodic b.c., 13 march 2004, wcs
+            muu(i,j) = 0.5*(mu(i,j)+mu(im,j)+mub(i,j)+mub(im,j))
+         ENDDO
+      ELSE IF ( ( its .NE. ids ) .AND. ( ite .EQ. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its,itf-1
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j)+mub(i,j)+mub(i-1,j))
+         ENDDO
+         ENDDO
+         i=ite
+         im = ite-1
+         if(config_flags%periodic_x) im = ite
+         DO j=jts,jtf
+!            muu(i,j) =      mu(i-1,j)        +mub(i-1,j)
+!  fix for periodic b.c., 13 march 2004, wcs
+            muu(i,j) = 0.5*(mu(i-1,j)+mu(im,j)+mub(i-1,j)+mub(im,j))
+         ENDDO
+      ELSE IF ( ( its .EQ. ids ) .AND. ( ite .EQ. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its+1,itf-1
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j)+mub(i,j)+mub(i-1,j))
+         ENDDO
+         ENDDO
+         i=its
+         im = its
+         if(config_flags%periodic_x) im = its-1
+         DO j=jts,jtf
+!            muu(i,j) =      mu(i,j)          +mub(i,j)
+!  fix for periodic b.c., 13 march 2004, wcs
+            muu(i,j) = 0.5*(mu(i,j)+mu(im,j)+mub(i,j)+mub(im,j))
+         ENDDO
+         i=ite
+         im = ite-1
+         if(config_flags%periodic_x) im = ite
+         DO j=jts,jtf
+!            muu(i,j) =      mu(i-1,j)        +mub(i-1,j)
+!  fix for periodic b.c., 13 march 2004, wcs
+            muu(i,j) = 0.5*(mu(i-1,j)+mu(im,j)+mub(i-1,j)+mub(im,j))
+         ENDDO
+      END IF
+
+      itf=MIN(ite,ide-1)
+      jtf=jte
+
+      IF      ( ( jts .NE. jds ) .AND. ( jte .NE. jde ) ) THEN
+         DO j=jts,jtf
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1)+mub(i,j)+mub(i,j-1))
+         ENDDO
+         ENDDO
+      ELSE IF ( ( jts .EQ. jds ) .AND. ( jte .NE. jde ) ) THEN
+         DO j=jts+1,jtf
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1)+mub(i,j)+mub(i,j-1))
+         ENDDO
+         ENDDO
+         j=jts
+         jm = jts
+         if(config_flags%periodic_y) jm = jts-1
+         DO i=its,itf
+!             muv(i,j) =      mu(i,j)          +mub(i,j)
+!  fix for periodic b.c., 13 march 2004, wcs
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,jm)+mub(i,j)+mub(i,jm))
+         ENDDO
+      ELSE IF ( ( jts .NE. jds ) .AND. ( jte .EQ. jde ) ) THEN
+         DO j=jts,jtf-1
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1)+mub(i,j)+mub(i,j-1))
+         ENDDO
+         ENDDO
+         j=jte
+         jm = jte-1
+         if(config_flags%periodic_y) jm = jte
+         DO i=its,itf
+             muv(i,j) =      mu(i,j-1)        +mub(i,j-1)
+!  fix for periodic b.c., 13 march 2004, wcs
+             muv(i,j) = 0.5*(mu(i,j-1)+mu(i,jm)+mub(i,j-1)+mub(i,jm))
+         ENDDO
+      ELSE IF ( ( jts .EQ. jds ) .AND. ( jte .EQ. jde ) ) THEN
+         DO j=jts+1,jtf-1
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1)+mub(i,j)+mub(i,j-1))
+         ENDDO
+         ENDDO
+         j=jts
+         jm = jts
+         if(config_flags%periodic_y) jm = jts-1
+         DO i=its,itf
+!             muv(i,j) =      mu(i,j)          +mub(i,j)
+!  fix for periodic b.c., 13 march 2004, wcs
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,jm)+mub(i,j)+mub(i,jm))
+         ENDDO
+         j=jte
+         jm = jte-1
+         if(config_flags%periodic_y) jm = jte
+         DO i=its,itf
+!             muv(i,j) =      mu(i,j-1)        +mub(i,j-1)
+!  fix for periodic b.c., 13 march 2004, wcs
+             muv(i,j) = 0.5*(mu(i,j-1)+mu(i,jm)+mub(i,j-1)+mub(i,jm))
+         ENDDO
+      END IF
+
+END SUBROUTINE calc_mu_uv
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE calc_mu_uv_1 ( config_flags,                 &
+                          mu, muu, muv,                 &
+                          ids, ide, jds, jde, kds, kde, &
+                          ims, ime, jms, jme, kms, kme, &
+                          its, ite, jts, jte, kts, kte )
+
+   IMPLICIT NONE
+   
+   ! Input data
+
+   TYPE(grid_config_rec_type   ) ,   INTENT(IN   ) :: config_flags
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte 
+
+   REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(  OUT) :: muu, muv
+   REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: mu
+
+   !  local stuff
+
+   INTEGER :: i, j, itf, jtf, im, jm
+
+!<DESCRIPTION>
+!
+!  calc_mu_uv calculates the full column dry-air mass at the staggered
+!  horizontal velocity points (u,v) and places the results in muu and muv.
+!  This routine uses the full state (mu)
+!
+!</DESCRIPTION>
+   
+      itf=ite
+      jtf=MIN(jte,jde-1)
+
+      IF      ( ( its .NE. ids ) .AND. ( ite .NE. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its,itf
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j))
+         ENDDO
+         ENDDO
+      ELSE IF ( ( its .EQ. ids ) .AND. ( ite .NE. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its+1,itf
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j))
+         ENDDO
+         ENDDO
+         i=its
+         im = its
+         if(config_flags%periodic_x) im = its-1
+         DO j=jts,jtf
+            muu(i,j) = 0.5*(mu(i,j)+mu(im,j))
+         ENDDO
+      ELSE IF ( ( its .NE. ids ) .AND. ( ite .EQ. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its,itf-1
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j))
+         ENDDO
+         ENDDO
+         i=ite
+         im = ite-1
+         if(config_flags%periodic_x) im = ite
+         DO j=jts,jtf
+            muu(i,j) = 0.5*(mu(i-1,j)+mu(im,j))
+         ENDDO
+      ELSE IF ( ( its .EQ. ids ) .AND. ( ite .EQ. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its+1,itf-1
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j))
+         ENDDO
+         ENDDO
+         i=its
+         im = its
+         if(config_flags%periodic_x) im = its-1
+         DO j=jts,jtf
+            muu(i,j) = 0.5*(mu(i,j)+mu(im,j))
+         ENDDO
+         i=ite
+         im = ite-1
+         if(config_flags%periodic_x) im = ite
+         DO j=jts,jtf
+            muu(i,j) = 0.5*(mu(i-1,j)+mu(im,j))
+         ENDDO
+      END IF
+
+      itf=MIN(ite,ide-1)
+      jtf=jte
+
+      IF      ( ( jts .NE. jds ) .AND. ( jte .NE. jde ) ) THEN
+         DO j=jts,jtf
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1))
+         ENDDO
+         ENDDO
+      ELSE IF ( ( jts .EQ. jds ) .AND. ( jte .NE. jde ) ) THEN
+         DO j=jts+1,jtf
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1))
+         ENDDO
+         ENDDO
+         j=jts
+         jm = jts
+         if(config_flags%periodic_y) jm = jts-1
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,jm))
+         ENDDO
+      ELSE IF ( ( jts .NE. jds ) .AND. ( jte .EQ. jde ) ) THEN
+         DO j=jts,jtf-1
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1))
+         ENDDO
+         ENDDO
+         j=jte
+         jm = jte-1
+         if(config_flags%periodic_y) jm = jte
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j-1)+mu(i,jm))
+         ENDDO
+      ELSE IF ( ( jts .EQ. jds ) .AND. ( jte .EQ. jde ) ) THEN
+         DO j=jts+1,jtf-1
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1))
+         ENDDO
+         ENDDO
+         j=jts
+         jm = jts
+         if(config_flags%periodic_y) jm = jts-1
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,jm))
+         ENDDO
+         j=jte
+         jm = jte-1
+         if(config_flags%periodic_y) jm = jte
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j-1)+mu(i,jm))
+         ENDDO
+      END IF
+
+END SUBROUTINE calc_mu_uv_1
+
+!-------------------------------------------------------------------------------
+
+! Map scale factor comments for this routine:
+! Locally not changed, but sent the correct map scale factors
+! from module_em (msfuy, msfvx, msfty)
+
+SUBROUTINE couple_momentum ( muu, ru, u, msfu,              &
+                             muv, rv, v, msfv, msfv_inv,    &
+                             mut, rw, w, msft,              &
+                             ids, ide, jds, jde, kds, kde,  &
+                             ims, ime, jms, jme, kms, kme,  &
+                             its, ite, jts, jte, kts, kte  )
+
+   IMPLICIT NONE
+
+   ! Input data
+
+   INTEGER ,             INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                          ims, ime, jms, jme, kms, kme, &
+                                          its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(  OUT) :: ru, rv, rw
+
+   REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: muu, muv, mut
+   REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: msfu, msfv, msft, msfv_inv
+   
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) :: u, v, w
+   
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+   
+!<DESCRIPTION>
+!
+! couple_momentum couples the velocities to the full column mass and
+! the map factors.
+!
+!</DESCRIPTION>
+
+   ktf=MIN(kte,kde-1)
+   
+      itf=ite
+      jtf=MIN(jte,jde-1)
+
+      DO j=jts,jtf
+      DO k=kts,ktf
+      DO i=its,itf
+         ru(i,k,j)=u(i,k,j)*muu(i,j)/msfu(i,j)
+      ENDDO
+      ENDDO
+      ENDDO
+
+      itf=MIN(ite,ide-1)
+      jtf=jte
+
+      DO j=jts,jtf
+      DO k=kts,ktf
+      DO i=its,itf
+           rv(i,k,j)=v(i,k,j)*muv(i,j)*msfv_inv(i,j)
+!           rv(i,k,j)=v(i,k,j)*muv(i,j)/msfv(i,j)
+      ENDDO
+      ENDDO
+      ENDDO
+
+      itf=MIN(ite,ide-1)
+      jtf=MIN(jte,jde-1)
+
+      DO j=jts,jtf
+      DO k=kts,kte
+      DO i=its,itf
+         rw(i,k,j)=w(i,k,j)*mut(i,j)/msft(i,j)
+      ENDDO
+      ENDDO
+      ENDDO
+
+END SUBROUTINE couple_momentum
+
+!-------------------------------------------------------------------
+
+SUBROUTINE calc_mu_staggered ( mu, mub, muu, muv,            &
+                                  ids, ide, jds, jde, kds, kde, &
+                                  ims, ime, jms, jme, kms, kme, &
+                                  its, ite, jts, jte, kts, kte )
+
+   IMPLICIT NONE
+   
+   ! Input data
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte 
+
+   REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(  OUT) :: muu, muv
+   REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: mu, mub
+
+   !  local stuff
+
+   INTEGER :: i, j, itf, jtf
+
+!<DESCRIPTION>
+!
+! calc_mu_staggered calculates the full dry air mass at the staggered
+! velocity points (u,v).
+!
+!</DESCRIPTION>
+   
+      itf=ite
+      jtf=MIN(jte,jde-1)
+
+      IF      ( ( its .NE. ids ) .AND. ( ite .NE. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its,itf
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j)+mub(i,j)+mub(i-1,j))
+         ENDDO
+         ENDDO
+      ELSE IF ( ( its .EQ. ids ) .AND. ( ite .NE. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its+1,itf
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j)+mub(i,j)+mub(i-1,j))
+         ENDDO
+         ENDDO
+         i=its
+         DO j=jts,jtf
+            muu(i,j) =      mu(i,j)          +mub(i,j)
+         ENDDO
+      ELSE IF ( ( its .NE. ids ) .AND. ( ite .EQ. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its,itf-1
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j)+mub(i,j)+mub(i-1,j))
+         ENDDO
+         ENDDO
+         i=ite
+         DO j=jts,jtf
+            muu(i,j) =      mu(i-1,j)        +mub(i-1,j)
+         ENDDO
+      ELSE IF ( ( its .EQ. ids ) .AND. ( ite .EQ. ide ) ) THEN
+         DO j=jts,jtf
+         DO i=its+1,itf-1
+            muu(i,j) = 0.5*(mu(i,j)+mu(i-1,j)+mub(i,j)+mub(i-1,j))
+         ENDDO
+         ENDDO
+         i=its
+         DO j=jts,jtf
+            muu(i,j) =      mu(i,j)          +mub(i,j)
+         ENDDO
+         i=ite
+         DO j=jts,jtf
+            muu(i,j) =      mu(i-1,j)        +mub(i-1,j)
+         ENDDO
+      END IF
+
+      itf=MIN(ite,ide-1)
+      jtf=jte
+
+      IF      ( ( jts .NE. jds ) .AND. ( jte .NE. jde ) ) THEN
+         DO j=jts,jtf
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1)+mub(i,j)+mub(i,j-1))
+         ENDDO
+         ENDDO
+      ELSE IF ( ( jts .EQ. jds ) .AND. ( jte .NE. jde ) ) THEN
+         DO j=jts+1,jtf
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1)+mub(i,j)+mub(i,j-1))
+         ENDDO
+         ENDDO
+         j=jts
+         DO i=its,itf
+             muv(i,j) =      mu(i,j)          +mub(i,j)
+         ENDDO
+      ELSE IF ( ( jts .NE. jds ) .AND. ( jte .EQ. jde ) ) THEN
+         DO j=jts,jtf-1
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1)+mub(i,j)+mub(i,j-1))
+         ENDDO
+         ENDDO
+         j=jte
+         DO i=its,itf
+             muv(i,j) =      mu(i,j-1)        +mub(i,j-1)
+         ENDDO
+      ELSE IF ( ( jts .EQ. jds ) .AND. ( jte .EQ. jde ) ) THEN
+         DO j=jts+1,jtf-1
+         DO i=its,itf
+             muv(i,j) = 0.5*(mu(i,j)+mu(i,j-1)+mub(i,j)+mub(i,j-1))
+         ENDDO
+         ENDDO
+         j=jts
+         DO i=its,itf
+             muv(i,j) =      mu(i,j)          +mub(i,j)
+         ENDDO
+         j=jte
+         DO i=its,itf
+             muv(i,j) =      mu(i,j-1)        +mub(i,j-1)
+         ENDDO
+      END IF
+
+END SUBROUTINE calc_mu_staggered
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE couple ( mu, mub, rfield, field, name, &
+                    msf,                          &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   IMPLICIT NONE
+
+   ! Input data
+
+   INTEGER ,             INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                          ims, ime, jms, jme, kms, kme, &
+                                          its, ite, jts, jte, kts, kte
+
+   CHARACTER(LEN=1) ,     INTENT(IN   ) :: name
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(  OUT) :: rfield
+
+   REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: mu, mub, msf
+   
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) :: field
+   
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+   REAL , DIMENSION(ims:ime,jms:jme) :: muu , muv
+
+!<DESCRIPTION>
+!
+! subroutine couple couples the input variable with the dry-air 
+! column mass (mu).  
+!
+!</DESCRIPTION>
+
+   
+   ktf=MIN(kte,kde-1)
+   
+   IF (name .EQ. 'u')THEN
+
+      CALL calc_mu_staggered ( mu, mub, muu, muv,            &
+                                  ids, ide, jds, jde, kds, kde, &
+                                  ims, ime, jms, jme, kms, kme, &
+                                  its, ite, jts, jte, kts, kte )
+
+      itf=ite
+      jtf=MIN(jte,jde-1)
+
+      DO j=jts,jtf
+      DO k=kts,ktf
+      DO i=its,itf
+         rfield(i,k,j)=field(i,k,j)*muu(i,j)/msf(i,j)
+      ENDDO
+      ENDDO
+      ENDDO
+
+   ELSE IF (name .EQ. 'v')THEN
+
+      CALL calc_mu_staggered ( mu, mub, muu, muv,            &
+                               ids, ide, jds, jde, kds, kde, &
+                               ims, ime, jms, jme, kms, kme, &
+                               its, ite, jts, jte, kts, kte )
+
+      itf=ite
+      itf=MIN(ite,ide-1)
+      jtf=jte
+
+      DO j=jts,jtf
+      DO k=kts,ktf
+      DO i=its,itf
+           rfield(i,k,j)=field(i,k,j)*muv(i,j)/msf(i,j)
+      ENDDO
+      ENDDO
+      ENDDO
+
+   ELSE IF (name .EQ. 'w')THEN
+      itf=MIN(ite,ide-1)
+      jtf=MIN(jte,jde-1)
+      DO j=jts,jtf
+      DO k=kts,kte
+      DO i=its,itf
+         rfield(i,k,j)=field(i,k,j)*(mu(i,j)+mub(i,j))/msf(i,j)
+      ENDDO
+      ENDDO
+      ENDDO
+
+   ELSE IF (name .EQ. 'h')THEN
+      itf=MIN(ite,ide-1)
+      jtf=MIN(jte,jde-1)
+      DO j=jts,jtf
+      DO k=kts,kte
+      DO i=its,itf
+         rfield(i,k,j)=field(i,k,j)*(mu(i,j)+mub(i,j))
+      ENDDO
+      ENDDO
+      ENDDO
+
+   ELSE 
+      itf=MIN(ite,ide-1)
+      jtf=MIN(jte,jde-1)
+      DO j=jts,jtf
+      DO k=kts,ktf
+      DO i=its,itf
+         rfield(i,k,j)=field(i,k,j)*(mu(i,j)+mub(i,j))
+      ENDDO
+      ENDDO
+      ENDDO
+   
+   ENDIF
+
+END SUBROUTINE couple
+
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE calc_ww_cp ( u, v, mup, mub, ww,              &
+                        rdx, rdy, msftx, msfty,          &
+                        msfux, msfuy, msfvx, msfvx_inv,  &
+                        msfvy, dnw,                      &
+                        ids, ide, jds, jde, kds, kde,    &
+                        ims, ime, jms, jme, kms, kme,    &
+                        its, ite, jts, jte, kts, kte    )
+
+   IMPLICIT NONE
+
+   ! Input data
+
+
+   INTEGER ,    INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                 ims, ime, jms, jme, kms, kme, &
+                                 its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) :: u, v
+   REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: mup, mub, &
+                                                            msftx, msfty, &
+                                                            msfux, msfuy, &
+                                                            msfvx, msfvy, &
+                                                            msfvx_inv
+   REAL , DIMENSION( kms:kme ) , INTENT(IN   ) :: dnw
+   
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT  ) :: ww
+   REAL , INTENT(IN   )  :: rdx, rdy
+   
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+   REAL , DIMENSION( its:ite ) :: dmdt
+   REAL , DIMENSION( its:ite, kts:kte ) :: divv
+   REAL , DIMENSION( its:ite+1, jts:jte+1 ) :: muu, muv
+
+!<DESCRIPTION>
+!
+!  calc_ww calculates omega using the velocities (u,v) and the dry-air 
+!  column mass (mup+mub).
+!  The algorithm integrates the continuity equation through the column
+!  followed by a diagnosis of omega.
+!
+!</DESCRIPTION>
+
+!<DESCRIPTION>
+!
+!  calc_ww_cp calculates omega using the velocities (u,v) and the 
+!  column mass mu.
+!
+!</DESCRIPTION>
+
+    jtf=MIN(jte,jde-1)
+    ktf=MIN(kte,kde-1)  
+    itf=MIN(ite,ide-1)
+
+!  mu coupled with the appropriate map factor
+
+      DO j=jts,jtf
+      DO i=its,min(ite+1,ide)
+        ! u is always coupled with my
+        muu(i,j) = 0.5*(mup(i,j)+mub(i,j)+mup(i-1,j)+mub(i-1,j))/msfuy(i,j)
+      ENDDO
+      ENDDO
+
+      DO j=jts,min(jte+1,jde)
+      DO i=its,itf
+       ! v is always coupled with mx
+!        muv(i,j) = 0.5*(mup(i,j)+mub(i,j)+mup(i,j-1)+mub(i,j-1))/msfvx(i,j)
+        muv(i,j) = 0.5*(mup(i,j)+mub(i,j)+mup(i,j-1)+mub(i,j-1))*msfvx_inv(i,j)
+      ENDDO
+      ENDDO
+
+      DO j=jts,jtf
+
+        DO i=its,ite
+          dmdt(i) = 0.
+          ww(i,1,j) = 0.
+          ww(i,kte,j) = 0.
+        ENDDO
+
+!       Comments on the modifications for map scale factors
+!       ADT eqn 47 / my (putting rho -> 'mu') is:
+!       (1/my) partial d mu/dt = -mx partial d/dx(mu u/my) 
+!                                -mx partial d/dy(mu v/mx)
+!                                -partial d/dz(mu w/my)
+!
+!       Using nu instead of z the last term becomes:
+!                                -partial d/dnu(mu (dnu/dt)/my)
+!
+!       Integrating with respect to nu over ALL levels, with dnu/dt=0 at top
+!       and bottom, the last term becomes = 0
+!
+!       Integral|bot->top[(1/my) partial d mu/dt]dnu = 
+!       Integral|bot->top[-mx partial d/dx(mu u/my) 
+!                         -mx partial d/dy(mu v/mx)]dnu
+!
+!       muu='mu'[on u]/my, muv='mu'[on v]/mx
+!       (1/my) partial d mu/dt is independent of nu
+!         => LHS = Integral|bot->top[con]dnu = conservation*(-1) = -dmdt
+!
+!         => dmdt = mx*Integral|bot->top[partial d/dx(mu u/my) +
+!                                        partial d/dy(mu v/mx)]dnu
+!         => dmdt = sum_bot->top[divv]
+!       where
+!         divv=mx*[partial d/dx(mu u/my) + partial d/dy(mu v/mx)]*delta nu
+
+        DO k=kts,ktf
+        DO i=its,itf
+
+          divv(i,k) = msftx(i,j)*dnw(k)*( rdx*(muu(i+1,j)*u(i+1,k,j)-muu(i,j)*u(i,k,j))  &
+                                        +rdy*(muv(i,j+1)*v(i,k,j+1)-muv(i,j)*v(i,k,j))   )
+
+!          dmdt(i) = dmdt(i) + dnw(k)* ( rdx*(ru(i+1,k,j)-ru(i,k,j))  &
+!                                       +rdy*(rv(i,k,j+1)-rv(i,k,j))   )
+
+          dmdt(i) = dmdt(i) + divv(i,k)
+
+
+        ENDDO
+        ENDDO
+
+!       Further map scale factor notes:
+!       Now integrate from bottom to top, level by level:
+!       mu dnu/dt/my [k+1] = mu dnu/dt/my [k] + [-(1/my) partial d mu/dt 
+!                           -mx partial d/dx(mu u/my)
+!                           -mx partial d/dy(mu v/mx)]*dnu[k->k+1]
+!       ww [k+1] = ww [k] -(1/my) partial d mu/dt * dnu[k->k+1] - divv[k]
+!                = ww [k] -dmdt * dnw[k] - divv[k]
+
+        DO k=2,ktf
+        DO i=its,itf
+
+!           ww(i,k,j)=ww(i,k-1,j)                                       &
+!                        - dnw(k-1)* ( dmdt(i)                          &
+!                                     +rdx*(ru(i+1,k-1,j)-ru(i,k-1,j))  &
+!                                     +rdy*(rv(i,k-1,j+1)-rv(i,k-1,j)) )
+
+           ww(i,k,j)=ww(i,k-1,j) - dnw(k-1)*dmdt(i) - divv(i,k-1)
+
+        ENDDO
+        ENDDO
+     ENDDO
+
+
+END SUBROUTINE calc_ww_cp
+
+
+!-------------------------------------------------------------------------------
+ 
+SUBROUTINE calc_cq ( moist, cqu, cqv, cqw, n_moist, &
+                     ids, ide, jds, jde, kds, kde,  &
+                     ims, ime, jms, jme, kms, kme,  &
+                     its, ite, jts, jte, kts, kte  )
+
+   IMPLICIT NONE
+   
+   ! Input data
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte 
+
+   INTEGER ,          INTENT(IN   ) :: n_moist
+   
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme , n_moist ), INTENT(IN   ) :: moist
+                                              
+   REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(  OUT) :: cqu, cqv, cqw
+
+   ! Local stuff
+
+   REAL :: qtot
+   
+   INTEGER :: i, j, k, itf, jtf, ktf, ispe
+
+!<DESCRIPTION>
+!
+!  calc_cq calculates moist coefficients for the momentum equations.
+!
+!</DESCRIPTION>
+
+      itf=ite
+      jtf=MIN(jte,jde-1)
+      ktf=MIN(kte,kde-1)
+
+      IF(  n_moist >= PARAM_FIRST_SCALAR ) THEN
+
+        DO j=jts,jtf
+        DO k=kts,ktf
+        DO i=its,itf
+          qtot = 0.
+!DEC$ loop count(3)
+          DO ispe=PARAM_FIRST_SCALAR,n_moist
+            qtot = qtot + moist(i,k,j,ispe) + moist(i-1,k,j,ispe)
+          ENDDO
+!           qtot = 0.5*( moist(i  ,k,j,1)+moist(i  ,k,j,2)+moist(i  ,k,j,3)+  &
+!     &                  moist(i-1,k,j,1)+moist(i-1,k,j,2)+moist(i-1,k,j,3) )
+!           cqu(i,k,j) = 1./(1.+qtot)
+           cqu(i,k,j) = 1./(1.+0.5*qtot)
+        ENDDO
+        ENDDO
+        ENDDO
+
+        itf=MIN(ite,ide-1)
+        jtf=jte
+
+        DO j=jts,jtf
+        DO k=kts,ktf
+        DO i=its,itf
+          qtot = 0.
+!DEC$ loop count(3)
+          DO ispe=PARAM_FIRST_SCALAR,n_moist
+            qtot = qtot + moist(i,k,j,ispe) + moist(i,k,j-1,ispe)
+          ENDDO
+!           qtot = 0.5*( moist(i,k,j  ,1)+moist(i,k,j  ,2)+moist(i,k,j  ,3)+  &
+!     &                  moist(i,k,j-1,1)+moist(i,k,j-1,2)+moist(i,k,j-1,3) )
+!           cqv(i,k,j) = 1./(1.+qtot)
+           cqv(i,k,j) = 1./(1.+0.5*qtot)
+        ENDDO
+        ENDDO
+        ENDDO
+
+        itf=MIN(ite,ide-1)
+        jtf=MIN(jte,jde-1)
+        DO j=jts,jtf
+        DO k=kts+1,ktf
+        DO i=its,itf
+          qtot = 0.
+!DEC$ loop count(3)
+          DO ispe=PARAM_FIRST_SCALAR,n_moist
+            qtot = qtot + moist(i,k,j,ispe) + moist(i,k-1,j,ispe)
+          ENDDO
+!           qtot = 0.5*( moist(i,k  ,j,1)+moist(i,k  ,j,2)+moist(i,k-1,j,3)+  &
+!     &                  moist(i,k-1,j,1)+moist(i,k-1,j,2)+moist(i,k  ,j,3) )
+!           cqw(i,k,j) = qtot
+           cqw(i,k,j) = 0.5*qtot
+        ENDDO
+        ENDDO
+        ENDDO
+
+      ELSE
+
+        DO j=jts,jtf
+        DO k=kts,ktf
+        DO i=its,itf
+           cqu(i,k,j) = 1.
+        ENDDO
+        ENDDO
+        ENDDO
+
+        itf=MIN(ite,ide-1)
+        jtf=jte
+
+        DO j=jts,jtf
+        DO k=kts,ktf
+        DO i=its,itf
+           cqv(i,k,j) = 1.
+        ENDDO
+        ENDDO
+        ENDDO
+
+        itf=MIN(ite,ide-1)
+        jtf=MIN(jte,jde-1)
+        DO j=jts,jtf
+        DO k=kts+1,ktf
+        DO i=its,itf
+           cqw(i,k,j) = 0.
+        ENDDO
+        ENDDO
+        ENDDO
+
+      END IF
+
+END SUBROUTINE calc_cq
+
+!----------------------------------------------------------------------
+
+SUBROUTINE calc_alt ( alt, al, alb,                  &
+                      ids, ide, jds, jde, kds, kde,  &
+                      ims, ime, jms, jme, kms, kme,  &
+                      its, ite, jts, jte, kts, kte  )
+
+   IMPLICIT NONE
+   
+   ! Input data
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte 
+
+   REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(IN   ) :: alb, al
+   REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(  OUT) :: alt
+
+   ! Local stuff
+
+   INTEGER :: i, j, k, itf, jtf, ktf
+
+!<DESCRIPTION>
+!
+! calc_alt computes the full inverse density
+!
+!</DESCRIPTION>
+
+      itf=MIN(ite,ide-1)
+      jtf=MIN(jte,jde-1)
+      ktf=MIN(kte,kde-1)
+
+      DO j=jts,jtf
+      DO k=kts,ktf
+      DO i=its,itf
+        alt(i,k,j) = al(i,k,j)+alb(i,k,j)
+      ENDDO
+      ENDDO
+      ENDDO
+
+
+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,     &
+                            rdn, non_hydrostatic,          &
+                            ids, ide, jds, jde, kds, kde,  &
+                            ims, ime, jms, jme, kms, kme,  &
+                            its, ite, jts, jte, kts, kte  )
+
+  IMPLICIT NONE
+   
+   ! Input data
+
+  LOGICAL ,          INTENT(IN   ) :: non_hydrostatic
+
+  INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                      ims, ime, jms, jme, kms, kme, &
+                                      its, ite, jts, jte, kts, kte 
+
+  INTEGER ,          INTENT(IN   ) :: n_moist
+
+  REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(IN   ) :: alb,  &
+                                                                   pb,   &
+                                                                   t
+
+  REAL, DIMENSION( ims:ime , kms:kme , jms:jme, n_moist ), INTENT(IN   ) :: 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 , jms:jme ), INTENT(IN   ) :: mu, muts
+
+  REAL, DIMENSION( kms:kme ), INTENT(IN   ) :: znu, dnw, rdnw, rdn
+
+  REAL,   INTENT(IN   ) :: t0, p0
+
+  ! Local stuff
+
+  INTEGER :: i, j, k, itf, jtf, ktf, ispe
+  REAL    :: qvf, qtot, qf1, qf2
+  REAL, DIMENSION( its:ite) :: temp,cpovcv_v
+
+
+!<DESCRIPTION>
+!
+! For the nonhydrostatic option, calc_p_rho_phi calculates the
+! diagnostic quantities pressure and (inverse) density from the
+! prognostic variables using the equation of state.
+!
+! For the hydrostatic option, calc_p_rho_phi calculates the
+! diagnostic quantities (inverse) density and geopotential from the
+! prognostic variables using the equation of state and the hydrostatic 
+! equation.
+!
+!</DESCRIPTION>
+
+  itf=MIN(ite,ide-1)
+  jtf=MIN(jte,jde-1)
+  ktf=MIN(kte,kde-1)
+
+#ifndef INTELMKL
+  cpovcv_v = cpovcv
+#endif
+
+  IF (non_hydrostatic) THEN
+
+      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)))
+        ENDDO
+#ifdef INTELMKL
+        CALL VPOWX ( itf-its+1, temp(its), cpovcv, p(its,k,j) )
+#else
+! use vector version from libmassv or from compat lib in frame/libmassv.F
+        CALL VPOW  ( p(its,k,j), temp(its), cpovcv_v(its), itf-its+1 )
+#endif
+        DO i=its,itf
+           p(i,k,j)= p(i,k,j)*p0-pb(i,k,j)
+        ENDDO
+        ENDDO
+        ENDDO
+
+      ELSE
+
+        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)
+        ENDDO
+        ENDDO
+        ENDDO
+
+      END IF
+
+   ELSE
+
+!  hydrostatic pressure, al, and ph1 calc; WCS, 5 sept 2001
+
+
+      IF (n_moist >= PARAM_FIRST_SCALAR ) THEN  
+
+        DO j=jts,jtf
+
+          k=ktf          ! top layer
+          DO i=its,itf
+
+            qtot = 0.
+            DO ispe=PARAM_FIRST_SCALAR,n_moist
+              qtot = qtot + moist(i,k,j,ispe)
+            ENDDO
+            qf2 = 1./(1.+qtot)
+            qf1 = qtot*qf2
+
+            p(i,k,j) = - 0.5*(mu(i,j)+qf1*muts(i,j))/rdnw(k)/qf2
+            qvf = 1.+rvovrd*moist(i,k,j,P_QV)
+            al(i,k,j) = (r_d/p1000mb)*(t(i,k,j)+t0)*qvf* &
+                (((p(i,k,j)+pb(i,k,j))/p1000mb)**cvpm) - alb(i,k,j)
+
+          ENDDO
+
+          DO k=ktf-1,kts,-1  ! remaining layers, integrate down
+            DO i=its,itf
+
+            qtot = 0.
+            DO ispe=PARAM_FIRST_SCALAR,n_moist
+              qtot = qtot + 0.5*(  moist(i,k  ,j,ispe) + moist(i,k+1,j,ispe) )
+            ENDDO
+            qf2 = 1./(1.+qtot)
+            qf1 = qtot*qf2
+
+            p(i,k,j) = p(i,k+1,j) - (mu(i,j) + qf1*muts(i,j))/qf2/rdn(k+1)
+            qvf = 1.+rvovrd*moist(i,k,j,P_QV)
+            al(i,k,j) = (r_d/p1000mb)*(t(i,k,j)+t0)*qvf* &
+                        (((p(i,k,j)+pb(i,k,j))/p1000mb)**cvpm) - alb(i,k,j)
+            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
+
+        DO j=jts,jtf
+
+          k=ktf          ! top layer
+          DO i=its,itf
+
+            qtot = 0.
+            qf2 = 1./(1.+qtot)
+            qf1 = qtot*qf2
+
+            p(i,k,j) = - 0.5*(mu(i,j)+qf1*muts(i,j))/rdnw(k)/qf2
+            qvf = 1.
+            al(i,k,j) = (r_d/p1000mb)*(t(i,k,j)+t0)*qvf* &
+                (((p(i,k,j)+pb(i,k,j))/p1000mb)**cvpm) - alb(i,k,j)
+
+          ENDDO
+
+          DO k=ktf-1,kts,-1  ! remaining layers, integrate down
+            DO i=its,itf
+
+            qtot = 0.
+            qf2 = 1./(1.+qtot)
+            qf1 = qtot*qf2
+
+            p(i,k,j) = p(i,k+1,j) - (mu(i,j) + qf1*muts(i,j))/qf2/rdn(k+1)
+            qvf = 1.
+            al(i,k,j) = (r_d/p1000mb)*(t(i,k,j)+t0)*qvf* &
+                        (((p(i,k,j)+pb(i,k,j))/p1000mb)**cvpm) - alb(i,k,j)
+            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
+
+     END IF
+
+   END IF
+
+END SUBROUTINE calc_p_rho_phi
+
+!----------------------------------------------------------------------
+
+SUBROUTINE calc_php ( php, ph, phb,                  &
+                      ids, ide, jds, jde, kds, kde,  &
+                      ims, ime, jms, jme, kms, kme,  &
+                      its, ite, jts, jte, kts, kte  )
+
+   IMPLICIT NONE
+   
+   ! Input data
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte 
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(IN   ) :: phb, ph
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(  OUT) :: php
+
+   ! Local stuff
+
+   INTEGER :: i, j, k, itf, jtf, ktf
+
+!<DESCRIPTION>
+!
+!  calc_php calculates the full geopotential from the reference state
+!  geopotential and the perturbation geopotential (phb_ph).
+!
+!</DESCRIPTION>
+
+      itf=MIN(ite,ide-1)
+      jtf=MIN(jte,jde-1)
+      ktf=MIN(kte,kde-1)
+
+      DO j=jts,jtf
+      DO k=kts,ktf
+      DO i=its,itf
+        php(i,k,j) = 0.5*(phb(i,k,j)+phb(i,k+1,j)+ph(i,k,j)+ph(i,k+1,j))
+      ENDDO
+      ENDDO
+      ENDDO
+
+END SUBROUTINE calc_php
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE diagnose_w( ph_tend, ph_new, ph_old, w, mu, dt,  &
+                       u, v, ht,                            &
+                       cf1, cf2, cf3, rdx, rdy,             &
+                       msftx, msfty,                        &
+                       ids, ide, jds, jde, kds, kde,        &
+                       ims, ime, jms, jme, kms, kme,        &
+                       its, ite, jts, jte, kts, kte        )
+
+   IMPLICIT NONE
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte 
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(IN   ) ::   ph_tend, &
+                                                                     ph_new,  &
+                                                                     ph_old,  &
+                                                                     u,       &
+                                                                     v
+
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(  OUT) :: w
+
+   REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN   ) :: mu, ht, msftx, msfty
+
+   REAL, INTENT(IN   ) :: dt, cf1, cf2, cf3, rdx, rdy
+
+   INTEGER :: i, j, k, itf, jtf
+
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+
+!<DESCRIPTION>
+!
+! diagnose_w diagnoses the vertical velocity from the geopoential equation.
+! Used with the hydrostatic option.
+!
+!</DESCRIPTION>
+
+   DO j = jts, jtf
+
+!  lower b.c. on w
+
+!  Notes on map scale factors:
+!  Chain rule: if Z=Z(X,Y) [true at the surface] then
+!  dZ/dt = dZ/dX * dX/dt + dZ/dY * dY/dt, U=dX/dt, V=dY/dt
+!  Using capitals to denote actual values
+!  In mapped values, u=U, v=V, z=Z, 1/dX=mx/dx, 1/dY=my/dy
+!    => w = dz/dt = mx u dz/dx + my v dz/dy
+!  [where dz/dx is just the surface height change between x
+!   gridpoints, and dz/dy is the change between y gridpoints]
+!  [NB: cf1, cf2 and cf3 do vertical weighting of u or v values
+!   nearest the surface]
+
+!  Previously msft multiplied by rdy and rdx terms.
+!  Now msfty multiplies rdy term, and msftx multiplies msftx term
+     DO i = its, itf
+         w(i,1,j)=  msfty(i,j)*.5*rdy*(                      &
+                           (ht(i,j+1)-ht(i,j  ))             &
+          *(cf1*v(i,1,j+1)+cf2*v(i,2,j+1)+cf3*v(i,3,j+1))    &
+                          +(ht(i,j  )-ht(i,j-1))             &
+          *(cf1*v(i,1,j  )+cf2*v(i,2,j  )+cf3*v(i,3,j  ))  ) &
+                 +msftx(i,j)*.5*rdx*(                        &
+                           (ht(i+1,j)-ht(i,j  ))             &
+          *(cf1*u(i+1,1,j)+cf2*u(i+1,2,j)+cf3*u(i+1,3,j))    &
+                          +(ht(i,j  )-ht(i-1,j))             &
+          *(cf1*u(i  ,1,j)+cf2*u(i  ,2,j)+cf3*u(i  ,3,j))  )
+     ENDDO
+
+!  use geopotential equation to diagnose w
+
+!  Further notes on map scale factors
+!  If ph_tend contains:  -mx partial d/dx(mu rho u/my) 
+!                        -mx partial d/dy(phi mu v/mx)
+!                        -partial d/dz(phi mu w/my)
+!  then phi eqn is: partial d/dt(mu phi/my) = ph_tend + mu g w/my
+!    => w = [my/(mu*g)]*[partial d/dt(mu phi/my) - ph_tend]
+
+     DO k = 2, kte
+     DO i = its, itf
+       w(i,k,j) =  msfty(i,j)*(  (ph_new(i,k,j)-ph_old(i,k,j))/dt       &
+                               - ph_tend(i,k,j)/mu(i,j)        )/g 
+
+     ENDDO
+     ENDDO
+
+   ENDDO
+
+END SUBROUTINE diagnose_w
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE rhs_ph( ph_tend, u, v, ww,               &
+                   ph, ph_old, phb, w,              &
+                   mut, muu, muv,                   &
+                   fnm, fnp,                        &
+                   rdnw, cfn, cfn1, rdx, rdy,       &
+                   msfux, msfuy, msfvx,             &
+                   msfvx_inv, msfvy,                &
+                   msftx, msfty,                    &
+                   non_hydrostatic,                 &
+                   config_flags,                    &
+                   ids, ide, jds, jde, kds, kde,    &
+                   ims, ime, jms, jme, kms, kme,    &
+                   its, ite, jts, jte, kts, kte    )
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte 
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(IN   ) ::        &
+                                                                     u,   &
+                                                                     v,   &
+                                                                     ww,  &
+                                                                     ph,  &
+                                                                     ph_old, &
+                                                                     phb, & 
+                                                                    w
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(INOUT) :: ph_tend
+
+   REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN   ) :: muu, muv, mut,   &
+                                                            msfux, msfuy, &
+                                                            msfvx, msfvy, &
+                                                            msftx, msfty, &
+                                                            msfvx_inv
+
+   REAL, DIMENSION( kms:kme ), INTENT(IN   ) :: rdnw, fnm, fnp
+
+   REAL,  INTENT(IN   ) :: cfn, cfn1, rdx, rdy
+
+   LOGICAL,  INTENT(IN   )  ::  non_hydrostatic
+
+   ! Local stuff
+
+   INTEGER :: i, j, k, itf, jtf, ktf, kz, i_start, j_start
+   REAL    :: ur, ul, ub, vr, vl, vb
+   REAL, DIMENSION(its:ite,kts:kte) :: wdwn
+
+   INTEGER :: advective_order
+
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+! rhs_ph calculates the large-timestep tendency terms for the geopotential
+! equation.  These terms include the advection and "gw".  The geopotential
+! equation is cast in advective form, so we don't use the flux form advection
+! algorithms here.
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+   advective_order = config_flags%h_sca_adv_order 
+!   advective_order = 2  !  original configuration (pre Oct 2001)
+
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+   ktf=MIN(kte,kde-1)
+
+!  Notes on map scale factors (WCS, 2 march 2008)
+!  phi equation is:   mu/my d/dt(phi) = -(1/my) mx mu u  d/dx(phi)
+!                                       -(1/my) my mu v d/dy(phi)
+!                                       - omega d/d_eta(phi)
+!                                               +mu g w/my
+!
+!  A little further explanation...
+!  The tendency term we are computing here is for mu/my d/dt(phi).  It is advective form 
+!  but it is multiplied be mu/my.  It will be decoupled from (mu/my) when the implicit w-phi
+!  solution is computed in subourine advance_w.  The formulation dates from the early 
+!  days of the mass coordinate model when we were testing both a flux and an advective formulation
+!  for the geopotential equation and different forms of the vertical momentum equation and the 
+!  vertically implicit solver.
+
+! advective form for the geopotential equation
+
+   DO j = jts, jtf
+
+     DO k = 2, kte
+     DO i = its, itf
+          wdwn(i,k) = .5*(ww(i,k,j)+ww(i,k-1,j))*rdnw(k-1)               &
+                        *(ph(i,k,j)-ph(i,k-1,j)+phb(i,k,j)-phb(i,k-1,j))
+     ENDDO
+     ENDDO
+
+!  RHS term 3 is: - omega partial d/dnu(phi)
+
+     DO k = 2, kte-1
+     DO i = its, itf
+           ph_tend(i,k,j) = ph_tend(i,k,j)                           &
+                             - (fnm(k)*wdwn(i,k+1)+fnp(k)*wdwn(i,k))
+     ENDDO
+     ENDDO
+
+   ENDDO
+
+   IF (non_hydrostatic) THEN  ! add in "gw" term.
+   DO j = jts, jtf            ! in hydrostatic mode, "gw" will be diagnosed
+                              ! after the timestep to give us "w"
+     DO i = its, itf
+        ph_tend(i,kde,j) = 0.
+     ENDDO
+
+     DO k = 2, kte
+     DO i = its, itf
+        ! phi equation RHS term 4
+        ph_tend(i,k,j) = ph_tend(i,k,j) + mut(i,j)*g*w(i,k,j)/msfty(i,j)
+     ENDDO
+     ENDDO
+
+   ENDDO
+
+   END IF
+
+!  Notes on map scale factors:
+!  RHS terms 1 and 2 are: -(1/my) mx u mu partial d/dx(phi)
+!                         -(1/my) my v mu partial d/dy(phi)
+
+   IF (advective_order <= 2) THEN
+
+!  y (v) advection
+
+   i_start = its
+   j_start = jts
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+
+   IF ( (config_flags%open_ys) .and. jts == jds ) j_start = jts+1
+   IF ( (config_flags%open_ye) .and. jte == jde ) jtf = jtf-1
+
+   DO j = j_start, jtf
+
+     DO k = 2, kte-1
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.25*rdy/msfty(i,j))*          &
+                 ( muv(i,j+1)*(v(i,k,j+1)+v(i,k-1,j+1))*msfvy(i,j+1)*   &
+                  (phb(i,k,j+1)-phb(i,k,j  )+ph(i,k,j+1)-ph(i,k,j  ))   &
+                  +muv(i,j  )*(v(i,k,j  )+v(i,k-1,j  ))*msfvy(i,j  )*   &
+                  (phb(i,k,j  )-phb(i,k,j-1)+ph(i,k,j  )-ph(i,k,j-1)) )
+     ENDDO
+     ENDDO
+
+     k = kte
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.5*rdy/msfty(i,j))*                        &
+                  ( muv(i,j+1)*(cfn*v(i,k-1,j+1)+cfn1*v(i,k-2,j+1))*msfvy(i,j+1)*    &
+                   (phb(i,k,j+1)-phb(i,k,j  )+ph(i,k,j+1)-ph(i,k,j  ))               &
+                   +muv(i,j  )*(cfn*v(i,k-1,j  )+cfn1*v(i,k-2,j  ))*msfvy(i,j  )*    &
+                   (phb(i,k,j  )-phb(i,k,j-1)+ph(i,k,j  )-ph(i,k,j-1))              )
+     ENDDO
+
+   ENDDO
+
+!  x (u) advection
+
+   i_start = its
+   j_start = jts
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+
+   IF ( (config_flags%open_xs) .and. its == ids ) i_start = its+1
+   IF ( (config_flags%open_xe) .and. ite == ide ) itf = itf-1
+
+   DO j = j_start, jtf
+
+     DO k = 2, kte-1
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.25*rdx/msfty(i,j))*         &
+                 ( muu(i+1,j)*(u(i+1,k,j)+u(i+1,k-1,j))*msfux(i+1,j)*  &
+                  (phb(i+1,k,j)-phb(i  ,k,j)+ph(i+1,k,j)-ph(i  ,k,j))  &
+                  +muu(i  ,j)*(u(i  ,k,j)+u(i  ,k-1,j))*msfux(i  ,j)*  &
+                  (phb(i  ,k,j)-phb(i-1,k,j)+ph(i  ,k,j)-ph(i-1,k,j))  )
+     ENDDO
+     ENDDO
+ 
+     k = kte
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.5*rdx/msfty(i,j))*                        &
+                  ( muu(i+1,j)*(cfn*u(i+1,k-1,j)+cfn1*u(i+1,k-2,j))*msfux(i+1,j)*    &
+                   (phb(i+1,k,j)-phb(i  ,k,j)+ph(i+1,k,j)-ph(i  ,k,j))               &
+                   +muu(i  ,j)*(cfn*u(i  ,k-1,j)+cfn1*u(i  ,k-2,j))*msfux(  i,j)*    &
+                   (phb(i  ,k,j)-phb(i-1,k,j)+ph(i  ,k,j)-ph(i-1,k,j))             )
+     ENDDO
+
+   ENDDO
+
+   ELSE IF (advective_order <= 4) THEN
+
+!  y (v) advection
+
+   i_start = its
+   j_start = jts
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+
+   IF ( (config_flags%open_ys) .and. jts == jds ) j_start = jts+1
+   IF ( (config_flags%open_ye) .and. jte == jde ) jtf = jtf-1
+
+   DO j = j_start, jtf
+
+     DO k = 2, kte-1
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.25*rdy/msfty(i,j))*(                     &
+                 ( muv(i,j+1)*(v(i,k,j+1)+v(i,k-1,j+1))*msfvy(i,j+1)                &
+                  +muv(i,j  )*(v(i,k,j  )+v(i,k-1,j  ))*msfvy(i,j  ))* (1./12.)*(   &
+                    8.*(ph(i,k,j+1)-ph(i,k,j-1))                                    &
+                      -(ph(i,k,j+2)-ph(i,k,j-2))                                    &
+                   +8.*(phb(i,k,j+1)-phb(i,k,j-1))                                  &
+                      -(phb(i,k,j+2)-phb(i,k,j-2))  )   )                
+
+
+     ENDDO
+     ENDDO
+
+     k = kte
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.5*rdy/msfty(i,j))*(                                 &
+                 ( muv(i,j+1)*(cfn*v(i,k-1,j+1)+cfn1*v(i,k-2,j+1))*msfvy(i,j+1)                &
+                  +muv(i,j  )*(cfn*v(i,k-1,j  )+cfn1*v(i,k-2,j  ))*msfvy(i,j  ))* (1./12.)*(   &
+                    8.*(ph(i,k,j+1)-ph(i,k,j-1))                                               &
+                      -(ph(i,k,j+2)-ph(i,k,j-2))                                               &
+                   +8.*(phb(i,k,j+1)-phb(i,k,j-1))                                             &
+                      -(phb(i,k,j+2)-phb(i,k,j-2))  )   )                
+
+     ENDDO
+
+   ENDDO
+
+
+!  x (u) advection
+
+   i_start = its
+   j_start = jts
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+
+   IF ( (config_flags%open_xs) .and. its == ids ) i_start = its+1
+   IF ( (config_flags%open_xe) .and. ite == ide ) itf = itf-1
+
+   DO j = j_start, jtf
+
+     DO k = 2, kte-1
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.25*rdx/msfty(i,j))*(                    &
+                 ( muu(i+1,j)*(u(i+1,k,j)+u(i+1,k-1,j))*msfux(i+1,j)               &
+                  +muu(i,j  )*(u(i  ,k,j)+u(i  ,k-1,j))*msfux(i  ,j) )* (1./12.)*( &
+                    8.*(ph(i+1,k,j)-ph(i-1,k,j))                                   &
+                      -(ph(i+2,k,j)-ph(i-2,k,j))                                   &
+                   +8.*(phb(i+1,k,j)-phb(i-1,k,j))                                 &
+                      -(phb(i+2,k,j)-phb(i-2,k,j))  )   )                
+     ENDDO
+     ENDDO
+ 
+     k = kte
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.5*rdx/msfty(i,j))*(                                 &
+                 ( muu(i+1,j)*(cfn*u(i+1,k-1,j)+cfn1*u(i+1,k-2,j))*msfux(i+1,j)                &
+                  +muu(i,j  )*(cfn*u(i  ,k-1,j)+cfn1*u(i  ,k-2,j))*msfux(i  ,j) )* (1./12.)*(  &
+                    8.*(ph(i+1,k,j)-ph(i-1,k,j))                                               &
+                      -(ph(i+2,k,j)-ph(i-2,k,j))                                               &
+                   +8.*(phb(i+1,k,j)-phb(i-1,k,j))                                             &
+                      -(phb(i+2,k,j)-phb(i-2,k,j))  )     )
+     ENDDO
+
+   ENDDO
+
+   ELSE IF (advective_order <= 6) THEN
+
+!  y (v) advection
+
+   i_start = its
+   j_start = jts
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+
+!   IF ( (config_flags%open_ys) .and. jts == jds ) j_start = jts+1
+!   IF ( (config_flags%open_ye) .and. jte == jde ) jtf = jtf-1
+
+   IF (config_flags%open_ys .or. specified ) j_start = max(jts,jds+2)
+   IF (config_flags%open_ye .or. specified ) jtf     = min(jtf,jde-3)
+
+   DO j = j_start, jtf
+
+     DO k = 2, kte-1
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.25*rdy/msfty(i,j))* (                    &
+                 ( muv(i,j+1)*(v(i,k,j+1)+v(i,k-1,j+1))*msfvy(i,j+1)                &
+                  +muv(i,j  )*(v(i,k,j  )+v(i,k-1,j  ))*msfvy(i,j  ) )* (1./60.)*(  &
+                   45.*(ph(i,k,j+1)-ph(i,k,j-1))                                    &
+                   -9.*(ph(i,k,j+2)-ph(i,k,j-2))                                    &
+                      +(ph(i,k,j+3)-ph(i,k,j-3))                                    &
+                  +45.*(phb(i,k,j+1)-phb(i,k,j-1))                                  &
+                   -9.*(phb(i,k,j+2)-phb(i,k,j-2))                                  &
+                      +(phb(i,k,j+3)-phb(i,k,j-3))  )   )                
+
+
+     ENDDO
+     ENDDO
+
+     k = kte
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.5*rdy/msfty(i,j))* (                                &
+                 ( muv(i,j+1)*(cfn*v(i,k-1,j+1)+cfn1*v(i,k-2,j+1))*msfvy(i,j+1)                &
+                  +muv(i,j  )*(cfn*v(i,k-1,j  )+cfn1*v(i,k-2,j  ))*msfvy(i,j  ) )* (1./60.)*(  &
+                   45.*(ph(i,k,j+1)-ph(i,k,j-1))                                               &
+                   -9.*(ph(i,k,j+2)-ph(i,k,j-2))                                               &
+                      +(ph(i,k,j+3)-ph(i,k,j-3))                                               &
+                  +45.*(phb(i,k,j+1)-phb(i,k,j-1))                                             &
+                   -9.*(phb(i,k,j+2)-phb(i,k,j-2))                                             &
+                      +(phb(i,k,j+3)-phb(i,k,j-3))  )   )                
+
+     ENDDO
+
+   ENDDO
+
+
+!  pick up near boundary rows using 4th order stencil 
+!  (open bc copy only goes out to jds-1 and jde, hence 4rth is ok but 6th is too big)
+
+   IF ( (config_flags%open_ys) .and. jts <= jds+1 )  THEN
+
+     j = jds+1
+     DO k = 2, kte-1
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.25*rdy/msfty(i,j))* (                     &
+                 ( muv(i,j+1)*(v(i,k,j+1)+v(i,k-1,j+1))*msfvy(i,j+1)                &
+                  +muv(i,j  )*(v(i,k,j  )+v(i,k-1,j  ))*msfvy(i,j  ) )* (1./12.)*(  &
+                    8.*(ph(i,k,j+1)-ph(i,k,j-1))                                    &
+                      -(ph(i,k,j+2)-ph(i,k,j-2))                                    &
+                   +8.*(phb(i,k,j+1)-phb(i,k,j-1))                                  &
+                      -(phb(i,k,j+2)-phb(i,k,j-2))  )   )                
+
+
+     ENDDO
+     ENDDO
+
+     k = kte
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.5*rdy/msfty(i,j))* (                              &
+                 ( muv(i,j+1)*(cfn*v(i,k-1,j+1)+cfn1*v(i,k-2,j+1))*msfvy(i,j+1)              &
+                  +muv(i,j  )*(cfn*v(i,k-1,j  )+cfn1*v(i,k-2,j  ))*msfvy(i,j) )* (1./12.)*(  &
+                    8.*(ph(i,k,j+1)-ph(i,k,j-1))                                             &
+                      -(ph(i,k,j+2)-ph(i,k,j-2))                                             &
+                   +8.*(phb(i,k,j+1)-phb(i,k,j-1))                                           &
+                      -(phb(i,k,j+2)-phb(i,k,j-2))  )   )                
+
+     ENDDO
+
+   END IF
+
+   IF ( (config_flags%open_ye) .and. jte >= jde-2 )  THEN
+
+     j = jde-2
+     DO k = 2, kte-1
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.25*rdy/msfty(i,j))* (                  &
+                 ( muv(i,j+1)*(v(i,k,j+1)+v(i,k-1,j+1))*msfvy(i,j+1)              &
+                  +muv(i,j  )*(v(i,k,j  )+v(i,k-1,j  ))*msfvy(i,j) )* (1./12.)*(  &
+                    8.*(ph(i,k,j+1)-ph(i,k,j-1))                                  &
+                      -(ph(i,k,j+2)-ph(i,k,j-2))                                  &
+                   +8.*(phb(i,k,j+1)-phb(i,k,j-1))                                &
+                      -(phb(i,k,j+2)-phb(i,k,j-2))  )   )                
+
+
+     ENDDO
+     ENDDO
+
+     k = kte
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.5*rdy/msfty(i,j))* (                              &
+                 ( muv(i,j+1)*(cfn*v(i,k-1,j+1)+cfn1*v(i,k-2,j+1))*msfvy(i,j+1)              &
+                  +muv(i,j  )*(cfn*v(i,k-1,j  )+cfn1*v(i,k-2,j  ))*msfvy(i,j) )* (1./12.)*(  &
+                    8.*(ph(i,k,j+1)-ph(i,k,j-1))                                             &
+                      -(ph(i,k,j+2)-ph(i,k,j-2))                                             &
+                   +8.*(phb(i,k,j+1)-phb(i,k,j-1))                                           &
+                      -(phb(i,k,j+2)-phb(i,k,j-2))  )   )                
+
+     ENDDO
+
+   END IF
+
+!  x (u) advection
+
+   i_start = its
+   j_start = jts
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+
+   IF (config_flags%open_xs .or. specified ) i_start = max(its,ids+2)
+   IF (config_flags%open_xe .or. specified ) itf     = min(itf,ide-3)
+   IF ( config_flags%periodic_x ) i_start = its
+   IF ( config_flags%periodic_x ) itf=MIN(ite,ide-1)
+
+   DO j = j_start, jtf
+
+     DO k = 2, kte-1
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.25*rdx/msfty(i,j))*(                   &
+                 ( muu(i+1,j)*(u(i+1,k,j)+u(i+1,k-1,j))*msfux(i+1,j)              &
+                  +muu(i,j  )*(u(i,k,j  )+u(i,k-1,j  ))*msfux(i,j) )* (1./60.)*(  &
+                   45.*(ph(i+1,k,j)-ph(i-1,k,j))                                  &
+                   -9.*(ph(i+2,k,j)-ph(i-2,k,j))                                  &
+                      +(ph(i+3,k,j)-ph(i-3,k,j))                                  &
+                  +45.*(phb(i+1,k,j)-phb(i-1,k,j))                                &
+                   -9.*(phb(i+2,k,j)-phb(i-2,k,j))                                &
+                      +(phb(i+3,k,j)-phb(i-3,k,j))  )   )                
+     ENDDO
+     ENDDO
+ 
+     k = kte
+     DO i = i_start, itf
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.5*rdx/msfty(i,j))*(                             &
+                 ( muu(i+1,j)*(cfn*u(i+1,k-1,j)+cfn1*u(i+1,k-2,j))*msfux(i+1,j)            &
+                  +muu(i,j  )*(cfn*u(i  ,k-1,j)+cfn1*u(i,k-2,j))*msfux(i,j) )* (1./60.)*(  &
+                   45.*(ph(i+1,k,j)-ph(i-1,k,j))                                           &
+                   -9.*(ph(i+2,k,j)-ph(i-2,k,j))                                           &
+                      +(ph(i+3,k,j)-ph(i-3,k,j))                                           &
+                  +45.*(phb(i+1,k,j)-phb(i-1,k,j))                                         &
+                   -9.*(phb(i+2,k,j)-phb(i-2,k,j))                                         &
+                      +(phb(i+3,k,j)-phb(i-3,k,j))  )     )
+     ENDDO
+
+   ENDDO
+
+   IF ( (config_flags%open_xs) .and. its <= ids+1 ) THEN
+     i = ids + 1
+     DO j = j_start, jtf
+       DO k = 2, kte-1
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.25*rdx/msfty(i,j))*(                   &
+                 ( muu(i+1,j)*(u(i+1,k,j)+u(i+1,k-1,j))*msfux(i+1,j)              &
+                  +muu(i,j  )*(u(i,k,j  )+u(i,k-1,j  ))*msfux(i,j) )* (1./12.)*(  &
+                    8.*(ph(i+1,k,j)-ph(i-1,k,j))                                  &
+                      -(ph(i+2,k,j)-ph(i-2,k,j))                                  &
+                   +8.*(phb(i+1,k,j)-phb(i-1,k,j))                                &
+                      -(phb(i+2,k,j)-phb(i-2,k,j))  )   )                
+       ENDDO
+       k = kte
+       ph_tend(i,k,j)=ph_tend(i,k,j) - (0.5*rdx/msfty(i,j))*(                             &
+                ( muu(i+1,j)*(cfn*u(i+1,k-1,j)+cfn1*u(i+1,k-2,j))*msfux(i+1,j)            &
+                 +muu(i,j  )*(cfn*u(i  ,k-1,j)+cfn1*u(i,k-2,j))*msfux(i,j) )* (1./12.)*(  &
+                   8.*(ph(i+1,k,j)-ph(i-1,k,j))                                           &
+                     -(ph(i+2,k,j)-ph(i-2,k,j))                                           &
+                  +8.*(phb(i+1,k,j)-phb(i-1,k,j))                                         &
+                     -(phb(i+2,k,j)-phb(i-2,k,j))  )     )
+
+     ENDDO
+   END IF
+
+   IF ( (config_flags%open_xe) .and. ite >= ide-2 ) THEN
+     i = ide-2
+     DO j = j_start, jtf
+       DO k = 2, kte-1
+        ph_tend(i,k,j)=ph_tend(i,k,j) - (0.25*rdx/msfty(i,j))*(                   &
+                 ( muu(i+1,j)*(u(i+1,k,j)+u(i+1,k-1,j))*msfux(i+1,j)              &
+                  +muu(i,j  )*(u(i,k,j  )+u(i,k-1,j  ))*msfux(i,j) )* (1./12.)*(  &
+                    8.*(ph(i+1,k,j)-ph(i-1,k,j))                                  &
+                      -(ph(i+2,k,j)-ph(i-2,k,j))                                  &
+                   +8.*(phb(i+1,k,j)-phb(i-1,k,j))                                &
+                      -(phb(i+2,k,j)-phb(i-2,k,j))  )   )                
+       ENDDO
+       k = kte
+       ph_tend(i,k,j)=ph_tend(i,k,j) - (0.5*rdx/msfty(i,j))*(                             &
+                ( muu(i+1,j)*(cfn*u(i+1,k-1,j)+cfn1*u(i+1,k-2,j))*msfux(i+1,j)            &
+                 +muu(i,j  )*(cfn*u(i  ,k-1,j)+cfn1*u(i,k-2,j))*msfux(i,j) )* (1./12.)*(  &
+                   8.*(ph(i+1,k,j)-ph(i-1,k,j))                                           &
+                     -(ph(i+2,k,j)-ph(i-2,k,j))                                           &
+                  +8.*(phb(i+1,k,j)-phb(i-1,k,j))                                         &
+                     -(phb(i+2,k,j)-phb(i-2,k,j))  )     )
+
+     ENDDO
+   END IF
+
+   END IF
+
+!  lateral open boundary conditions,
+!  start with north and south (y) boundaries
+
+   i_start = its
+   itf=MIN(ite,ide-1)
+
+   !  south
+
+   IF ( (config_flags%open_ys) .and. jts == jds ) THEN
+
+     j=jts
+
+     DO k=2,kde
+       kz = min(k,kde-1)
+       DO i = its,itf
+         vb =.5*( fnm(kz)*(v(i,kz  ,j+1)+v(i,kz  ,j  ))    &
+                 +fnp(kz)*(v(i,kz-1,j+1)+v(i,kz-1,j  )) )
+         vl=amin1(vb,0.)
+         ph_tend(i,k,j)=ph_tend(i,k,j)-rdy*mut(i,j)*(      &
+                              +vl*(ph_old(i,k,j+1)-ph_old(i,k,j)))
+       ENDDO
+     ENDDO
+
+   END IF
+
+   ! north
+
+   IF ( (config_flags%open_ye) .and. jte == jde ) THEN
+
+     j=jte-1
+
+     DO k=2,kde
+       kz = min(k,kde-1)
+       DO i = its,itf
+        vb=.5*( fnm(kz)*(v(i,kz  ,j+1)+v(i,kz  ,j))   &
+               +fnp(kz)*(v(i,kz-1,j+1)+v(i,kz-1,j)) )
+        vr=amax1(vb,0.)
+        ph_tend(i,k,j)=ph_tend(i,k,j)-rdy*mut(i,j)*(      &
+                   +vr*(ph_old(i,k,j)-ph_old(i,k,j-1)))
+       ENDDO
+     ENDDO
+
+   END IF
+
+   !  now the east and west (y) boundaries
+
+   j_start = its
+   jtf=MIN(jte,jde-1)
+
+   !  west
+
+   IF ( (config_flags%open_xs) .and. its == ids ) THEN
+
+     i=its
+
+     DO j = jts,jtf
+       DO k=2,kde-1
+         kz = k
+         ub =.5*( fnm(kz)*(u(i+1,kz  ,j)+u(i  ,kz  ,j))     &
+                 +fnp(kz)*(u(i+1,kz-1,j)+u(i  ,kz-1,j)) )
+         ul=amin1(ub,0.)
+         ph_tend(i,k,j)=ph_tend(i,k,j)-(msftx(i,j)/msfty(i,j))*rdx*mut(i,j)*(       &
+                              +ul*(ph_old(i+1,k,j)-ph_old(i,k,j)))
+       ENDDO
+
+         k = kde
+         kz = k
+         ub =.5*( fnm(kz)*(u(i+1,kz  ,j)+u(i  ,kz  ,j))     &
+                 +fnp(kz)*(u(i+1,kz-1,j)+u(i  ,kz-1,j)) )
+         ul=amin1(ub,0.)
+         ph_tend(i,k,j)=ph_tend(i,k,j)-(msftx(i,j)/msfty(i,j))*rdx*mut(i,j)*(       &
+                              +ul*(ph_old(i+1,k,j)-ph_old(i,k,j)))
+     ENDDO
+
+   END IF
+
+   ! east
+
+   IF ( (config_flags%open_xe) .and. ite == ide ) THEN
+
+     i = ite-1
+
+     DO j = jts,jtf
+       DO k=2,kde-1
+        kz = k
+        ub=.5*( fnm(kz)*(u(i+1,kz  ,j)+u(i,kz  ,j))  &
+               +fnp(kz)*(u(i+1,kz-1,j)+u(i,kz-1,j)) )
+        ur=amax1(ub,0.)
+        ph_tend(i,k,j)=ph_tend(i,k,j)-(msftx(i,j)/msfty(i,j))*rdx*mut(i,j)*( &
+                   +ur*(ph_old(i,k,j)-ph_old(i-1,k,j)))
+       ENDDO
+
+        k = kde    
+        kz = k-1
+        ub=.5*( fnm(kz)*(u(i+1,kz  ,j)+u(i,kz  ,j))   &
+               +fnp(kz)*(u(i+1,kz-1,j)+u(i,kz-1,j)) )
+        ur=amax1(ub,0.)
+        ph_tend(i,k,j)=ph_tend(i,k,j)-(msftx(i,j)/msfty(i,j))*rdx*mut(i,j)*(  &
+                   +ur*(ph_old(i,k,j)-ph_old(i-1,k,j)))
+
+     ENDDO
+
+   END IF
+
+  END SUBROUTINE rhs_ph
+
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE horizontal_pressure_gradient( ru_tend,rv_tend,                &
+                                         ph,alt,p,pb,al,php,cqu,cqv,     &
+                                         muu,muv,mu,fnm,fnp,rdnw,        &
+                                         cf1,cf2,cf3,rdx,rdy,msfux,msfuy,&
+                                         msfvx,msfvy,msftx,msfty,        &
+                                         config_flags, non_hydrostatic,  &
+                                         top_lid,                        &
+                                         ids, ide, jds, jde, kds, kde,   &
+                                         ims, ime, jms, jme, kms, kme,   &
+                                         its, ite, jts, jte, kts, kte   )
+
+   IMPLICIT NONE
+   
+   ! Input data
+
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   LOGICAL, INTENT (IN   ) :: non_hydrostatic, top_lid
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte 
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(IN   ) ::        &
+                                                                     ph,  &
+                                                                     alt, &
+                                                                     al,  &
+                                                                     p,   &
+                                                                     pb,  &
+                                                                     php, &
+                                                                     cqu, &
+                                                                     cqv
+
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(INOUT) ::           &
+                                                                    ru_tend, &
+                                                                    rv_tend
+
+   REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN   ) :: muu, muv, mu,    &
+                                                            msfux, msfuy, &
+                                                            msfvx, msfvy, &
+                                                            msftx, msfty
+
+   REAL, DIMENSION( kms:kme ), INTENT(IN   ) :: rdnw, fnm, fnp
+
+   REAL,  INTENT(IN   ) :: rdx, rdy, cf1, cf2, cf3
+
+   INTEGER :: i,j,k, itf, jtf, ktf, i_start, j_start
+   REAL, DIMENSION( ims:ime, kms:kme ) :: dpn
+   REAL :: dpx, dpy
+
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  horizontal_pressure_gradient calculates the 
+!  horizontal pressure gradient terms for the large-timestep tendency 
+!  in the horizontal momentum equations (u,v).
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+!  Notes on map scale factors:
+!  Calculates the pressure gradient terms in ADT eqns 44 and 45
+!  With upper rho -> 'mu', these are:
+!  Eqn 30: -mu*(mx/my)*(1/rho)*partial dp/dx
+!  Eqn 31: -mu*(my/mx)*(1/rho)*partial dp/dy
+!
+!  As we are on nu, rather than height, surfaces:
+!
+!  mu dp/dx = mu alpha partial dp'/dx + (nu mu partial dmubar/dx) alpha'
+!           + mu partial dphi'/dx + (partial dphi/dx)*(partial dp'/dnu - mu')
+!
+!  mu dp/dy = mu alpha partial dp'/dy + (nu mu partial dmubar/dy) alpha'
+!           + mu partial dphi'/dy + (partial dphi/dy)*(partial dp'/dnu - mu')
+
+! start with the north-south (y) pressure gradient
+
+   itf=MIN(ite,ide-1)
+   jtf=jte
+   ktf=MIN(kte,kde-1)
+   i_start = its
+   j_start = jts
+   IF ( (config_flags%open_ys .or. specified .or. &
+         config_flags%nested .or. config_flags%polar ) .and. jts == jds ) j_start = jts+1
+   IF ( (config_flags%open_ye .or. specified .or. &
+         config_flags%nested .or. config_flags%polar ) .and. jte == jde ) jtf = jtf-1
+
+   DO j = j_start, jtf
+
+     IF ( non_hydrostatic )  THEN
+
+        k=1
+
+        DO i = i_start, itf
+          dpn(i,k) = .5*( cf1*(p(i,k  ,j-1)+p(i,k  ,j))   &
+                         +cf2*(p(i,k+1,j-1)+p(i,k+1,j))   &
+                         +cf3*(p(i,k+2,j-1)+p(i,k+2,j))  )
+          dpn(i,kde) = 0.
+        ENDDO
+        IF (top_lid) THEN
+          DO i = i_start, itf
+            dpn(i,kde) = .5*( cf1*(p(i,kde-1,j-1)+p(i,kde-1,j))   &
+                             +cf2*(p(i,kde-2,j-1)+p(i,kde-2,j))   &
+                             +cf3*(p(i,kde-3,j-1)+p(i,kde-3,j))  )
+          ENDDO
+        ENDIF
+               
+        DO k=2,ktf
+          DO i = i_start, itf
+            dpn(i,k) = .5*( fnm(k)*(p(i,k  ,j-1)+p(i,k  ,j))  &
+                           +fnp(k)*(p(i,k-1,j-1)+p(i,k-1,j)) )
+          END DO
+        END DO
+
+!       ADT eqn 45: -mu*(my/mx)*(1/rho)*partial dp/dy
+!       [alt, al are 1/rho terms; muv, mu are NOT coupled]
+        DO K=1,ktf
+          DO i = i_start, itf
+            ! Here are mu dp/dy terms 1-3 
+            dpy = (msfvy(i,j)/msfvx(i,j))*.5*rdy*muv(i,j)*(                 &
+                     (ph (i,k+1,j)-ph (i,k+1,j-1) + ph(i,k,j)-ph(i,k,j-1))  &
+                    +(alt(i,k  ,j)+alt(i,k  ,j-1))*(p (i,k,j)-p (i,k,j-1))  &
+                    +(al (i,k  ,j)+al (i,k  ,j-1))*(pb(i,k,j)-pb(i,k,j-1)) )
+            ! Here is mu dp/dy term 4 
+            dpy = dpy + (msfvy(i,j)/msfvx(i,j))*rdy*(php(i,k,j)-php(i,k,j-1))* &
+                (rdnw(k)*(dpn(i,k+1)-dpn(i,k))-.5*(mu(i,j-1)+mu(i,j)))
+            rv_tend(i,k,j) = rv_tend(i,k,j)-cqv(i,k,j)*dpy
+          END DO
+        END DO
+
+     ELSE
+
+!       ADT eqn 45: -mu*(my/mx)*(1/rho)*partial dp/dy
+!       [alt, al are 1/rho terms; muv, mu are NOT coupled]
+        DO K=1,ktf
+          DO i = i_start, itf
+            ! Here are mu dp/dy terms 1-3; term 4 not needed if hydrostatic
+            dpy = (msfvy(i,j)/msfvx(i,j))*.5*rdy*muv(i,j)*(                 &
+                     (ph (i,k+1,j)-ph (i,k+1,j-1) + ph(i,k,j)-ph(i,k,j-1))  &
+                    +(alt(i,k  ,j)+alt(i,k  ,j-1))*(p (i,k,j)-p (i,k,j-1))  &
+                    +(al (i,k  ,j)+al (i,k  ,j-1))*(pb(i,k,j)-pb(i,k,j-1)) )
+            rv_tend(i,k,j) = rv_tend(i,k,j)-cqv(i,k,j)*dpy
+          END DO
+        END DO
+
+     END IF
+
+   ENDDO
+
+!  now the east-west (x) pressure gradient
+
+   itf=ite
+   jtf=MIN(jte,jde-1)
+   ktf=MIN(kte,kde-1)
+   i_start = its
+   j_start = jts
+   IF ( (config_flags%open_xs .or. specified .or. &
+           config_flags%nested ) .and. its == ids ) i_start = its+1
+   IF ( (config_flags%open_xe .or. specified .or. &
+           config_flags%nested ) .and. ite == ide ) itf = itf-1
+   IF ( config_flags%periodic_x ) i_start = its
+   IF ( config_flags%periodic_x ) itf=ite
+
+   DO j = j_start, jtf
+
+     IF ( non_hydrostatic )  THEN
+
+        k=1
+
+        DO i = i_start, itf
+          dpn(i,k) = .5*( cf1*(p(i-1,k  ,j)+p(i,k  ,j))   &
+                         +cf2*(p(i-1,k+1,j)+p(i,k+1,j))   &
+                         +cf3*(p(i-1,k+2,j)+p(i,k+2,j))  )
+          dpn(i,kde) = 0.
+        ENDDO
+        IF (top_lid) THEN
+          DO i = i_start, itf
+            dpn(i,kde) = .5*( cf1*(p(i-1,kde-1,j)+p(i,kde-1,j))   &
+                             +cf2*(p(i-1,kde-2,j)+p(i,kde-2,j))   &
+                             +cf3*(p(i-1,kde-3,j)+p(i,kde-3,j))  )
+          ENDDO
+        ENDIF
+               
+        DO k=2,ktf
+          DO i = i_start, itf
+            dpn(i,k) = .5*( fnm(k)*(p(i-1,k  ,j)+p(i,k  ,j))  &
+                           +fnp(k)*(p(i-1,k-1,j)+p(i,k-1,j)) )
+          END DO
+        END DO
+
+! ADT eqn 44: -mu*(mx/my)*(1/rho)*partial dp/dx
+! [alt, al are 1/rho terms; muu, mu are NOT coupled]
+        DO K=1,ktf
+          DO i = i_start, itf
+            ! Here are mu dp/dy terms 1-3
+            dpx = (msfux(i,j)/msfuy(i,j))*.5*rdx*muu(i,j)*(                    &
+                        (ph (i,k+1,j)-ph (i-1,k+1,j) + ph(i,k,j)-ph(i-1,k,j))  &
+                       +(alt(i,k  ,j)+alt(i-1,k  ,j))*(p (i,k,j)-p (i-1,k,j))  &
+                       +(al (i,k  ,j)+al (i-1,k  ,j))*(pb(i,k,j)-pb(i-1,k,j)) )
+            ! Here is mu dp/dy term 4
+            dpx = dpx + (msfux(i,j)/msfuy(i,j))*rdx*(php(i,k,j)-php(i-1,k,j))* &
+                (rdnw(k)*(dpn(i,k+1)-dpn(i,k))-.5*(mu(i-1,j)+mu(i,j)))
+            ru_tend(i,k,j) = ru_tend(i,k,j)-cqu(i,k,j)*dpx
+          END DO
+        END DO
+
+     ELSE
+
+!       ADT eqn 44: -mu*(mx/my)*(1/rho)*partial dp/dx
+!       [alt, al are 1/rho terms; muu, mu are NOT coupled]
+        DO K=1,ktf
+          DO i = i_start, itf
+            ! Here are mu dp/dy terms 1-3; term 4 not needed if hydrostatic
+            dpx = (msfux(i,j)/msfuy(i,j))*.5*rdx*muu(i,j)*(                    &
+                        (ph (i,k+1,j)-ph (i-1,k+1,j) + ph(i,k,j)-ph(i-1,k,j))  &
+                       +(alt(i,k  ,j)+alt(i-1,k  ,j))*(p (i,k,j)-p (i-1,k,j))  &
+                       +(al (i,k  ,j)+al (i-1,k  ,j))*(pb(i,k,j)-pb(i-1,k,j)) )
+            ru_tend(i,k,j) = ru_tend(i,k,j)-cqu(i,k,j)*dpx
+          END DO
+        END DO
+
+     END IF
+
+   ENDDO
+
+END SUBROUTINE horizontal_pressure_gradient
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE pg_buoy_w( rw_tend, p, cqw, mu, mub,       &
+                      rdnw, rdn, g, msftx, msfty,     &
+                      ids, ide, jds, jde, kds, kde,   &
+                      ims, ime, jms, jme, kms, kme,   &
+                      its, ite, jts, jte, kts, kte   )
+
+   IMPLICIT NONE
+   
+   ! Input data
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte 
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(IN   ) ::   p
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(INOUT) ::   cqw
+
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(INOUT) ::  rw_tend
+
+   REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN   ) :: mub, mu, msftx, msfty
+
+   REAL, DIMENSION( kms:kme ), INTENT(IN   ) :: rdnw, rdn
+
+   REAL,  INTENT(IN   ) :: g
+
+   INTEGER :: itf, jtf, i, j, k
+   REAL    :: cq1, cq2
+
+
+!<DESCRIPTION>
+!
+!  pg_buoy_w calculates the 
+!  vertical pressure gradient and buoyancy terms for the large-timestep 
+!  tendency in the vertical momentum equation.
+!
+!</DESCRIPTION>
+
+!  BUOYANCY AND PRESSURE GRADIENT TERM IN W EQUATION AT TIME T
+
+!  Map scale factor notes
+!  ADT eqn 46 RHS terms 6 and 7 (where 7 is "-rho g")
+!  Dividing by my, and using mu and nu (see Klemp et al. eqns 32, 40)
+!  term 6: +(g/my) partial dp'/dnu
+!  term 7: -(g/my) mu'
+!
+!  For moisture-free atmosphere, cq1=1, cq2=0
+!  => (1./msft(i,j)) * g * [rdn(k)*{p(i,k,j)-p(i,k-1,j)}-mu(i,j)]
+
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+
+   DO j = jts,jtf
+
+     k=kde
+     DO i=its,itf
+       cq1 = 1./(1.+cqw(i,k-1,j))
+       cq2 = cqw(i,k-1,j)*cq1
+       rw_tend(i,k,j) = rw_tend(i,k,j)+(1./msfty(i,j))*g*(      &
+                        cq1*2.*rdnw(k-1)*(  -p(i,k-1,j))  &
+                        -mu(i,j)-cq2*mub(i,j)            )
+     END DO
+
+     DO k = 2, kde-1
+     DO i = its,itf
+      cq1 = 1./(1.+cqw(i,k,j))
+      cq2 = cqw(i,k,j)*cq1
+      cqw(i,k,j) = cq1
+      rw_tend(i,k,j) = rw_tend(i,k,j)+(1./msfty(i,j))*g*(      &
+                       cq1*rdn(k)*(p(i,k,j)-p(i,k-1,j))  &
+                       -mu(i,j)-cq2*mub(i,j)            )
+     END DO
+     ENDDO           
+
+
+   ENDDO
+
+END SUBROUTINE pg_buoy_w
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE w_damp( rw_tend, max_vert_cfl,max_horiz_cfl, &
+                      u, v, ww, w, mut, rdnw,         &
+                      rdx, rdy, msfux, msfuy,         &
+                      msfvx, msfvy, dt,               &
+                      config_flags,                   &
+                      ids, ide, jds, jde, kds, kde,   &
+                      ims, ime, jms, jme, kms, kme,   &
+                      its, ite, jts, jte, kts, kte   )
+
+   USE module_llxy
+   IMPLICIT NONE
+
+   ! Input data
+
+   TYPE(grid_config_rec_type   ) ,   INTENT(IN   ) :: config_flags
+
+   INTEGER ,          INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(IN   ) ::   u, v, ww, w
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme ), INTENT(INOUT) ::  rw_tend
+
+   REAL, INTENT(OUT) ::  max_vert_cfl
+   REAL, INTENT(OUT) ::  max_horiz_cfl
+   REAL              ::  horiz_cfl
+
+   REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN   ) :: mut
+
+   REAL, DIMENSION( kms:kme ), INTENT(IN   ) :: rdnw
+
+   REAL, INTENT(IN)    :: dt
+   REAL, INTENT(IN)    :: rdx, rdy
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: msfux, msfuy
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: msfvx, msfvy
+
+   REAL                :: vert_cfl, cf_n, cf_d, maxdub, maxdeta
+
+   INTEGER :: itf, jtf, i, j, k, maxi, maxj, maxk
+   INTEGER :: some
+   CHARACTER*512 :: temp
+
+   CHARACTER (LEN=256) :: time_str
+   CHARACTER (LEN=256) :: grid_str
+
+   integer :: total
+   REAL :: msfuxt , msfxffl
+   
+!<DESCRIPTION>
+!
+!  w_damp computes a damping term for the vertical velocity when the
+!  vertical Courant number is too large.  This was found to be preferable to 
+!  decreasing the timestep or increasing the diffusion in real-data applications
+!  that produced potentially-unstable large vertical velocities because of
+!  unphysically large heating rates coming from the cumulus parameterization 
+!  schemes run at moderately high resolutions (dx ~ O(10) km).
+!
+!  Additionally, w_damp returns the maximum cfl values due to vertical motion and
+!  horizontal motion.  These values are returned via the max_vert_cfl and 
+!  max_horiz_cfl variables.  (Added by T. Hutchinson, WSI, 3/5/2007)
+!
+!</DESCRIPTION>
+
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+
+   some = 0
+   max_vert_cfl = 0.
+   max_horiz_cfl = 0.
+   total = 0
+
+   IF(config_flags%map_proj == PROJ_CASSINI ) then
+     msfxffl = 1.0/COS(config_flags%fft_filter_lat*degrad) 
+   END IF
+
+   IF ( config_flags%w_damping == 1 ) THEN
+     DO j = jts,jtf
+
+     DO k = 2, kde-1
+     DO i = its,itf
+#if 1
+        IF(config_flags%map_proj == PROJ_CASSINI ) then
+           msfuxt = MIN(msfux(i,j), msfxffl)
+        ELSE
+           msfuxt = msfux(i,j)
+        END IF
+        vert_cfl = abs(ww(i,k,j)/mut(i,j)*rdnw(k)*dt)
+
+        IF ( vert_cfl > max_vert_cfl ) THEN
+           max_vert_cfl = vert_cfl ; maxi = i ; maxj = j ; maxk = k 
+           maxdub = w(i,k,j) ; maxdeta = -1./rdnw(k)
+        ENDIF
+        
+        horiz_cfl = max( abs(u(i,k,j) * rdx * msfuxt * dt),                          &
+             abs(v(i,k,j) * rdy * msfvy(i,j) * dt) )
+        if (horiz_cfl > max_horiz_cfl) then
+           max_horiz_cfl = horiz_cfl
+        endif
+        
+        if(vert_cfl .gt. w_beta)then
+#else
+! restructure to get rid of divide
+!
+! This had been used for efficiency, but with the addition of returning the cfl values, 
+!   the old version (above) was reinstated.  (T. Hutchinson, 3/5/2007)
+!
+        cf_n = abs(ww(i,k,j)*rdnw(k)*dt)
+        cf_d = abs(mut(i,j))
+        if(cf_n .gt. cf_d*w_beta )then
+#endif
+
+           WRITE(temp,*)i,j,k,' vert_cfl,w,d(eta)=',vert_cfl,w(i,k,j),-1./rdnw(k)
+           CALL wrf_debug ( 100 , TRIM(temp) )
+           if ( vert_cfl > 2. ) some = some + 1
+           rw_tend(i,k,j) = rw_tend(i,k,j)-sign(1.,w(i,k,j))*w_alpha*(vert_cfl-w_beta)*mut(i,j)
+        endif
+     END DO
+     ENDDO
+     ENDDO
+   ELSE
+! just print
+     DO j = jts,jtf
+
+     DO k = 2, kde-1
+     DO i = its,itf
+
+#if 1
+        IF(config_flags%map_proj == PROJ_CASSINI ) then
+           msfuxt = MIN(msfux(i,j), msfxffl)
+        ELSE
+           msfuxt = msfux(i,j)
+        END IF
+        vert_cfl = abs(ww(i,k,j)/mut(i,j)*rdnw(k)*dt)
+        
+        IF ( vert_cfl > max_vert_cfl ) THEN
+           max_vert_cfl = vert_cfl ; maxi = i ; maxj = j ; maxk = k 
+           maxdub = w(i,k,j) ; maxdeta = -1./rdnw(k)
+        ENDIF
+        
+        horiz_cfl = max( abs(u(i,k,j) * rdx * msfuxt * dt),                          &
+             abs(v(i,k,j) * rdy * msfvy(i,j) * dt) )
+
+        if (horiz_cfl > max_horiz_cfl) then
+           max_horiz_cfl = horiz_cfl
+        endif
+        
+        if(vert_cfl .gt. w_beta)then
+#else
+! restructure to get rid of divide
+!
+! This had been used for efficiency, but with the addition of returning the cfl values, 
+!   the old version (above) was reinstated.  (T. Hutchinson, 3/5/2007)
+!
+        cf_n = abs(ww(i,k,j)*rdnw(k)*dt)
+        cf_d = abs(mut(i,j))
+        if(cf_n .gt. cf_d*w_beta )then
+#endif
+           WRITE(temp,*)i,j,k,' vert_cfl,w,d(eta)=',vert_cfl,w(i,k,j),-1./rdnw(k)
+           CALL wrf_debug ( 100 , TRIM(temp) )
+           if ( vert_cfl > 2. ) some = some + 1
+        endif
+     END DO
+     ENDDO
+     ENDDO
+   ENDIF
+   IF ( some .GT. 0 ) THEN
+     CALL get_current_time_string( time_str )
+     CALL get_current_grid_name( grid_str )
+     WRITE(wrf_err_message,*)some,                                            &
+            ' points exceeded cfl=2 in domain '//TRIM(grid_str)//' at time '//TRIM(time_str)//' hours'
+     CALL wrf_debug ( 0 , TRIM(wrf_err_message) )
+     WRITE(wrf_err_message,*)'MAX AT i,j,k: ',maxi,maxj,maxk,' vert_cfl,w,d(eta)=',max_vert_cfl, &
+                             maxdub,maxdeta
+     CALL wrf_debug ( 0 , TRIM(wrf_err_message) )
+   ENDIF
+
+END SUBROUTINE w_damp
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE horizontal_diffusion ( name, field, tendency, mu,           &
+                                  config_flags,                        &
+                                  msfux, msfuy, msfvx, msfvx_inv,      &
+                                  msfvy, msftx, msfty,                 &
+                                  khdif, xkmhd, rdx, rdy,              &
+                                  ids, ide, jds, jde, kds, kde,        &
+                                  ims, ime, jms, jme, kms, kme,        &
+                                  its, ite, jts, jte, kts, kte        )
+
+   IMPLICIT NONE
+   
+   ! Input data
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,        INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                     ims, ime, jms, jme, kms, kme, &
+                                     its, ite, jts, jte, kts, kte
+
+   CHARACTER(LEN=1) ,                          INTENT(IN   ) :: name
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) :: field, xkmhd
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: tendency
+
+   REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: mu
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: msfux,      &
+                                                                    msfuy,      &
+                                                                    msfvx,      &
+                                                                    msfvx_inv,  &
+                                                                    msfvy,      &
+                                                                    msftx,      &
+                                                                    msfty
+
+   REAL ,                                      INTENT(IN   ) :: rdx,       &
+                                                                rdy,       &
+                                                                khdif
+
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+
+   INTEGER :: i_start, i_end, j_start, j_end
+
+   REAL :: mrdx, mkrdxm, mkrdxp, &
+           mrdy, mkrdym, mkrdyp
+
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  horizontal_diffusion computes the horizontal diffusion tendency
+!  on model horizontal coordinate surfaces.
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+   ktf=MIN(kte,kde-1)
+   
+   IF (name .EQ. 'u') THEN
+
+      i_start = its
+      i_end   = ite
+      j_start = jts
+      j_end   = MIN(jte,jde-1)
+
+      IF ( config_flags%open_xs .or. specified ) i_start = MAX(ids+1,its)
+      IF ( config_flags%open_xe .or. specified ) i_end   = MIN(ide-1,ite)
+      IF ( config_flags%open_ys .or. specified ) j_start = MAX(jds+1,jts)
+      IF ( config_flags%open_ye .or. specified ) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+
+      DO j = j_start, j_end
+      DO k=kts,ktf
+      DO i = i_start, i_end
+
+         ! The interior is grad: (m_x*d/dx), the exterior is div: (m_x*m_y*d/dx(/m_y))
+         ! setting up different averagings of m^2 partial d/dX and m^2 partial d/dY
+
+         mkrdxm=(msftx(i-1,j)/msfty(i-1,j))*mu(i-1,j)*xkmhd(i-1,k,j)*rdx
+         mkrdxp=(msftx(i,j)/msfty(i,j))*mu(i,j)*xkmhd(i,k,j)*rdx
+         mrdx=msfux(i,j)*msfuy(i,j)*rdx 
+         mkrdym=( (msfuy(i,j)+msfuy(i,j-1))/(msfux(i,j)+msfux(i,j-1)) )* &
+                0.25*(mu(i,j)+mu(i,j-1)+mu(i-1,j-1)+mu(i-1,j))* &
+                0.25*(xkmhd(i,k,j)+xkmhd(i,k,j-1)+xkmhd(i-1,k,j-1)+xkmhd(i-1,k,j))*rdy
+         mkrdyp=( (msfuy(i,j)+msfuy(i,j+1))/(msfux(i,j)+msfux(i,j+1)) )* &
+                0.25*(mu(i,j)+mu(i,j+1)+mu(i-1,j+1)+mu(i-1,j))* &
+                0.25*(xkmhd(i,k,j)+xkmhd(i,k,j+1)+xkmhd(i-1,k,j+1)+xkmhd(i-1,k,j))*rdy
+         ! need to do four-corners (t) for diffusion coefficient as there are
+         ! no values at u,v points
+         ! msfuy - has to be y as part of d/dY
+         !         has to be u as we're at a u point
+         mrdy=msfux(i,j)*msfuy(i,j)*rdy 
+
+         ! correctly averaged version of rho~ * m^2 * 
+         !    [partial d/dX(partial du^/dX) + partial d/dY(partial du^/dY)]
+            tendency(i,k,j)=tendency(i,k,j)+( &
+                            mrdx*(mkrdxp*(field(i+1,k,j)-field(i  ,k,j))  &
+                                 -mkrdxm*(field(i  ,k,j)-field(i-1,k,j))) &
+                           +mrdy*(mkrdyp*(field(i,k,j+1)-field(i,k,j  ))  &
+                                 -mkrdym*(field(i,k,j  )-field(i,k,j-1))))
+      ENDDO
+      ENDDO
+      ENDDO
+   
+   ELSE IF (name .EQ. 'v')THEN
+
+      i_start = its
+      i_end   = MIN(ite,ide-1)
+      j_start = jts
+      j_end   = jte
+
+      IF ( config_flags%open_xs .or. specified ) i_start = MAX(ids+1,its)
+      IF ( config_flags%open_xe .or. specified ) i_end   = MIN(ide-2,ite)
+      IF ( config_flags%open_ys .or. specified ) j_start = MAX(jds+1,jts)
+      IF ( config_flags%open_ye .or. specified ) j_end   = MIN(jde-1,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN(ite,ide-1)
+      IF ( config_flags%polar ) j_start = MAX(jds+1,jts)
+      IF ( config_flags%polar ) j_end   = MIN(jde-1,jte)
+
+      DO j = j_start, j_end
+      DO k=kts,ktf
+      DO i = i_start, i_end
+
+         mkrdxm=( (msfvx(i,j)+msfvx(i-1,j))/(msfvy(i,j)+msfvy(i-1,j)) )*    &
+                0.25*(mu(i,j)+mu(i,j-1)+mu(i-1,j-1)+mu(i-1,j))* &
+                0.25*(xkmhd(i,k,j)+xkmhd(i,k,j-1)+xkmhd(i-1,k,j-1)+xkmhd(i-1,k,j))*rdx
+         mkrdxp=( (msfvx(i,j)+msfvx(i+1,j))/(msfvy(i,j)+msfvy(i+1,j)) )*    &
+                0.25*(mu(i,j)+mu(i,j-1)+mu(i+1,j-1)+mu(i+1,j))* &
+                0.25*(xkmhd(i,k,j)+xkmhd(i,k,j-1)+xkmhd(i+1,k,j-1)+xkmhd(i+1,k,j))*rdx
+         mrdx=msfvx(i,j)*msfvy(i,j)*rdx
+         mkrdym=(msfty(i,j-1)/msftx(i,j-1))*xkmhd(i,k,j-1)*rdy
+         mkrdyp=(msfty(i,j)/msftx(i,j))*xkmhd(i,k,j)*rdy
+         mrdy=msfvx(i,j)*msfvy(i,j)*rdy
+
+            tendency(i,k,j)=tendency(i,k,j)+( &
+                            mrdx*(mkrdxp*(field(i+1,k,j)-field(i  ,k,j))  &
+                                 -mkrdxm*(field(i  ,k,j)-field(i-1,k,j))) &
+                           +mrdy*(mkrdyp*(field(i,k,j+1)-field(i,k,j  ))  &
+                                 -mkrdym*(field(i,k,j  )-field(i,k,j-1))))
+      ENDDO
+      ENDDO
+      ENDDO
+   
+   ELSE IF (name .EQ. 'w')THEN
+
+      i_start = its
+      i_end   = MIN(ite,ide-1)
+      j_start = jts
+      j_end   = MIN(jte,jde-1)
+
+      IF ( config_flags%open_xs .or. specified ) i_start = MAX(ids+1,its)
+      IF ( config_flags%open_xe .or. specified ) i_end   = MIN(ide-2,ite)
+      IF ( config_flags%open_ys .or. specified ) j_start = MAX(jds+1,jts)
+      IF ( config_flags%open_ye .or. specified ) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN(ite,ide-1)
+
+      DO j = j_start, j_end
+      DO k=kts+1,ktf
+      DO i = i_start, i_end
+
+         mkrdxm=(msfux(i,j)/msfuy(i,j))*   &
+                0.25*(mu(i,j)+mu(i-1,j)+mu(i,j)+mu(i-1,j))* &
+                0.25*(xkmhd(i,k,j)+xkmhd(i-1,k,j)+xkmhd(i,k-1,j)+xkmhd(i-1,k-1,j))*rdx
+         mkrdxp=(msfux(i+1,j)/msfuy(i+1,j))*   &
+                0.25*(mu(i+1,j)+mu(i,j)+mu(i+1,j)+mu(i,j))* &
+                0.25*(xkmhd(i+1,k,j)+xkmhd(i,k,j)+xkmhd(i+1,k-1,j)+xkmhd(i,k-1,j))*rdx
+         mrdx=msftx(i,j)*msfty(i,j)*rdx
+!         mkrdym=(msfvy(i,j)/msfvx(i,j))*   &
+         mkrdym=(msfvy(i,j)*msfvx_inv(i,j))*   &
+                0.25*(mu(i,j)+mu(i,j-1)+mu(i,j)+mu(i,j-1))* &
+                0.25*(xkmhd(i,k,j)+xkmhd(i,k,j-1)+xkmhd(i,k-1,j)+xkmhd(i,k-1,j-1))*rdy
+!         mkrdyp=(msfvy(i,j+1)/msfvx(i,j+1))*   &
+         mkrdyp=(msfvy(i,j+1)*msfvx_inv(i,j+1))*   &
+                0.25*(mu(i,j+1)+mu(i,j)+mu(i,j+1)+mu(i,j))* &
+                0.25*(xkmhd(i,k,j+1)+xkmhd(i,k,j)+xkmhd(i,k-1,j+1)+xkmhd(i,k-1,j))*rdy
+         mrdy=msftx(i,j)*msfty(i,j)*rdy
+
+            tendency(i,k,j)=tendency(i,k,j)+( &
+                            mrdx*(mkrdxp*(field(i+1,k,j)-field(i  ,k,j)) &
+                                 -mkrdxm*(field(i  ,k,j)-field(i-1,k,j))) &
+                           +mrdy*(mkrdyp*(field(i,k,j+1)-field(i,k,j  )) &
+                                 -mkrdym*(field(i,k,j  )-field(i,k,j-1))))
+      ENDDO
+      ENDDO
+      ENDDO
+   
+   ELSE
+
+
+      i_start = its
+      i_end   = MIN(ite,ide-1)
+      j_start = jts
+      j_end   = MIN(jte,jde-1)
+
+      IF ( config_flags%open_xs .or. specified ) i_start = MAX(ids+1,its)
+      IF ( config_flags%open_xe .or. specified ) i_end   = MIN(ide-2,ite)
+      IF ( config_flags%open_ys .or. specified ) j_start = MAX(jds+1,jts)
+      IF ( config_flags%open_ye .or. specified ) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN(ite,ide-1)
+
+      DO j = j_start, j_end
+      DO k=kts,ktf
+      DO i = i_start, i_end
+
+         mkrdxm=(msfux(i,j)/msfuy(i,j))*0.5*(xkmhd(i,k,j)+xkmhd(i-1,k,j))*0.5*(mu(i,j)+mu(i-1,j))*rdx
+         mkrdxp=(msfux(i+1,j)/msfuy(i+1,j))*0.5*(xkmhd(i+1,k,j)+xkmhd(i,k,j))*0.5*(mu(i+1,j)+mu(i,j))*rdx
+         mrdx=msftx(i,j)*msfty(i,j)*rdx
+!         mkrdym=(msfvy(i,j)/msfvx(i,j))*0.5*(xkmhd(i,k,j)+xkmhd(i,k,j-1))*0.5*(mu(i,j)+mu(i,j-1))*rdy
+         mkrdym=(msfvy(i,j)*msfvx_inv(i,j))*0.5*(xkmhd(i,k,j)+xkmhd(i,k,j-1))*0.5*(mu(i,j)+mu(i,j-1))*rdy
+!         mkrdyp=(msfvy(i,j+1)/msfvx(i,j+1))*0.5*(xkmhd(i,k,j+1)+xkmhd(i,k,j))*0.5*(mu(i,j+1)+mu(i,j))*rdy
+         mkrdyp=(msfvy(i,j+1)*msfvx_inv(i,j+1))*0.5*(xkmhd(i,k,j+1)+xkmhd(i,k,j))*0.5*(mu(i,j+1)+mu(i,j))*rdy
+         mrdy=msftx(i,j)*msfty(i,j)*rdy
+
+            tendency(i,k,j)=tendency(i,k,j)+( &
+                            mrdx*(mkrdxp*(field(i+1,k,j)-field(i  ,k,j))  &
+                                 -mkrdxm*(field(i  ,k,j)-field(i-1,k,j))) &
+                           +mrdy*(mkrdyp*(field(i,k,j+1)-field(i,k,j  ))  &
+                                 -mkrdym*(field(i,k,j  )-field(i,k,j-1))))
+      ENDDO
+      ENDDO
+      ENDDO
+           
+   ENDIF
+
+END SUBROUTINE horizontal_diffusion
+
+!-----------------------------------------------------------------------------------------
+
+SUBROUTINE horizontal_diffusion_3dmp ( name, field, tendency, mu,           &
+                                       config_flags, base_3d,               &
+                                       msfux, msfuy, msfvx, msfvx_inv,      &
+                                       msfvy, msftx, msfty,                 &
+                                       khdif, xkmhd, rdx, rdy,              &
+                                       ids, ide, jds, jde, kds, kde,        &
+                                       ims, ime, jms, jme, kms, kme,        &
+                                       its, ite, jts, jte, kts, kte        )
+
+   IMPLICIT NONE
+   
+   ! Input data
+   
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,        INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                     ims, ime, jms, jme, kms, kme, &
+                                     its, ite, jts, jte, kts, kte
+
+   CHARACTER(LEN=1) ,                          INTENT(IN   ) :: name
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) :: field, &
+                                                                      xkmhd, &
+                                                                      base_3d
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: tendency
+
+   REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: mu
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: msfux,      &
+                                                                    msfuy,      &
+                                                                    msfvx,      &
+                                                                    msfvx_inv,  &
+                                                                    msfvy,      &
+                                                                    msftx,      &
+                                                                    msfty
+
+   REAL ,                                      INTENT(IN   ) :: rdx,       &
+                                                                rdy,       &
+                                                                khdif
+
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+
+   INTEGER :: i_start, i_end, j_start, j_end
+
+   REAL :: mrdx, mkrdxm, mkrdxp, &
+           mrdy, mkrdym, mkrdyp
+
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  horizontal_diffusion_3dmp computes the horizontal diffusion tendency
+!  on model horizontal coordinate surfaces.  This routine computes diffusion
+!  a perturbation scalar (field-base_3d).
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+   ktf=MIN(kte,kde-1)
+   
+      i_start = its
+      i_end   = MIN(ite,ide-1)
+      j_start = jts
+      j_end   = MIN(jte,jde-1)
+
+      IF ( config_flags%open_xs .or. specified ) i_start = MAX(ids+1,its)
+      IF ( config_flags%open_xe .or. specified ) i_end   = MIN(ide-2,ite)
+      IF ( config_flags%open_ys .or. specified ) j_start = MAX(jds+1,jts)
+      IF ( config_flags%open_ye .or. specified ) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN(ite,ide-1)
+
+      DO j = j_start, j_end
+      DO k=kts,ktf
+      DO i = i_start, i_end
+
+         mkrdxm=(msfux(i,j)/msfuy(i,j))*0.5*(xkmhd(i,k,j)+xkmhd(i-1,k,j))*0.5*(mu(i,j)+mu(i-1,j))*rdx
+         mkrdxp=(msfux(i+1,j)/msfuy(i+1,j))*0.5*(xkmhd(i+1,k,j)+xkmhd(i,k,j))*0.5*(mu(i+1,j)+mu(i,j))*rdx
+         mrdx=msftx(i,j)*msfty(i,j)*rdx
+!         mkrdym=(msfvy(i,j)/msfvx(i,j))*0.5*(xkmhd(i,k,j)+xkmhd(i,k,j-1))*0.5*(mu(i,j)+mu(i,j-1))*rdy
+!         mkrdyp=(msfvy(i,j+1)/msfvx(i,j+1))*0.5*(xkmhd(i,k,j+1)+xkmhd(i,k,j))*0.5*(mu(i,j+1)+mu(i,j))*rdy
+         mkrdym=(msfvy(i,j)*msfvx_inv(i,j))*0.5*(xkmhd(i,k,j)+xkmhd(i,k,j-1))*0.5*(mu(i,j)+mu(i,j-1))*rdy
+         mkrdyp=(msfvy(i,j+1)*msfvx_inv(i,j+1))*0.5*(xkmhd(i,k,j+1)+xkmhd(i,k,j))*0.5*(mu(i,j+1)+mu(i,j))*rdy
+         mrdy=msftx(i,j)*msfty(i,j)*rdy
+
+            tendency(i,k,j)=tendency(i,k,j)+(                        &
+                    mrdx*( mkrdxp*(   field(i+1,k,j)  -field(i  ,k,j)      &
+                                   -base_3d(i+1,k,j)+base_3d(i  ,k,j) )    &
+                          -mkrdxm*(   field(i  ,k,j)  -field(i-1,k,j)      &
+                                   -base_3d(i  ,k,j)+base_3d(i-1,k,j) )  ) &
+                   +mrdy*( mkrdyp*(   field(i,k,j+1)  -field(i,k,j  )      &
+                                   -base_3d(i,k,j+1)+base_3d(i,k,j  ) )    &
+                          -mkrdym*(   field(i,k,j  )  -field(i,k,j-1)      &
+                                   -base_3d(i,k,j  )+base_3d(i,k,j-1) )  ) &
+                                                                         ) 
+      ENDDO
+      ENDDO
+      ENDDO
+
+END SUBROUTINE horizontal_diffusion_3dmp
+
+!-----------------------------------------------------------------------------------------
+
+SUBROUTINE vertical_diffusion ( name, field, tendency,        &
+                                config_flags,                 &
+                                alt, mut, rdn, rdnw, kvdif,   &
+                                ids, ide, jds, jde, kds, kde, &
+                                ims, ime, jms, jme, kms, kme, &
+                                its, ite, jts, jte, kts, kte )
+
+
+   IMPLICIT NONE
+   
+   ! Input data
+   
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,    INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                 ims, ime, jms, jme, kms, kme, &
+                                 its, ite, jts, jte, kts, kte
+
+   CHARACTER(LEN=1) ,                          INTENT(IN   ) :: name
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) ,                      &
+                                               INTENT(IN   ) :: field,    &
+                                                                alt
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: tendency
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: mut
+
+   REAL , DIMENSION( kms:kme ) ,                   INTENT(IN   ) :: rdn, rdnw
+
+   REAL ,                                      INTENT(IN   ) :: kvdif
+   
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+   INTEGER :: i_start, i_end, j_start, j_end
+
+   REAL , DIMENSION(its:ite, jts:jte) :: vfluxm, vfluxp, zz
+   REAL , DIMENSION(its:ite, 0:kte+1) :: vflux
+
+   REAL :: rdz
+
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  vertical_diffusion
+!  computes vertical diffusion tendency.
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+   ktf=MIN(kte,kde-1)
+   
+   IF (name .EQ. 'w')THEN
+
+   
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+j_loop_w : DO j = j_start, j_end
+
+     DO k=kts,ktf-1
+       DO i = i_start, i_end
+          vflux(i,k)= (kvdif/alt(i,k,j))*rdnw(k)*(field(i,k+1,j)-field(i,k,j))
+       ENDDO
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,ktf)=0.
+     ENDDO
+
+     DO k=kts+1,ktf
+       DO i = i_start, i_end
+            tendency(i,k,j)=tendency(i,k,j)                                         &
+                              +rdn(k)*g*g/mut(i,j)/(0.5*(alt(i,k,j)+alt(i,k-1,j)))  &
+                                         *(vflux(i,k)-vflux(i,k-1))
+       ENDDO
+     ENDDO
+
+    ENDDO j_loop_w
+
+   ELSE IF(name .EQ. 'm')THEN
+
+     i_start = its
+     i_end   = MIN(ite,ide-1)
+     j_start = jts
+     j_end   = MIN(jte,jde-1)
+
+j_loop_s : DO j = j_start, j_end
+
+     DO k=kts,ktf-1
+       DO i = i_start, i_end
+         vflux(i,k)=kvdif*rdn(k+1)/(0.5*(alt(i,k,j)+alt(i,k+1,j)))   &
+                  *(field(i,k+1,j)-field(i,k,j))
+       ENDDO
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,0)=vflux(i,1)
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,ktf)=0.
+     ENDDO
+
+     DO k=kts,ktf
+       DO i = i_start, i_end
+         tendency(i,k,j)=tendency(i,k,j)+g*g/mut(i,j)/alt(i,k,j)  &
+                *rdnw(k)*(vflux(i,k)-vflux(i,k-1))
+       ENDDO
+     ENDDO
+
+ ENDDO j_loop_s
+
+   ENDIF
+
+END SUBROUTINE vertical_diffusion
+
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE vertical_diffusion_mp ( field, tendency, config_flags, &
+                                   base,                          &
+                                   alt, mut, rdn, rdnw, kvdif,    &
+                                   ids, ide, jds, jde, kds, kde,  &
+                                   ims, ime, jms, jme, kms, kme,  &
+                                   its, ite, jts, jte, kts, kte  )
+
+
+   IMPLICIT NONE
+   
+   ! Input data
+   
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,    INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                 ims, ime, jms, jme, kms, kme, &
+                                 its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) ,                      &
+                                               INTENT(IN   ) :: field,    &
+                                                                alt
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: tendency
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: mut
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: rdn,  &
+                                                                  rdnw, &
+                                                                  base
+
+   REAL ,                                      INTENT(IN   ) :: kvdif
+   
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+   INTEGER :: i_start, i_end, j_start, j_end
+
+   REAL , DIMENSION(its:ite, 0:kte+1) :: vflux
+
+   REAL :: rdz
+
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  vertical_diffusion_mp
+!  computes vertical diffusion tendency of a perturbation variable
+!  (field-base).  Note that base as a 1D (k) field.
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+   ktf=MIN(kte,kde-1)
+   
+     i_start = its
+     i_end   = MIN(ite,ide-1)
+     j_start = jts
+     j_end   = MIN(jte,jde-1)
+
+j_loop_s : DO j = j_start, j_end
+
+     DO k=kts,ktf-1
+       DO i = i_start, i_end
+         vflux(i,k)=kvdif*rdn(k+1)/(0.5*(alt(i,k,j)+alt(i,k+1,j)))   &
+                    *(field(i,k+1,j)-field(i,k,j)-base(k+1)+base(k))
+       ENDDO
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,0)=vflux(i,1)
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,ktf)=0.
+     ENDDO
+
+     DO k=kts,ktf
+       DO i = i_start, i_end
+         tendency(i,k,j)=tendency(i,k,j)+g*g/mut(i,j)/alt(i,k,j)  &
+                *rdnw(k)*(vflux(i,k)-vflux(i,k-1))
+       ENDDO
+     ENDDO
+
+ ENDDO j_loop_s
+
+END SUBROUTINE vertical_diffusion_mp
+
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE vertical_diffusion_3dmp ( field, tendency, config_flags, &
+                                     base_3d,                       &
+                                     alt, mut, rdn, rdnw, kvdif,    &
+                                     ids, ide, jds, jde, kds, kde,  &
+                                     ims, ime, jms, jme, kms, kme,  &
+                                     its, ite, jts, jte, kts, kte  )
+
+
+   IMPLICIT NONE
+   
+   ! Input data
+   
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,    INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                 ims, ime, jms, jme, kms, kme, &
+                                 its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) ,                      &
+                                               INTENT(IN   ) :: field,    &
+                                                                alt,      &
+                                                                base_3d
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: tendency
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: mut
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: rdn,  &
+                                                                  rdnw
+
+   REAL ,                                      INTENT(IN   ) :: kvdif
+   
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+   INTEGER :: i_start, i_end, j_start, j_end
+
+   REAL , DIMENSION(its:ite, 0:kte+1) :: vflux
+
+   REAL :: rdz
+
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  vertical_diffusion_3dmp
+!  computes vertical diffusion tendency of a perturbation variable
+!  (field-base_3d).  
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+   ktf=MIN(kte,kde-1)
+   
+     i_start = its
+     i_end   = MIN(ite,ide-1)
+     j_start = jts
+     j_end   = MIN(jte,jde-1)
+
+j_loop_s : DO j = j_start, j_end
+
+     DO k=kts,ktf-1
+       DO i = i_start, i_end
+         vflux(i,k)=kvdif*rdn(k+1)/(0.5*(alt(i,k,j)+alt(i,k+1,j)))   &
+                    *(   field(i,k+1,j)  -field(i,k,j)               &
+                      -base_3d(i,k+1,j)+base_3d(i,k,j) )
+       ENDDO
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,0)=vflux(i,1)
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,ktf)=0.
+     ENDDO
+
+     DO k=kts,ktf
+       DO i = i_start, i_end
+         tendency(i,k,j)=tendency(i,k,j)+g*g/mut(i,j)/alt(i,k,j)  &
+                *rdnw(k)*(vflux(i,k)-vflux(i,k-1))
+       ENDDO
+     ENDDO
+
+ ENDDO j_loop_s
+
+END SUBROUTINE vertical_diffusion_3dmp
+
+
+!-------------------------------------------------------------------------------
+
+
+SUBROUTINE vertical_diffusion_u ( field, tendency,              &
+                                  config_flags, u_base,         &
+                                  alt, muu, rdn, rdnw, kvdif,   &
+                                  ids, ide, jds, jde, kds, kde, &
+                                  ims, ime, jms, jme, kms, kme, &
+                                  its, ite, jts, jte, kts, kte )
+
+
+   IMPLICIT NONE
+   
+   ! Input data
+   
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,    INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                 ims, ime, jms, jme, kms, kme, &
+                                 its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) ,                      &
+                                               INTENT(IN   ) :: field,    &
+                                                                alt
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: tendency
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: muu
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: rdn, rdnw, u_base
+
+   REAL ,                                      INTENT(IN   ) :: kvdif
+   
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+   INTEGER :: i_start, i_end, j_start, j_end
+
+   REAL , DIMENSION(its:ite, 0:kte+1) :: vflux
+
+   REAL :: rdz, zz
+
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  vertical_diffusion_u computes vertical diffusion tendency for 
+!  the u momentum equation.  This routine assumes a constant eddy
+!  viscosity kvdif.
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+   ktf=MIN(kte,kde-1)
+
+      i_start = its
+      i_end   = ite
+      j_start = jts
+      j_end   = MIN(jte,jde-1)
+
+      IF ( config_flags%open_xs .or. specified ) i_start = MAX(ids+1,its)
+      IF ( config_flags%open_xe .or. specified ) i_end   = MIN(ide-1,ite)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+
+j_loop_u : DO j = j_start, j_end
+
+     DO k=kts,ktf-1
+       DO i = i_start, i_end
+         vflux(i,k)=kvdif*rdn(k+1)/(0.25*( alt(i  ,k  ,j)      &
+                                        +alt(i-1,k  ,j)      &
+                                        +alt(i  ,k+1,j)      &
+                                        +alt(i-1,k+1,j) ) )  &
+                             *(field(i,k+1,j)-field(i,k,j)   &
+                               -u_base(k+1)   +u_base(k)  )
+       ENDDO
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,0)=vflux(i,1)
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,ktf)=0.
+     ENDDO
+
+     DO k=kts,ktf-1
+       DO i = i_start, i_end
+         tendency(i,k,j)=tendency(i,k,j)+                             &
+                g*g*rdnw(k)/muu(i,j)/(0.5*(alt(i-1,k,j)+alt(i,k,j)))* &
+                              (vflux(i,k)-vflux(i,k-1))
+       ENDDO
+     ENDDO
+
+ ENDDO j_loop_u
+   
+END SUBROUTINE vertical_diffusion_u
+
+!-------------------------------------------------------------------------------
+
+
+SUBROUTINE vertical_diffusion_v ( field, tendency,              &
+                                  config_flags, v_base,         &
+                                  alt, muv, rdn, rdnw, kvdif,   &
+                                  ids, ide, jds, jde, kds, kde, &
+                                  ims, ime, jms, jme, kms, kme, &
+                                  its, ite, jts, jte, kts, kte )
+
+
+   IMPLICIT NONE
+   
+   ! Input data
+   
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,    INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                 ims, ime, jms, jme, kms, kme, &
+                                 its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) ,                      &
+                                               INTENT(IN   ) :: field,    &
+                                                                alt
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: rdn, rdnw, v_base
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: tendency
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: muv
+
+   REAL ,                                      INTENT(IN   ) :: kvdif
+   
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf, jm1
+   INTEGER :: i_start, i_end, j_start, j_end
+
+   REAL , DIMENSION(its:ite, 0:kte+1) :: vflux
+
+   REAL :: rdz, zz
+
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  vertical_diffusion_v computes vertical diffusion tendency for 
+!  the v momentum equation.  This routine assumes a constant eddy
+!  viscosity kvdif.
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+   ktf=MIN(kte,kde-1)
+   
+      i_start = its
+      i_end   = MIN(ite,ide-1)
+      j_start = jts
+      j_end   = MIN(jte,jde-1)
+
+      IF ( config_flags%open_ys .or. specified ) j_start = MAX(jds+1,jts)
+      IF ( config_flags%open_ye .or. specified ) j_end   = MIN(jde-1,jte)
+
+j_loop_v : DO j = j_start, j_end
+!     jm1 = max(j-1,1)
+     jm1 = j-1
+
+     DO k=kts,ktf-1
+       DO i = i_start, i_end
+         vflux(i,k)=kvdif*rdn(k+1)/(0.25*( alt(i,k  ,j  )      &
+                                        +alt(i,k  ,jm1)      &
+                                        +alt(i,k+1,j  )      &
+                                        +alt(i,k+1,jm1) ) )  &
+                             *(field(i,k+1,j)-field(i,k,j)   &
+                               -v_base(k+1)   +v_base(k)  )
+       ENDDO
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,0)=vflux(i,1)
+     ENDDO
+
+     DO i = i_start, i_end
+       vflux(i,ktf)=0.
+     ENDDO
+
+     DO k=kts,ktf-1
+       DO i = i_start, i_end 
+         tendency(i,k,j)=tendency(i,k,j)+                              &
+                g*g*rdnw(k)/muv(i,j)/(0.5*(alt(i,k,jm1)+alt(i,k,j)))*  &
+                              (vflux(i,k)-vflux(i,k-1))
+       ENDDO
+     ENDDO
+
+ ENDDO j_loop_v
+   
+END SUBROUTINE vertical_diffusion_v
+
+!***************  end new mass coordinate routines
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE calculate_full ( rfield, rfieldb, rfieldp,     &
+                            ids, ide, jds, jde, kds, kde, &
+                            ims, ime, jms, jme, kms, kme, &
+                            its, ite, jts, jte, kts, kte )
+
+   IMPLICIT NONE
+   
+   ! Input data
+   
+   INTEGER ,      INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                   ims, ime, jms, jme, kms, kme, &
+                                   its, ite, jts, jte, kts, kte 
+   
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) :: rfieldb, &
+                                                                      rfieldp
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT  ) :: rfield
+   
+   ! Local indices.
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+   
+!<DESCRIPTION>
+!
+!  calculate_full
+!  calculates full 3D field from pertubation and base field.
+!
+!</DESCRIPTION>
+
+   itf=MIN(ite,ide-1)
+   jtf=MIN(jte,jde-1)
+   ktf=MIN(kte,kde-1)
+
+   DO j=jts,jtf
+   DO k=kts,ktf
+   DO i=its,itf
+      rfield(i,k,j)=rfieldb(i,k,j)+rfieldp(i,k,j)
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE calculate_full
+
+!------------------------------------------------------------------------------
+
+SUBROUTINE coriolis ( ru, rv, rw, ru_tend, rv_tend, rw_tend, &
+                      config_flags,                          &
+                      msftx, msfty, msfux, msfuy,            &
+                      msfvx, msfvy,                          &
+                      f, e, sina, cosa, fzm, fzp,            &
+                      ids, ide, jds, jde, kds, kde,          &
+                      ims, ime, jms, jme, kms, kme,          &
+                      its, ite, jts, jte, kts, kte          )
+
+   IMPLICIT NONE
+   
+   ! Input data
+   
+   TYPE(grid_config_rec_type) ,           INTENT(IN   ) :: config_flags   
+
+   INTEGER ,                 INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                              ims, ime, jms, jme, kms, kme, &
+                                              its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: ru_tend, &
+                                                                rv_tend, &
+                                                                rw_tend
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) :: ru, &
+                                                                rv, &
+                                                                rw
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: msfux,      &
+                                                                msfuy,      &
+                                                                msfvx,      &
+                                                                msfvy,      &
+                                                                msftx,      &
+                                                                msfty
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: f,    &
+                                                                    e,    &
+                                                                    sina, &
+                                                                    cosa
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: fzm, &
+                                                                  fzp
+   
+   ! Local indices.
+   
+   INTEGER :: i, j , k, ktf
+   INTEGER :: i_start, i_end, j_start, j_end
+   
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  coriolis calculates the large timestep tendency terms in the 
+!  u, v, and w momentum equations arise from the coriolis force.
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+   ktf=MIN(kte,kde-1)
+
+! coriolis for u-momentum equation
+
+!  Notes on map scale factor
+!  cosa, sina are related to rotating the coordinate frame if desired
+!  generally sina=0, cosa=1
+!  ADT eqn 44, RHS terms 6 and 7: -2 mu w omega cos(lat)/my
+!                                + 2 mu v omega sin(lat)/my
+!  Define f=2 omega sin(lat), e=2 omega cos(lat)
+!   => terms are: -e mu w / my + f mu v / my
+!  rv = mu v / mx ; rw = mu w / my
+!   => terms are: -e rw + f rv *mx / my
+
+   i_start = its
+   i_end   = ite
+   IF ( config_flags%open_xs .or. specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. specified .or. &
+        config_flags%nested) i_end   = MIN(ide-1,ite)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+   DO j = jts, MIN(jte,jde-1)
+
+   DO k=kts,ktf
+   DO i = i_start, i_end
+   
+     ru_tend(i,k,j)=ru_tend(i,k,j) + (msfux(i,j)/msfuy(i,j))*0.5*(f(i,j)+f(i-1,j)) &
+       *0.25*(rv(i-1,k,j+1)+rv(i,k,j+1)+rv(i-1,k,j)+rv(i,k,j)) &
+           - 0.5*(e(i,j)+e(i-1,j))*0.5*(cosa(i,j)+cosa(i-1,j)) &
+       *0.25*(rw(i-1,k+1,j)+rw(i-1,k,j)+rw(i,k+1,j)+rw(i,k,j))
+
+   ENDDO
+   ENDDO
+
+   IF ( (config_flags%open_xs) .and. (its == ids) ) THEN
+
+     DO k=kts,ktf
+   
+       ru_tend(its,k,j)=ru_tend(its,k,j) + (msfux(its,j)/msfuy(its,j))*0.5*(f(its,j)+f(its,j))   &
+         *0.25*(rv(its,k,j+1)+rv(its,k,j+1)+rv(its,k,j)+rv(its,k,j)) &
+             - 0.5*(e(its,j)+e(its,j))*0.5*(cosa(its,j)+cosa(its,j)) &
+         *0.25*(rw(its,k+1,j)+rw(its,k,j)+rw(its,k+1,j)+rw(its,k,j))
+
+     ENDDO
+
+   ENDIF
+
+   IF ( (config_flags%open_xe) .and. (ite == ide) ) THEN
+
+     DO k=kts,ktf
+   
+       ru_tend(ite,k,j)=ru_tend(ite,k,j) + (msfux(ite,j)/msfuy(ite,j))*0.5*(f(ite-1,j)+f(ite-1,j)) &
+         *0.25*(rv(ite-1,k,j+1)+rv(ite-1,k,j+1)+rv(ite-1,k,j)+rv(ite-1,k,j)) &
+             - 0.5*(e(ite-1,j)+e(ite-1,j))*0.5*(cosa(ite-1,j)+cosa(ite-1,j)) &
+         *0.25*(rw(ite-1,k+1,j)+rw(ite-1,k,j)+rw(ite-1,k+1,j)+rw(ite-1,k,j))
+
+     ENDDO
+
+   ENDIF
+
+   ENDDO
+
+!  coriolis term for v-momentum equation
+
+!  Notes on map scale factors
+!  ADT eqn 45, RHS terms 6 and 6b [0 for sina=0]: -2 mu u omega sin(lat)/mx + ?
+!  Define f=2 omega sin(lat), e=2 omega cos(lat)
+!   => terms are: -f mu u / mx
+!  ru = mu u / my ; rw = mu w / my
+!   => terms are: -f ru *my / mx + ?
+
+   j_start = jts
+   j_end   = jte
+
+   IF ( config_flags%open_ys .or. specified .or. &
+        config_flags%nested .or. config_flags%polar) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. specified .or. &
+        config_flags%nested .or. config_flags%polar) j_end   = MIN(jde-1,jte)
+
+   IF ( (config_flags%open_ys) .and. (jts == jds) ) THEN
+
+     DO k=kts,ktf
+     DO i=its,MIN(ide-1,ite)
+   
+        rv_tend(i,k,jts)=rv_tend(i,k,jts) - (msfvy(i,jts)/msfvx(i,jts))*0.5*(f(i,jts)+f(i,jts))    &
+         *0.25*(ru(i,k,jts)+ru(i+1,k,jts)+ru(i,k,jts)+ru(i+1,k,jts))   &
+             + (msfvy(i,jts)/msfvx(i,jts))*0.5*(e(i,jts)+e(i,jts))*0.5*(sina(i,jts)+sina(i,jts))   &
+             *0.25*(rw(i,k+1,jts)+rw(i,k,jts)+rw(i,k+1,jts)+rw(i,k,jts)) 
+
+     ENDDO
+     ENDDO
+
+   ENDIF
+
+   DO j=j_start, j_end
+   DO k=kts,ktf
+   DO i=its,MIN(ide-1,ite)
+   
+      rv_tend(i,k,j)=rv_tend(i,k,j) - (msfvy(i,j)/msfvx(i,j))*0.5*(f(i,j)+f(i,j-1))    &
+       *0.25*(ru(i,k,j)+ru(i+1,k,j)+ru(i,k,j-1)+ru(i+1,k,j-1)) &
+           + (msfvy(i,j)/msfvx(i,j))*0.5*(e(i,j)+e(i,j-1))*0.5*(sina(i,j)+sina(i,j-1)) &
+           *0.25*(rw(i,k+1,j-1)+rw(i,k,j-1)+rw(i,k+1,j)+rw(i,k,j)) 
+
+   ENDDO
+   ENDDO
+   ENDDO
+
+
+   IF ( (config_flags%open_ye) .and. (jte == jde) ) THEN
+
+     DO k=kts,ktf
+     DO i=its,MIN(ide-1,ite)
+   
+        rv_tend(i,k,jte)=rv_tend(i,k,jte) - (msfvy(i,jte)/msfvx(i,jte))*0.5*(f(i,jte-1)+f(i,jte-1))        &
+         *0.25*(ru(i,k,jte-1)+ru(i+1,k,jte-1)+ru(i,k,jte-1)+ru(i+1,k,jte-1))   &
+             + (msfvy(i,jte)/msfvx(i,jte))*0.5*(e(i,jte-1)+e(i,jte-1))*0.5*(sina(i,jte-1)+sina(i,jte-1))   &
+             *0.25*(rw(i,k+1,jte-1)+rw(i,k,jte-1)+rw(i,k+1,jte-1)+rw(i,k,jte-1)) 
+
+     ENDDO
+     ENDDO
+
+   ENDIF
+
+! coriolis term for w-mometum 
+
+! Notes on map scale factors
+! ADT eqn 46/my, RHS terms 5 and 5b [0 for sina=0]: 2 mu u omega cos(lat)/my +?
+! Define e=2 omega cos(lat)
+!  => terms are: e mu u / my + ???
+! ru = mu u / my ; ru = mu v / mx
+!  => terms are: e ru + ???
+
+   DO j=jts,MIN(jte, jde-1)
+   DO k=kts+1,ktf
+   DO i=its,MIN(ite, ide-1)
+
+       rw_tend(i,k,j)=rw_tend(i,k,j) + e(i,j)*           &
+          (cosa(i,j)*0.5*(fzm(k)*(ru(i,k,j)+ru(i+1,k,j)) &
+          +fzp(k)*(ru(i,k-1,j)+ru(i+1,k-1,j)))           &
+          -(msftx(i,j)/msfty(i,j))*                      &
+           sina(i,j)*0.5*(fzm(k)*(rv(i,k,j)+rv(i,k,j+1)) &
+          +fzp(k)*(rv(i,k-1,j)+rv(i,k-1,j+1))))
+
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE coriolis
+
+!------------------------------------------------------------------------------
+
+SUBROUTINE perturbation_coriolis ( ru_in, rv_in, rw, ru_tend, rv_tend, rw_tend, &
+                                   config_flags,                                &
+                                   u_base, v_base, z_base,                      &
+                                   muu, muv, phb, ph,                           &
+                                   msftx, msfty, msfux, msfuy, msfvx, msfvy,    &
+                                   f, e, sina, cosa, fzm, fzp,                  &
+                                   ids, ide, jds, jde, kds, kde,                &
+                                   ims, ime, jms, jme, kms, kme,                &
+                                   its, ite, jts, jte, kts, kte                )
+
+   IMPLICIT NONE
+   
+   ! Input data
+   
+   TYPE(grid_config_rec_type) ,           INTENT(IN   ) :: config_flags   
+
+   INTEGER ,                 INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                              ims, ime, jms, jme, kms, kme, &
+                                              its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: ru_tend, &
+                                                                rv_tend, &
+                                                                rw_tend
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) :: ru_in, &
+                                                                      rv_in, &
+                                                                      rw,    &
+                                                                      ph,    &
+                                                                      phb
+
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: msfux,      &
+                                                                msfuy,      &
+                                                                msfvx,      &
+                                                                msfvy,      &
+                                                                msftx,      &
+                                                                msfty
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: f,    &
+                                                                    e,    &
+                                                                    sina, &
+                                                                    cosa
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: muu, &
+                                                                    muv
+                                                                    
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: fzm, &
+                                                                  fzp
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: u_base,  &
+                                                                  v_base,  &
+                                                                  z_base
+   
+   ! Local storage
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) :: ru, &
+                                                      rv
+
+   REAL  :: z_at_u, z_at_v, wkp1, wk, wkm1
+
+   ! Local indices.
+   
+   INTEGER :: i, j , k, ktf
+   INTEGER :: i_start, i_end, j_start, j_end
+   
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  perturbation_coriolis calculates the large timestep tendency terms in the 
+!  u, v, and w momentum equations arise from the coriolis force.  This version
+!  subtracts off the horizontal velocities from the initial sounding when
+!  computing the forcing terms, hence "perturbation" coriolis.
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+   ktf=MIN(kte,kde-1)
+
+! coriolis for u-momentum equation
+
+   i_start = its
+   i_end   = ite
+   IF ( config_flags%open_xs .or. specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. specified .or. &
+        config_flags%nested) i_end   = MIN(ide-1,ite)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+!  compute perturbation mu*v for use in u momentum equation
+
+   DO j = jts, MIN(jte,jde-1)+1
+   DO k=kts+1,ktf-1
+   DO i = i_start-1, i_end
+     z_at_v = 0.25*( phb(i,k,j  )+phb(i,k+1,j  )  &
+                    +phb(i,k,j-1)+phb(i,k+1,j-1)  &
+                    +ph(i,k,j  )+ph(i,k+1,j  )    &
+                    +ph(i,k,j-1)+ph(i,k+1,j-1))/g
+     wkp1 = min(1.,max(0.,z_at_v-z_base(k))/(z_base(k+1)-z_base(k)))
+     wkm1 = min(1.,max(0.,z_base(k)-z_at_v)/(z_base(k)-z_base(k-1)))
+     wk   = 1.-wkp1-wkm1
+     rv(i,k,j) = rv_in(i,k,j) - muv(i,j)*(            &
+                                  wkm1*v_base(k-1)    &
+                                 +wk  *v_base(k  )    &
+                                 +wkp1*v_base(k+1)   )
+   ENDDO
+   ENDDO
+   ENDDO
+
+
+!  pick up top and bottom v 
+
+   DO j = jts, MIN(jte,jde-1)+1
+   DO i = i_start-1, i_end
+
+     k = kts
+     z_at_v = 0.25*( phb(i,k,j  )+phb(i,k+1,j  )  &
+                    +phb(i,k,j-1)+phb(i,k+1,j-1)  &
+                    +ph(i,k,j  )+ph(i,k+1,j  )    &
+                    +ph(i,k,j-1)+ph(i,k+1,j-1))/g
+     wkp1 = min(1.,max(0.,z_at_v-z_base(k))/(z_base(k+1)-z_base(k)))
+     wk   = 1.-wkp1
+     rv(i,k,j) = rv_in(i,k,j) - muv(i,j)*(            &
+                                 +wk  *v_base(k  )    &
+                                 +wkp1*v_base(k+1)   )
+
+     k = ktf
+     z_at_v = 0.25*( phb(i,k,j  )+phb(i,k+1,j  )  &
+                    +phb(i,k,j-1)+phb(i,k+1,j-1)  &
+                    +ph(i,k,j  )+ph(i,k+1,j  )    &
+                    +ph(i,k,j-1)+ph(i,k+1,j-1))/g
+     wkm1 = min(1.,max(0.,z_base(k)-z_at_v)/(z_base(k)-z_base(k-1)))
+     wk   = 1.-wkm1
+     rv(i,k,j) = rv_in(i,k,j) - muv(i,j)*(            &
+                                  wkm1*v_base(k-1)    &
+                                 +wk  *v_base(k  )   )
+
+   ENDDO
+   ENDDO
+
+!  compute coriolis forcing for u
+
+!  Map scale factors: see comments above for Coriolis
+
+   DO j = jts, MIN(jte,jde-1)
+
+   DO k=kts,ktf
+     DO i = i_start, i_end
+       ru_tend(i,k,j)=ru_tend(i,k,j) + (msfux(i,j)/msfuy(i,j))*0.5*(f(i,j)+f(i-1,j)) &
+         *0.25*(rv(i-1,k,j+1)+rv(i,k,j+1)+rv(i-1,k,j)+rv(i,k,j)) &
+             - 0.5*(e(i,j)+e(i-1,j))*0.5*(cosa(i,j)+cosa(i-1,j)) &
+         *0.25*(rw(i-1,k+1,j)+rw(i-1,k,j)+rw(i,k+1,j)+rw(i,k,j))
+     ENDDO
+   ENDDO
+
+   IF ( (config_flags%open_xs) .and. (its == ids) ) THEN
+
+     DO k=kts,ktf
+   
+       ru_tend(its,k,j)=ru_tend(its,k,j) + (msfux(its,j)/msfuy(its,j))*0.5*(f(its,j)+f(its,j))   &
+         *0.25*(rv(its,k,j+1)+rv(its,k,j+1)+rv(its,k,j)+rv(its,k,j)) &
+             - 0.5*(e(its,j)+e(its,j))*0.5*(cosa(its,j)+cosa(its,j)) &
+         *0.25*(rw(its,k+1,j)+rw(its,k,j)+rw(its,k+1,j)+rw(its,k,j))
+
+     ENDDO
+
+   ENDIF
+
+   IF ( (config_flags%open_xe) .and. (ite == ide) ) THEN
+
+     DO k=kts,ktf
+   
+       ru_tend(ite,k,j)=ru_tend(ite,k,j) + (msfux(ite,j)/msfuy(ite,j))*0.5*(f(ite-1,j)+f(ite-1,j)) &
+         *0.25*(rv(ite-1,k,j+1)+rv(ite-1,k,j+1)+rv(ite-1,k,j)+rv(ite-1,k,j)) &
+             - 0.5*(e(ite-1,j)+e(ite-1,j))*0.5*(cosa(ite-1,j)+cosa(ite-1,j)) &
+         *0.25*(rw(ite-1,k+1,j)+rw(ite-1,k,j)+rw(ite-1,k+1,j)+rw(ite-1,k,j))
+
+     ENDDO
+
+   ENDIF
+
+   ENDDO
+
+!  coriolis term for v-momentum equation
+!  Map scale factors: see comments above for Coriolis
+
+   j_start = jts
+   j_end   = jte
+
+   IF ( config_flags%open_ys .or. specified .or. &
+        config_flags%nested .or. config_flags%polar) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. specified .or. &
+        config_flags%nested .or. config_flags%polar) j_end   = MIN(jde-1,jte)
+
+!  compute perturbation mu*u for use in v momentum equation
+
+   DO j = j_start-1,j_end
+   DO k=kts+1,ktf-1
+   DO i = its, MIN(ite,ide-1)+1
+     z_at_u = 0.25*( phb(i  ,k,j)+phb(i  ,k+1,j)  &
+                    +phb(i-1,k,j)+phb(i-1,k+1,j)  &
+                    +ph(i  ,k,j)+ph(i  ,k+1,j)    &
+                    +ph(i-1,k,j)+ph(i-1,k+1,j))/g
+     wkp1 = min(1.,max(0.,z_at_u-z_base(k))/(z_base(k+1)-z_base(k)))
+     wkm1 = min(1.,max(0.,z_base(k)-z_at_u)/(z_base(k)-z_base(k-1)))
+     wk   = 1.-wkp1-wkm1
+     ru(i,k,j) = ru_in(i,k,j) - muu(i,j)*(            &
+                                  wkm1*u_base(k-1)    &
+                                 +wk  *u_base(k  )    &
+                                 +wkp1*u_base(k+1)   )
+   ENDDO
+   ENDDO
+   ENDDO
+
+!  pick up top and bottom u
+
+   DO j = j_start-1,j_end
+   DO i = its, MIN(ite,ide-1)+1
+
+     k = kts
+     z_at_u = 0.25*( phb(i  ,k,j)+phb(i  ,k+1,j)  &
+                    +phb(i-1,k,j)+phb(i-1,k+1,j)  &
+                    +ph(i  ,k,j)+ph(i  ,k+1,j)    &
+                    +ph(i-1,k,j)+ph(i-1,k+1,j))/g
+     wkp1 = min(1.,max(0.,z_at_u-z_base(k))/(z_base(k+1)-z_base(k)))
+     wk   = 1.-wkp1
+     ru(i,k,j) = ru_in(i,k,j) - muu(i,j)*(            &
+                                 +wk  *u_base(k  )    &
+                                 +wkp1*u_base(k+1)   )
+
+
+     k = ktf
+     z_at_u = 0.25*( phb(i  ,k,j)+phb(i  ,k+1,j)  &
+                    +phb(i-1,k,j)+phb(i-1,k+1,j)  &
+                    +ph(i  ,k,j)+ph(i  ,k+1,j)    &
+                    +ph(i-1,k,j)+ph(i-1,k+1,j))/g
+     wkm1 = min(1.,max(0.,z_base(k)-z_at_u)/(z_base(k)-z_base(k-1)))
+     wk   = 1.-wkm1
+     ru(i,k,j) = ru_in(i,k,j) - muu(i,j)*(            &
+                                  wkm1*u_base(k-1)    &
+                                 +wk  *u_base(k  )   )
+
+   ENDDO
+   ENDDO
+
+!  compute coriolis forcing for v momentum equation
+!  Map scale factors: see comments above for Coriolis
+
+   IF ( (config_flags%open_ys) .and. (jts == jds) ) THEN
+
+     DO k=kts,ktf
+     DO i=its,MIN(ide-1,ite)
+   
+        rv_tend(i,k,jts)=rv_tend(i,k,jts) - (msfvy(i,jts)/msfvx(i,jts))*0.5*(f(i,jts)+f(i,jts))    &
+         *0.25*(ru(i,k,jts)+ru(i+1,k,jts)+ru(i,k,jts)+ru(i+1,k,jts))   &
+             + (msfvy(i,jts)/msfvx(i,jts))*0.5*(e(i,jts)+e(i,jts))*0.5*(sina(i,jts)+sina(i,jts))   &
+             *0.25*(rw(i,k+1,jts)+rw(i,k,jts)+rw(i,k+1,jts)+rw(i,k,jts)) 
+
+     ENDDO
+     ENDDO
+
+   ENDIF
+
+   DO j=j_start, j_end
+   DO k=kts,ktf
+   DO i=its,MIN(ide-1,ite)
+   
+      rv_tend(i,k,j)=rv_tend(i,k,j) - (msfvy(i,j)/msfvx(i,j))*0.5*(f(i,j)+f(i,j-1))    &
+       *0.25*(ru(i,k,j)+ru(i+1,k,j)+ru(i,k,j-1)+ru(i+1,k,j-1)) &
+           + (msfvy(i,j)/msfvx(i,j))*0.5*(e(i,j)+e(i,j-1))*0.5*(sina(i,j)+sina(i,j-1)) &
+           *0.25*(rw(i,k+1,j-1)+rw(i,k,j-1)+rw(i,k+1,j)+rw(i,k,j)) 
+
+   ENDDO
+   ENDDO
+   ENDDO
+
+
+   IF ( (config_flags%open_ye) .and. (jte == jde) ) THEN
+
+     DO k=kts,ktf
+     DO i=its,MIN(ide-1,ite)
+   
+        rv_tend(i,k,jte)=rv_tend(i,k,jte) - (msfvy(i,jte)/msfvx(i,jte))*0.5*(f(i,jte-1)+f(i,jte-1))        &
+         *0.25*(ru(i,k,jte-1)+ru(i+1,k,jte-1)+ru(i,k,jte-1)+ru(i+1,k,jte-1))   &
+             + (msfvy(i,jte)/msfvx(i,jte))*0.5*(e(i,jte-1)+e(i,jte-1))*0.5*(sina(i,jte-1)+sina(i,jte-1))   &
+             *0.25*(rw(i,k+1,jte-1)+rw(i,k,jte-1)+rw(i,k+1,jte-1)+rw(i,k,jte-1)) 
+
+     ENDDO
+     ENDDO
+
+   ENDIF
+
+! coriolis term for w-mometum 
+!  Map scale factors: see comments above for Coriolis
+
+   DO j=jts,MIN(jte, jde-1)
+   DO k=kts+1,ktf
+   DO i=its,MIN(ite, ide-1)
+
+       rw_tend(i,k,j)=rw_tend(i,k,j) + e(i,j)*           &
+          (cosa(i,j)*0.5*(fzm(k)*(ru(i,k,j)+ru(i+1,k,j)) &
+          +fzp(k)*(ru(i,k-1,j)+ru(i+1,k-1,j)))           &
+          -(msftx(i,j)/msfty(i,j))*sina(i,j)*0.5*(fzm(k)*(rv(i,k,j)+rv(i,k,j+1)) &
+          +fzp(k)*(rv(i,k-1,j)+rv(i,k-1,j+1))))
+
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE perturbation_coriolis
+
+!------------------------------------------------------------------------------
+
+SUBROUTINE curvature ( ru, rv, rw, u, v, w, ru_tend, rv_tend, rw_tend, &
+                        config_flags,                                       &
+                        msfux, msfuy, msfvx, msfvy, msftx, msfty,       &
+                        xlat, fzm, fzp, rdx, rdy,                       &
+                        ids, ide, jds, jde, kds, kde,                   &
+                        ims, ime, jms, jme, kms, kme,                   &
+                        its, ite, jts, jte, kts, kte                   )
+
+
+   IMPLICIT NONE
+   
+   ! Input data
+
+   TYPE(grid_config_rec_type) ,           INTENT(IN   ) :: config_flags   
+
+   INTEGER ,                  INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                               ims, ime, jms, jme, kms, kme, &
+                                               its, ite, jts, jte, kts, kte
+   
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) ,                     &
+                                               INTENT(INOUT) :: ru_tend, &
+                                                                rv_tend, &
+                                                                rw_tend
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) ,                     &
+                                               INTENT(IN   ) :: ru,      &
+                                                                rv,      &
+                                                                rw,      &
+                                                                u,       &
+                                                                v,       &
+                                                                w
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: msfux,    &
+                                                                msfuy,    &
+                                                                msfvx,    &
+                                                                msfvy,    &
+                                                                msftx,    &
+                                                                msfty,    &
+                                                                xlat
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: fzm,     &
+                                                                fzp
+
+   REAL ,                                      INTENT(IN   ) :: rdx,     &
+                                                                rdy
+   
+   ! Local data
+   
+!   INTEGER :: i, j, k, itf, jtf, ktf, kp1, im, ip, jm, jp
+   INTEGER :: i, j, k, itf, jtf, ktf
+   INTEGER :: i_start, i_end, j_start, j_end
+!   INTEGER :: irmin, irmax, jrmin, jrmax
+
+   REAL , DIMENSION( its-1:ite , kts:kte, jts-1:jte ) :: vxgm
+
+   LOGICAL :: specified
+
+!<DESCRIPTION>
+!
+!  curvature calculates the large timestep tendency terms in the 
+!  u, v, and w momentum equations arise from the curvature terms.  
+!
+!</DESCRIPTION>
+
+   specified = .false.
+   if(config_flags%specified .or. config_flags%nested) specified = .true.
+
+      itf=MIN(ite,ide-1)
+      jtf=MIN(jte,jde-1)
+      ktf=MIN(kte,kde-1)
+
+!   irmin = ims
+!   irmax = ime
+!   jrmin = jms
+!   jrmax = jme
+!   IF ( config_flags%open_xs ) irmin = ids
+!   IF ( config_flags%open_xe ) irmax = ide-1
+!   IF ( config_flags%open_ys ) jrmin = jds
+!   IF ( config_flags%open_ye ) jrmax = jde-1
+   
+! Define v cross grad m at scalar points - vxgm(i,j)
+
+   i_start = its-1
+   i_end   = ite
+   j_start = jts-1
+   j_end   = jte
+
+   IF ( ( config_flags%open_xs .or. specified .or. &
+        config_flags%nested) .and. (its == ids) ) i_start = its
+   IF ( ( config_flags%open_xe .or. specified .or. &
+        config_flags%nested) .and. (ite == ide) ) i_end   = ite-1
+   IF ( ( config_flags%open_ys .or. specified .or. &
+        config_flags%nested .or. config_flags%polar) .and. (jts == jds) ) j_start = jts
+   IF ( ( config_flags%open_ye .or. specified .or. &
+        config_flags%nested .or. config_flags%polar) .and. (jte == jde) ) j_end   = jte-1
+      IF ( config_flags%periodic_x ) i_start = its-1
+      IF ( config_flags%periodic_x ) i_end = ite
+
+   DO j=j_start, j_end
+   DO k=kts,ktf
+   DO i=i_start, i_end
+!     Map scale factor notes:
+!     msf...y is constant everywhere for cylindrical map projection
+!     msf...x varies with y only
+!     But we know that this is not = 0 for cylindrical,
+!     therefore use msfvX in 1st line
+!     which => by symmetry use msfuY in 2nd line - ???  
+      vxgm(i,k,j)=0.5*(u(i,k,j)+u(i+1,k,j))*(msfvx(i,j+1)-msfvx(i,j))*rdy - &
+                  0.5*(v(i,k,j)+v(i,k,j+1))*(msfuy(i+1,j)-msfuy(i,j))*rdx
+   ENDDO
+   ENDDO
+   ENDDO
+
+!  Pick up the boundary rows for open (radiation) lateral b.c.
+!  Rather crude at present, we are assuming there is no
+!    variation in this term at the boundary.
+
+   IF ( ( config_flags%open_xs .or. (specified .AND. .NOT. config_flags%periodic_x) .or. &
+        config_flags%nested) .and. (its == ids) ) THEN
+
+     DO j = jts, jte-1
+     DO k = kts, ktf
+       vxgm(its-1,k,j) =  vxgm(its,k,j)
+     ENDDO
+     ENDDO
+
+   ENDIF
+
+   IF ( ( config_flags%open_xe .or. (specified .AND. .NOT. config_flags%periodic_x) .or. &
+        config_flags%nested) .and. (ite == ide) ) THEN
+
+     DO j = jts, jte-1
+     DO k = kts, ktf
+       vxgm(ite,k,j) =  vxgm(ite-1,k,j)
+     ENDDO
+     ENDDO
+
+   ENDIF
+
+!  Polar boundary condition:
+!  The following change is needed in case one tries using the vxgm route with
+!  polar B.C.'s in the future, but not needed if 'tan' used
+   IF ( ( config_flags%open_ys .or. specified .or. &
+        config_flags%nested .or. config_flags%polar) .and. (jts == jds) ) THEN
+
+     DO k = kts, ktf
+     DO i = its-1, ite
+       vxgm(i,k,jts-1) =  vxgm(i,k,jts)
+     ENDDO
+     ENDDO
+
+   ENDIF
+
+!  Polar boundary condition:
+!  The following change is needed in case one tries using the vxgm route with
+!  polar B.C.'s in the future, but not needed if 'tan' used
+   IF ( ( config_flags%open_ye .or. specified .or. &
+        config_flags%nested .or. config_flags%polar) .and. (jte == jde) ) THEN
+
+     DO k = kts, ktf
+     DO i = its-1, ite
+       vxgm(i,k,jte) =  vxgm(i,k,jte-1)
+     ENDDO
+     ENDDO
+
+   ENDIF
+
+!  curvature term for u momentum eqn.
+
+!  Map scale factor notes:
+!  ADT eqn 44, RHS terms 4 and 5, in cylindrical: mu u v tan(lat)/(a my)
+!                                               - mu u w /(a my)
+!  ru = mu u / my ; rw = mu w / my ; rv = mu v / mx
+!   => terms are:
+!  (mx/my)*u rv tan(lat) / a - u rw / a = (u/a)*[(mx/my) rv tan(lat) - rw]
+!  ru v tan(lat) / a - u rw / a
+!  xlat defined with end points half grid space from pole,
+!  hence are on u latitude points
+
+   i_start = its
+   IF ( config_flags%open_xs .or. specified .or. &
+        config_flags%nested) i_start = MAX ( ids+1 , its )
+   IF ( config_flags%open_xe .or. specified .or. &
+        config_flags%nested) i_end   = MIN ( ide-1 , ite )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+!  Polar boundary condition
+   IF ((config_flags%map_proj == 6) .OR. (config_flags%polar)) THEN
+
+      DO j=jts,MIN(jde-1,jte)
+      DO k=kts,ktf
+      DO i=i_start,i_end
+
+            ru_tend(i,k,j)=ru_tend(i,k,j) + u(i,k,j)*reradius*                 ( &
+                        (msfux(i,j)/msfuy(i,j))*0.25*(rv(i-1,k,j+1)+rv(i,k,j+1)+ &
+                                    rv(i-1,k,j)+rv(i,k,j))*tan(xlat(i,j)*degrad) &
+                        - 0.25*(rw(i-1,k+1,j)+rw(i-1,k,j)+rw(i,k+1,j)+rw(i,k,j)) )
+      ENDDO
+      ENDDO
+      ENDDO
+
+   ELSE  ! normal code
+
+
+      DO j=jts,MIN(jde-1,jte)
+      DO k=kts,ktf
+      DO i=i_start,i_end
+
+         ru_tend(i,k,j)=ru_tend(i,k,j) + 0.5*(vxgm(i,k,j)+vxgm(i-1,k,j)) &
+                 *0.25*(rv(i-1,k,j+1)+rv(i,k,j+1)+rv(i-1,k,j)+rv(i,k,j)) &
+                  - u(i,k,j)*reradius &
+                 *0.25*(rw(i-1,k+1,j)+rw(i-1,k,j)+rw(i,k+1,j)+rw(i,k,j))
+
+      ENDDO
+      ENDDO
+      ENDDO
+
+   END IF
+
+!  curvature term for v momentum eqn.
+
+!  Map scale factor notes
+!  ADT eqn 45, RHS terms 4 and 5, in cylindrical: mu u*u tan(lat)/(a mx)
+!                                               - mu v w /(a mx)
+!  ru = mu u / my ; rw = mu w / my ; rv = mu v / mx
+!  terms are:
+!  (my/mx)*u ru tan(lat) / a - (my/mx)*v rw / a 
+!  = [my/(mx*a)]*[u ru tan(lat) - v rw]
+!  (1/a)*[(my/mx)*u ru tan(lat) - w rv]
+!  xlat defined with end points half grid space from pole, hence are on
+!  u latitude points => av here
+!
+!  in original wrf, there was a sign error for the rw contribution
+
+   j_start = jts
+   IF ( config_flags%open_ys .or. specified .or. &
+        config_flags%nested .or. config_flags%polar) j_start = MAX ( jds+1 , jts )
+   IF ( config_flags%open_ye .or. specified .or. &
+        config_flags%nested .or. config_flags%polar) j_end   = MIN ( jde-1 , jte )
+
+   IF ((config_flags%map_proj == 6) .OR. (config_flags%polar)) THEN
+
+      DO j=j_start,j_end
+      DO k=kts,ktf
+      DO i=its,MIN(ite,ide-1)
+            rv_tend(i,k,j)=rv_tend(i,k,j) - (msfvy(i,j)/msfvx(i,j))*reradius*   (  &
+                        0.25*(u(i,k,j)+u(i+1,k,j)+u(i,k,j-1)+u(i+1,k,j-1))*     &
+                        tan((xlat(i,j)+xlat(i,j-1))*0.5*degrad)*                &
+                        0.25*(ru(i,k,j)+ru(i+1,k,j)+ru(i,k,j-1)+ru(i+1,k,j-1))  &
+                       - v(i,k,j)*0.25*(rw(i,k+1,j-1)+rw(i,k,j-1)+              &
+                                                      rw(i,k+1,j)+rw(i,k,j))    )
+      ENDDO
+      ENDDO
+      ENDDO
+
+   ELSE  ! normal code
+
+      DO j=j_start,j_end
+      DO k=kts,ktf
+      DO i=its,MIN(ite,ide-1)
+
+         rv_tend(i,k,j)=rv_tend(i,k,j) - 0.5*(vxgm(i,k,j)+vxgm(i,k,j-1)) &
+                 *0.25*(ru(i,k,j)+ru(i+1,k,j)+ru(i,k,j-1)+ru(i+1,k,j-1)) &
+                       - (msfvy(i,j)/msfvx(i,j))*v(i,k,j)*reradius       &
+                 *0.25*(rw(i,k+1,j-1)+rw(i,k,j-1)+rw(i,k+1,j)+rw(i,k,j))
+
+      ENDDO
+      ENDDO
+      ENDDO
+
+   END IF
+
+!  curvature term for vertical momentum eqn.
+
+!  Notes on map scale factors:
+!  ADT eqn 46, RHS term 4: [mu/(a my)]*[u*u + v*v]
+!  ru = mu u / my ; rw = mu w / my ; rv = mu v / mx
+!  terms are: u ru / a + (mx/my)v rv / a
+
+   DO j=jts,MIN(jte,jde-1)
+   DO k=MAX(2,kts),ktf
+   DO i=its,MIN(ite,ide-1)
+
+      rw_tend(i,k,j)=rw_tend(i,k,j) + reradius*                              &
+    (0.5*(fzm(k)*(ru(i,k,j)+ru(i+1,k,j))+fzp(k)*(ru(i,k-1,j)+ru(i+1,k-1,j))) &
+    *0.5*(fzm(k)*( u(i,k,j) +u(i+1,k,j))+fzp(k)*( u(i,k-1,j) +u(i+1,k-1,j)))     &
+    +(msftx(i,j)/msfty(i,j))*0.5*(fzm(k)*(rv(i,k,j)+rv(i,k,j+1))+fzp(k)*(rv(i,k-1,j)+rv(i,k-1,j+1))) &
+    *0.5*(fzm(k)*( v(i,k,j) +v(i,k,j+1))+fzp(k)*( v(i,k-1,j) +v(i,k-1,j+1))))
+
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE curvature
+
+!------------------------------------------------------------------------------
+
+SUBROUTINE decouple ( rr, rfield, field, name, config_flags, &
+                      fzm, fzp,                          &
+                      ids, ide, jds, jde, kds, kde,      &
+                      ims, ime, jms, jme, kms, kme,      &
+                      its, ite, jts, jte, kts, kte      )
+
+   IMPLICIT NONE
+
+   ! Input data
+
+   TYPE(grid_config_rec_type) ,           INTENT(IN   ) :: config_flags   
+
+   INTEGER ,                                   INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                                                ims, ime, jms, jme, kms, kme, &
+                                                                its, ite, jts, jte, kts, kte
+
+   CHARACTER(LEN=1) ,                          INTENT(IN   ) :: name
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) :: rfield
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) :: rr
+   
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT  ) :: field
+   
+   REAL , DIMENSION( kms:kme ) , INTENT(IN   ) :: fzm, fzp
+   
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+   
+!<DESCRIPTION>
+!
+!  decouple decouples a variable from the column dry-air mass.
+!
+!</DESCRIPTION>
+
+   ktf=MIN(kte,kde-1)
+   
+   IF (name .EQ. 'u')THEN
+      itf=ite
+      jtf=MIN(jte,jde-1)
+
+      DO j=jts,jtf
+      DO k=kts,ktf
+      DO i=its,itf
+         field(i,k,j)=rfield(i,k,j)/(0.5*(rr(i,k,j)+rr(i-1,k,j)))
+      ENDDO
+      ENDDO
+      ENDDO
+
+   ELSE IF (name .EQ. 'v')THEN
+      itf=MIN(ite,ide-1)
+      jtf=jte
+
+      DO j=jts,jtf
+      DO k=kts,ktf
+        DO i=its,itf
+             field(i,k,j)=rfield(i,k,j)/(0.5*(rr(i,k,j)+rr(i,k,j-1)))
+        ENDDO
+      ENDDO
+      ENDDO
+
+   ELSE IF (name .EQ. 'w')THEN
+      itf=MIN(ite,ide-1)
+      jtf=MIN(jte,jde-1)
+      DO j=jts,jtf
+      DO k=kts+1,ktf
+      DO i=its,itf
+         field(i,k,j)=rfield(i,k,j)/(fzm(k)*rr(i,k,j)+fzp(k)*rr(i,k-1,j))
+      ENDDO
+      ENDDO
+      ENDDO
+
+      DO j=jts,jtf
+      DO i=its,itf
+        field(i,kte,j) = 0.
+      ENDDO
+      ENDDO
+
+   ELSE 
+      itf=MIN(ite,ide-1)
+      jtf=MIN(jte,jde-1)
+   ! For theta we will decouple tb and tp and add them to give t afterwards
+      DO j=jts,jtf
+      DO k=kts,ktf
+      DO i=its,itf
+         field(i,k,j)=rfield(i,k,j)/rr(i,k,j)
+      ENDDO
+      ENDDO
+      ENDDO
+   
+   ENDIF
+
+END SUBROUTINE decouple
+
+!-------------------------------------------------------------------------------
+
+
+SUBROUTINE zero_tend ( tendency,                     &
+                       ids, ide, jds, jde, kds, kde, &
+                       ims, ime, jms, jme, kms, kme, &
+                       its, ite, jts, jte, kts, kte )
+
+
+   IMPLICIT NONE
+   
+   ! Input data
+   
+   INTEGER ,                                   INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                                                ims, ime, jms, jme, kms, kme, &
+                                                                its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: tendency
+
+   ! Local data
+   
+   INTEGER :: i, j, k, itf, jtf, ktf
+
+!<DESCRIPTION>
+!
+!  zero_tend sets the input tendency array to zero.
+!
+!</DESCRIPTION>
+
+      DO j = jts, jte
+      DO k = kts, kte
+      DO i = its, ite
+        tendency(i,k,j) = 0.
+      ENDDO
+      ENDDO
+      ENDDO
+
+      END SUBROUTINE zero_tend
+
+!-------------------------------------------------------------------------------
+! Sets the an array on the polar v point(s) to zero
+SUBROUTINE zero_pole ( field,                        &
+                       ids, ide, jds, jde, kds, kde, &
+                       ims, ime, jms, jme, kms, kme, &
+                       its, ite, jts, jte, kts, kte )
+
+
+  IMPLICIT NONE
+
+  ! Input data
+   
+  INTEGER , INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                             ims, ime, jms, jme, kms, kme, &
+                             its, ite, jts, jte, kts, kte
+
+  REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: field
+
+  ! Local data
+
+  INTEGER :: i, k
+
+  IF (jts == jds) THEN
+     DO k = kts, kte
+     DO i = its-1, ite+1
+        field(i,k,jts) = 0.
+     END DO
+     END DO
+  END IF
+  IF (jte == jde) THEN
+     DO k = kts, kte
+     DO i = its-1, ite+1
+        field(i,k,jte) = 0.
+     END DO
+     END DO
+  END IF
+
+END SUBROUTINE zero_pole
+
+!-------------------------------------------------------------------------------
+! Sets the an array on the polar v point(s)
+SUBROUTINE pole_point_bc ( field,                        &
+                       ids, ide, jds, jde, kds, kde, &
+                       ims, ime, jms, jme, kms, kme, &
+                       its, ite, jts, jte, kts, kte )
+
+
+  IMPLICIT NONE
+
+  ! Input data
+   
+  INTEGER , INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                             ims, ime, jms, jme, kms, kme, &
+                             its, ite, jts, jte, kts, kte
+
+  REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: field
+
+  ! Local data
+
+  INTEGER :: i, k
+
+  IF (jts == jds) THEN
+     DO k = kts, kte
+     DO i = its, ite
+!        field(i,k,jts) = 2*field(i,k,jts+1) - field(i,k,jts+2)
+        field(i,k,jts) = field(i,k,jts+1)
+     END DO
+     END DO
+  END IF
+  IF (jte == jde) THEN
+     DO k = kts, kte
+     DO i = its, ite
+!        field(i,k,jte) = 2*field(i,k,jte-1) - field(i,k,jte-2)
+        field(i,k,jte) = field(i,k,jte-1)
+     END DO
+     END DO
+  END IF
+
+END SUBROUTINE pole_point_bc
+
+!======================================================================
+!   physics prep routines
+!======================================================================
+
+   SUBROUTINE phy_prep ( config_flags,                                &  ! input
+                         mu, muu, muv, u, v, w, p, pb, alt, ph,       &  ! input
+                         phb, t, tsk, moist, n_moist,                 &  ! input
+                         mu_3d, rho, th_phy, p_phy , pi_phy ,         &  ! output
+                         u_phy, v_phy, w_phy, p8w, t_phy, t8w,        &  ! output
+                         z, z_at_w, dz8w,                             &  ! output
+                         fzm, fzp,                                    &  ! params
+                         RTHRATEN,                                    &
+                         RTHBLTEN, RUBLTEN, RVBLTEN,                  &
+                         RQVBLTEN, RQCBLTEN, RQIBLTEN,                &
+                         RTHCUTEN, RQVCUTEN, RQCCUTEN,                &
+                         RQRCUTEN, RQICUTEN, RQSCUTEN,                &
+                         RTHFTEN,  RQVFTEN,                           &
+                         RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN,            &
+                         RQVNDGDTEN, RMUNDGDTEN,                      &
+                         ids, ide, jds, jde, kds, kde,                &
+                         ims, ime, jms, jme, kms, kme,                &
+                         its, ite, jts, jte, kts, kte                )
+!----------------------------------------------------------------------
+   IMPLICIT NONE
+!----------------------------------------------------------------------
+
+   TYPE(grid_config_rec_type) ,     INTENT(IN   ) :: config_flags
+
+   INTEGER ,        INTENT(IN   ) ::   ids, ide, jds, jde, kds, kde, &
+                                       ims, ime, jms, jme, kms, kme, &
+                                       its, ite, jts, jte, kts, kte
+   INTEGER ,          INTENT(IN   ) :: n_moist
+
+   REAL, DIMENSION( ims:ime, kms:kme , jms:jme , n_moist ), INTENT(IN) :: moist
+
+
+   REAL , DIMENSION( ims:ime, jms:jme ), INTENT(IN   )   ::     TSK, mu, muu, muv
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) ,                 &
+          INTENT(  OUT)                                  ::   u_phy, &
+                                                              v_phy, &
+                                                              w_phy, &
+                                                             pi_phy, &
+                                                              p_phy, &
+                                                                p8w, &
+                                                              t_phy, &
+                                                             th_phy, &
+                                                                t8w, &
+                                                              mu_3d, &
+                                                                rho, &
+                                                                  z, &
+                                                               dz8w, &
+                                                              z_at_w 
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) ,                 &
+          INTENT(IN   )                                  ::      pb, &
+                                                                  p, &
+                                                                  u, &
+                                                                  v, &
+                                                                  w, &
+                                                                alt, &
+                                                                 ph, &
+                                                                phb, &
+                                                                  t
+
+
+   REAL , DIMENSION( kms:kme ) ,           INTENT(IN   ) ::     fzm,   &
+                                                                fzp
+
+   REAL,  DIMENSION( ims:ime , kms:kme, jms:jme ),                   &
+          INTENT(INOUT)   ::                               RTHRATEN  
+
+   REAL,  DIMENSION( ims:ime , kms:kme, jms:jme ),                   &
+          INTENT(INOUT)   ::                               RTHCUTEN, &
+                                                           RQVCUTEN, &
+                                                           RQCCUTEN, &
+                                                           RQRCUTEN, &
+                                                           RQICUTEN, &
+                                                           RQSCUTEN
+
+   REAL,  DIMENSION( ims:ime, kms:kme, jms:jme )                   , &
+          INTENT(INOUT)   ::                                RUBLTEN, &
+                                                            RVBLTEN, &
+                                                           RTHBLTEN, &
+                                                           RQVBLTEN, &
+                                                           RQCBLTEN, &
+                                                           RQIBLTEN
+
+   REAL,  DIMENSION( ims:ime, kms:kme, jms:jme )                   , &
+          INTENT(INOUT)   ::                                RTHFTEN, &
+                                                            RQVFTEN
+
+   REAL,  DIMENSION( ims:ime, kms:kme, jms:jme )                   , &
+          INTENT(INOUT)   ::                                RUNDGDTEN, &
+                                                            RVNDGDTEN, &
+                                                           RTHNDGDTEN, &
+                                                           RQVNDGDTEN, &
+                                                           RMUNDGDTEN
+
+   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
+
+!-----------------------------------------------------------------------
+
+!<DESCRIPTION>
+!
+!  phys_prep calculates a number of diagnostic quantities needed by
+!  the physics routines.  It also decouples the physics tendencies from
+!  the column dry-air mass (the physics routines expect to see/update the
+!  uncoupled tendencies).
+!
+!</DESCRIPTION>
+
+!  set up loop bounds for this grid's boundary conditions
+
+    i_start = its
+    i_end   = min( ite,ide-1 )
+    j_start = jts
+    j_end   = min( jte,jde-1 )
+
+    k_start = kts
+    k_end = min( kte, kde-1 )
+
+!  compute thermodynamics and velocities at pressure points
+
+    do j = j_start,j_end
+    do k = k_start, k_end
+    do i = i_start, i_end
+
+      th_phy(i,k,j) = t(i,k,j) + t0
+      p_phy(i,k,j) = p(i,k,j) + pb(i,k,j)
+      pi_phy(i,k,j) = (p_phy(i,k,j)/p1000mb)**rcp
+      t_phy(i,k,j) = th_phy(i,k,j)*pi_phy(i,k,j)
+      rho(i,k,j) = 1./alt(i,k,j)*(1.+moist(i,k,j,P_QV))
+      mu_3d(i,k,j) = mu(i,j)
+      u_phy(i,k,j) = 0.5*(u(i,k,j)+u(i+1,k,j))
+      v_phy(i,k,j) = 0.5*(v(i,k,j)+v(i,k,j+1))
+
+    enddo
+    enddo
+    enddo
+
+!  compute z at w points
+
+    do j = j_start,j_end
+    do k = k_start, kte
+    do i = i_start, i_end
+      z_at_w(i,k,j) = (phb(i,k,j)+ph(i,k,j))/g
+    enddo
+    enddo
+    enddo
+
+    do j = j_start,j_end
+    do k = k_start, kte-1
+    do i = i_start, i_end
+      dz8w(i,k,j) = z_at_w(i,k+1,j)-z_at_w(i,k,j)
+    enddo
+    enddo
+    enddo
+
+    do j = j_start,j_end
+    do i = i_start, i_end
+      dz8w(i,kte,j) = 0.
+    enddo
+    enddo
+
+!  compute z at p points (average of z at w points)
+
+    do j = j_start,j_end
+    do k = k_start, k_end
+    do i = i_start, i_end
+      z(i,k,j) = 0.5*(z_at_w(i,k,j) + z_at_w(i,k+1,j) )
+!!!! MARS MARS ajout aymeric (ainsi que les arguments de cette routine)
+      w_phy(i,k,j) = 0.5*(w(i,k,j) + w(i,k+1,j) )
+    enddo
+    enddo
+    enddo
+
+!  interp t and p at w points
+
+    do j = j_start,j_end
+    do k = 2, k_end
+    do i = i_start, i_end
+      p8w(i,k,j) = fzm(k)*p_phy(i,k,j)+fzp(k)*p_phy(i,k-1,j)
+      t8w(i,k,j) = fzm(k)*t_phy(i,k,j)+fzp(k)*t_phy(i,k-1,j)
+    enddo
+    enddo
+    enddo
+
+!  extrapolate p and t to surface and top.
+!  we'll use an extrapolation in z for now
+
+    do j = j_start,j_end
+    do i = i_start, i_end
+
+! bottom
+
+      z0 = z_at_w(i,1,j)
+      z1 = z(i,1,j)
+      z2 = z(i,2,j)
+      w1 = (z0 - z2)/(z1 - z2)
+      w2 = 1. - w1
+      p8w(i,1,j) = w1*p_phy(i,1,j)+w2*p_phy(i,2,j)
+      t8w(i,1,j) = w1*t_phy(i,1,j)+w2*t_phy(i,2,j)
+
+! top
+
+      z0 = z_at_w(i,kte,j)
+      z1 = z(i,k_end,j)
+      z2 = z(i,k_end-1,j)
+      w1 = (z0 - z2)/(z1 - z2)
+      w2 = 1. - w1
+
+!      p8w(i,kde,j) = w1*p_phy(i,kde-1,j)+w2*p_phy(i,kde-2,j)
+!!!  bug fix      extrapolate ln(p) so p is positive definite
+      p8w(i,kde,j) = exp(w1*log(p_phy(i,kde-1,j))+w2*log(p_phy(i,kde-2,j)))
+      t8w(i,kde,j) = w1*t_phy(i,kde-1,j)+w2*t_phy(i,kde-2,j)
+
+    enddo
+    enddo
+
+! decouple all physics tendencies
+
+   IF (config_flags%ra_lw_physics .gt. 0 .or. config_flags%ra_sw_physics .gt. 0) THEN
+
+      DO J=j_start,j_end
+      DO K=k_start,k_end
+      DO I=i_start,i_end
+         RTHRATEN(I,K,J)=RTHRATEN(I,K,J)/mu(I,J)
+      ENDDO
+      ENDDO
+      ENDDO
+
+   ENDIF
+
+   IF (config_flags%cu_physics .gt. 0) THEN
+
+      DO J=j_start,j_end
+      DO I=i_start,i_end
+      DO K=k_start,k_end
+         RTHCUTEN(I,K,J)=RTHCUTEN(I,K,J)/mu(I,J)
+      ENDDO
+      ENDDO
+      ENDDO
+
+      IF (P_QV .ge. PARAM_FIRST_SCALAR)THEN
+         DO J=j_start,j_end
+         DO I=i_start,i_end
+         DO K=k_start,k_end
+            RQVCUTEN(I,K,J)=RQVCUTEN(I,K,J)/mu(I,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF (P_QC .ge. PARAM_FIRST_SCALAR)THEN
+         DO J=j_start,j_end
+         DO I=i_start,i_end
+         DO K=k_start,k_end
+            RQCCUTEN(I,K,J)=RQCCUTEN(I,K,J)/mu(I,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF (P_QR .ge. PARAM_FIRST_SCALAR)THEN
+         DO J=j_start,j_end
+         DO I=i_start,i_end
+         DO K=k_start,k_end
+            RQRCUTEN(I,K,J)=RQRCUTEN(I,K,J)/mu(I,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF (P_QI .ge. PARAM_FIRST_SCALAR)THEN
+         DO J=j_start,j_end
+         DO I=i_start,i_end
+         DO K=k_start,k_end
+            RQICUTEN(I,K,J)=RQICUTEN(I,K,J)/mu(I,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF(P_QS .ge. PARAM_FIRST_SCALAR)THEN
+         DO J=j_start,j_end
+         DO I=i_start,i_end
+         DO K=k_start,k_end
+            RQSCUTEN(I,K,J)=RQSCUTEN(I,K,J)/mu(I,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+   ENDIF
+
+!!MARS MARS
+!   IF (config_flags%bl_pbl_physics .gt. 0) THEN
+   IF ( (config_flags%bl_pbl_physics .gt. 0) &
+        .OR. (config_flags%modif_wrf) ) THEN
+!****MARS
+      DO J=j_start,j_end
+      DO K=k_start,k_end
+      DO I=i_start,i_end
+         RUBLTEN(I,K,J) =RUBLTEN(I,K,J)/mu(I,J)
+         RVBLTEN(I,K,J) =RVBLTEN(I,K,J)/mu(I,J)
+         RTHBLTEN(I,K,J)=RTHBLTEN(I,K,J)/mu(I,J)
+      ENDDO
+      ENDDO
+      ENDDO
+
+      IF (P_QV .ge. PARAM_FIRST_SCALAR) THEN
+         DO J=j_start,j_end
+         DO K=k_start,k_end
+         DO I=i_start,i_end
+            RQVBLTEN(I,K,J)=RQVBLTEN(I,K,J)/mu(I,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF (P_QC .ge. PARAM_FIRST_SCALAR) THEN
+         DO J=j_start,j_end
+         DO K=k_start,k_end
+         DO I=i_start,i_end
+           RQCBLTEN(I,K,J)=RQCBLTEN(I,K,J)/mu(I,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF (P_QI .ge. PARAM_FIRST_SCALAR) THEN
+         DO J=j_start,j_end
+         DO K=k_start,k_end
+         DO I=i_start,i_end
+            RQIBLTEN(I,K,J)=RQIBLTEN(I,K,J)/mu(I,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+    ENDIF
+
+!  decouple advective forcing required by Grell-Devenyi scheme
+
+   if(( config_flags%cu_physics == GDSCHEME ) .OR.    &
+      ( config_flags%cu_physics == G3SCHEME )) then
+
+      DO J=j_start,j_end
+      DO I=i_start,i_end
+         DO K=k_start,k_end
+            RTHFTEN(I,K,J)=RTHFTEN(I,K,J)/mu(I,J)
+         ENDDO
+      ENDDO
+      ENDDO
+
+      IF (P_QV .ge. PARAM_FIRST_SCALAR)THEN
+         DO J=j_start,j_end
+         DO I=i_start,i_end
+            DO K=k_start,k_end
+               RQVFTEN(I,K,J)=RQVFTEN(I,K,J)/mu(I,J)
+            ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+   END IF
+
+! fdda
+! note fdda u and v tendencies are staggered, also only interior points have muu/muv,
+!   so only decouple those
+
+   IF (config_flags%grid_fdda .gt. 0) THEN
+
+      i_startu=MAX(its,ids+1)
+      j_startv=MAX(jts,jds+1)
+
+      DO J=j_start,j_end
+      DO K=k_start,k_end
+      DO I=i_startu,i_end
+         RUNDGDTEN(I,K,J) =RUNDGDTEN(I,K,J)/muu(I,J)
+      ENDDO
+      ENDDO
+      ENDDO
+      DO J=j_startv,j_end
+      DO K=k_start,k_end
+      DO I=i_start,i_end
+         RVNDGDTEN(I,K,J) =RVNDGDTEN(I,K,J)/muv(I,J)
+      ENDDO
+      ENDDO
+      ENDDO
+      DO J=j_start,j_end
+      DO K=k_start,k_end
+      DO I=i_start,i_end
+         RTHNDGDTEN(I,K,J)=RTHNDGDTEN(I,K,J)/mu(I,J)
+!        RMUNDGDTEN(I,J) - no coupling
+      ENDDO
+      ENDDO
+      ENDDO
+      IF (P_QV .ge. PARAM_FIRST_SCALAR) THEN
+         DO J=j_start,j_end
+         DO K=k_start,k_end
+         DO I=i_start,i_end
+            RQVNDGDTEN(I,K,J)=RQVNDGDTEN(I,K,J)/mu(I,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+    ENDIF
+
+END SUBROUTINE phy_prep
+
+!------------------------------------------------------------
+
+   SUBROUTINE moist_physics_prep_em( t_new, t_old, t0, rho, al, alb, &
+                                     p, p8w, p0, pb, ph, phb,        &
+                                     th_phy, pii, pf,                &
+                                     z, z_at_w, dz8w,                &
+                                     dt,h_diabatic,                  &
+                                     config_flags,fzm, fzp,          &
+                                     ids,ide, jds,jde, kds,kde,      &
+                                     ims,ime, jms,jme, kms,kme,      &
+                                     its,ite, jts,jte, kts,kte      )
+
+   IMPLICIT NONE
+
+! Here we construct full fields
+! needed by the microphysics
+
+   TYPE(grid_config_rec_type),    INTENT(IN   )    :: config_flags
+
+   INTEGER,      INTENT(IN   )    :: ids,ide, jds,jde, kds,kde
+   INTEGER,      INTENT(IN   )    :: ims,ime, jms,jme, kms,kme
+   INTEGER,      INTENT(IN   )    :: its,ite, jts,jte, kts,kte
+
+   REAL, INTENT(IN   )  ::  dt
+
+   REAL, DIMENSION( ims:ime , kms:kme, jms:jme ),        &
+         INTENT(IN   ) ::                           al,  &
+                                                    alb, &
+                                                    p,   &
+                                                    pb,  &
+                                                    ph,  &
+                                                    phb
+
+
+   REAL , DIMENSION( kms:kme ) ,           INTENT(IN   ) ::   fzm, &
+                                                              fzp
+
+   REAL, DIMENSION( ims:ime , kms:kme, jms:jme ),       &
+         INTENT(  OUT) ::                         rho,  &
+                                               th_phy,  &
+                                                  pii,  &
+                                                  pf,   &
+                                                    z,  &
+                                               z_at_w,  &
+                                                 dz8w,  &
+                                                  p8w
+
+   REAL, DIMENSION( ims:ime , kms:kme, jms:jme ),       &
+         INTENT(INOUT) ::                         h_diabatic
+
+   REAL, DIMENSION( ims:ime , kms:kme, jms:jme ),        &
+         INTENT(INOUT) ::                         t_new, &
+                                                  t_old
+
+   REAL, INTENT(IN   ) :: t0, p0
+   REAL                :: z0,z1,z2,w1,w2
+
+   INTEGER :: i_start, i_end, j_start, j_end, k_start, k_end
+   INTEGER :: i, j, k
+
+!--------------------------------------------------------------------
+
+!<DESCRIPTION>
+!
+!  moist_phys_prep_em calculates a number of diagnostic quantities needed by
+!  the microphysics routines.
+!
+!</DESCRIPTION>
+
+!  set up loop bounds for this grid's boundary conditions
+
+    i_start = its    
+    i_end   = min( ite,ide-1 )
+    j_start = jts    
+    j_end   = min( jte,jde-1 )
+
+    k_start = kts
+    k_end = min( kte, kde-1 )
+
+     DO j = j_start, j_end
+     DO k = k_start, kte
+     DO i = i_start, i_end
+       z_at_w(i,k,j) = (ph(i,k,j)+phb(i,k,j))/g
+     ENDDO
+     ENDDO
+     ENDDO
+
+    do j = j_start,j_end
+    do k = k_start, kte-1
+    do i = i_start, i_end
+      dz8w(i,k,j) = z_at_w(i,k+1,j)-z_at_w(i,k,j)
+    enddo
+    enddo
+    enddo
+
+    do j = j_start,j_end
+    do i = i_start, i_end
+      dz8w(i,kte,j) = 0.
+    enddo
+    enddo
+
+
+           !  compute full pii, rho, and z at the new time-level
+           !  (needed for physics).
+           !  convert perturbation theta to full theta (th_phy)
+           !  use h_diabatic to temporarily save pre-microphysics full theta
+
+     DO j = j_start, j_end
+     DO k = k_start, k_end
+     DO i = i_start, i_end
+
+#ifdef REVERT
+       t_new(i,k,j) = t_new(i,k,j)-h_diabatic(i,k,j)*dt
+#endif
+       th_phy(i,k,j) = t_new(i,k,j) + t0
+       h_diabatic(i,k,j) = th_phy(i,k,j)
+       rho(i,k,j)  = 1./(al(i,k,j)+alb(i,k,j))
+       pii(i,k,j) = ((p(i,k,j)+pb(i,k,j))/p0)**rcp
+       z(i,k,j) = 0.5*(z_at_w(i,k,j) +z_at_w(i,k+1,j) )
+       pf(i,k,j) = p(i,k,j)+pb(i,k,j)
+
+     ENDDO
+     ENDDO
+     ENDDO
+
+!  interp t and p at w points
+
+    do j = j_start,j_end
+    do k = 2, k_end
+    do i = i_start, i_end
+      p8w(i,k,j) = fzm(k)*pf(i,k,j)+fzp(k)*pf(i,k-1,j)
+    enddo
+    enddo
+    enddo
+
+!  extrapolate p and t to surface and top.
+!  we'll use an extrapolation in z for now
+
+    do j = j_start,j_end
+    do i = i_start, i_end
+
+! bottom
+
+      z0 = z_at_w(i,1,j)
+      z1 = z(i,1,j)
+      z2 = z(i,2,j)
+      w1 = (z0 - z2)/(z1 - z2)
+      w2 = 1. - w1
+      p8w(i,1,j) = w1*pf(i,1,j)+w2*pf(i,2,j)
+
+! top
+
+      z0 = z_at_w(i,kte,j)
+      z1 = z(i,k_end,j)
+      z2 = z(i,k_end-1,j)
+      w1 = (z0 - z2)/(z1 - z2)
+      w2 = 1. - w1
+!      p8w(i,kde,j) = w1*pf(i,kde-1,j)+w2*pf(i,kde-2,j)
+      p8w(i,kde,j) = exp(w1*log(pf(i,kde-1,j))+w2*log(pf(i,kde-2,j)))
+
+    enddo
+    enddo
+
+   END SUBROUTINE moist_physics_prep_em
+
+!------------------------------------------------------------------------------
+
+   SUBROUTINE moist_physics_finish_em( t_new, t_old, t0, mut,     &
+                                       th_phy, h_diabatic, dt,    &
+                                       config_flags,              &
+                                       ids,ide, jds,jde, kds,kde, &
+                                       ims,ime, jms,jme, kms,kme, &
+                                       its,ite, jts,jte, kts,kte )
+
+   IMPLICIT NONE
+
+! Here we construct full fields
+! needed by the microphysics
+
+   TYPE(grid_config_rec_type),    INTENT(IN   )    :: config_flags
+
+   INTEGER,      INTENT(IN   )    :: ids,ide, jds,jde, kds,kde
+   INTEGER,      INTENT(IN   )    :: ims,ime, jms,jme, kms,kme
+   INTEGER,      INTENT(IN   )    :: its,ite, jts,jte, kts,kte
+
+   REAL, DIMENSION( ims:ime , kms:kme, jms:jme ),        &
+         INTENT(INOUT) ::                         t_new, &
+                                                  t_old, &
+                                                 th_phy, &
+                                                  h_diabatic
+
+   REAL, DIMENSION( ims:ime , jms:jme ),  INTENT(INOUT) ::  mut
+
+
+   REAL, INTENT(IN   ) :: t0, dt
+
+   INTEGER :: i_start, i_end, j_start, j_end, k_start, k_end
+   INTEGER :: i, j, k
+
+!--------------------------------------------------------------------
+
+!<DESCRIPTION>
+!
+!  moist_phys_finish_em resets theta to its perturbation value and
+!  computes and stores the microphysics diabatic heating term.
+!
+!</DESCRIPTION>
+
+!  set up loop bounds for this grid's boundary conditions
+
+
+    i_start = its    
+    i_end   = min( ite,ide-1 )
+    j_start = jts    
+    j_end   = min( jte,jde-1 )
+
+    k_start = kts
+    k_end = min( kte, kde-1 )
+
+!  add microphysics theta diff to perturbation theta, set h_diabatic
+
+     IF ( config_flags%no_mp_heating .eq. 0 ) THEN
+     DO j = j_start, j_end
+     DO k = k_start, k_end
+     DO i = i_start, i_end
+         t_new(i,k,j) = t_new(i,k,j) + (th_phy(i,k,j)-h_diabatic(i,k,j))
+         h_diabatic(i,k,j) = (th_phy(i,k,j)-h_diabatic(i,k,j))/dt
+     ENDDO
+     ENDDO
+     ENDDO
+
+     ELSE
+
+     DO j = j_start, j_end
+     DO k = k_start, k_end
+     DO i = i_start, i_end
+!        t_new(i,k,j) = t_new(i,k,j)
+         h_diabatic(i,k,j) = 0.
+     ENDDO
+     ENDDO
+     ENDDO
+     ENDIF
+
+   END SUBROUTINE moist_physics_finish_em
+
+!----------------------------------------------------------------
+
+
+   SUBROUTINE init_module_big_step
+   END SUBROUTINE init_module_big_step
+
+SUBROUTINE set_tend ( field, field_adv_tend, msf,       &
+                      ids, ide, jds, jde, kds, kde,     &
+                      ims, ime, jms, jme, kms, kme,     &
+                      its, ite, jts, jte, kts, kte       )
+
+   IMPLICIT NONE
+
+   ! Input data
+
+   INTEGER ,  INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                               ims, ime, jms, jme, kms, kme, &
+                               its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: field
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN)  :: field_adv_tend
+
+   REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN)  :: msf
+
+   ! Local data
+
+   INTEGER :: i, j, k, itf, jtf, ktf
+
+!<DESCRIPTION>
+!
+!  set_tend copies the advective tendency array into the tendency array.
+!
+!</DESCRIPTION>
+
+      jtf = MIN(jte,jde-1)
+      ktf = MIN(kte,kde-1)
+      itf = MIN(ite,ide-1)
+      DO j = jts, jtf
+      DO k = kts, ktf
+      DO i = its, itf
+         field(i,k,j) = field_adv_tend(i,k,j)*msf(i,j)
+      ENDDO
+      ENDDO
+      ENDDO
+
+END SUBROUTINE set_tend
+
+!------------------------------------------------------------------------------
+
+    SUBROUTINE rk_rayleigh_damp( ru_tendf, rv_tendf,              &
+                                 rw_tendf, t_tendf,               &
+                                 u, v, w, t, t_init,              &
+                                 mut, muu, muv, ph, phb,          &
+                                 u_base, v_base, t_base, z_base,  &
+                                 dampcoef, zdamp,                 &
+                                 ids, ide, jds, jde, kds, kde,    &
+                                 ims, ime, jms, jme, kms, kme,    &
+                                 its, ite, jts, jte, kts, kte   )
+
+! History:     Apr 2005  Modifications by George Bryan, NCAR:
+!                  - Generalized the code in a way that allows for
+!                    simulations with steep terrain.
+!
+!              Jul 2004  Modifications by George Bryan, NCAR:
+!                  - Modified the code to use u_base, v_base, and t_base
+!                    arrays for the background state.  Removed the hard-wired
+!                    base-state values.
+!                  - Modified the code to use dampcoef, zdamp, and damp_opt,
+!                    i.e., the upper-level damper variables in namelist.input.
+!                    Removed the hard-wired variables in the older version.
+!                    This damper is used when damp_opt = 2.
+!                  - Modified the code to account for the movement of the
+!                    model surfaces with time.  The code now obtains a base-
+!                    state value by interpolation using the "_base" arrays.
+
+!              Nov 2003  Bug fix by Jason Knievel, NCAR
+
+!              Aug 2003  Meridional dimension, some comments, and
+!                        changes in layout of the code added by
+!                        Jason Knievel, NCAR
+
+!              Jul 2003  Original code by Bill Skamarock, NCAR
+
+! Purpose:     This routine applies Rayleigh damping to a layer at top
+!              of the model domain.
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( INOUT )  &
+    :: ru_tendf, rv_tendf, rw_tendf, t_tendf
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: u, v, w, t, t_init, ph, phb
+
+    REAL, DIMENSION( ims:ime, jms:jme ),  INTENT( IN )  &
+    :: mut, muu, muv
+
+    REAL, DIMENSION( kms:kme ) ,  INTENT(IN   )  &
+    :: u_base, v_base, t_base, z_base
+
+    REAL, INTENT(IN   )   &
+    :: dampcoef, zdamp
+
+! Local variables.
+
+    INTEGER  &
+    :: i_start, i_end, j_start, j_end, k_start, k_end, i, j, k, ktf, k1, k2
+
+    REAL  &
+    :: pii, dcoef, z, ztop
+
+    REAL :: wkp1, wk, wkm1
+
+    REAL, DIMENSION( kms:kme ) :: z00, u00, v00, t00
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    pii = 2.0 * asin(1.0)
+
+    ktf = MIN( kte,   kde-1 )
+
+!-----------------------------------------------------------------------
+! Adjust u to base state.
+
+    DO j = jts, MIN( jte, jde-1 )
+    DO i = its, MIN( ite, ide   )
+
+      ! Get height at top of model
+      ztop = 0.5*( phb(i  ,kde,j)+phb(i-1,kde,j)   &
+                  +ph(i  ,kde,j)+ph(i-1,kde,j) )/g
+
+      ! Find bottom of damping layer
+      k1 = ktf
+      z = ztop
+      DO WHILE( z >= (ztop-zdamp) )
+        z = 0.25*( phb(i  ,k1,j)+phb(i  ,k1+1,j)  &
+                  +phb(i-1,k1,j)+phb(i-1,k1+1,j)  &
+                  +ph(i  ,k1,j)+ph(i  ,k1+1,j)    &
+                  +ph(i-1,k1,j)+ph(i-1,k1+1,j))/g
+        z00(k1) = z
+        k1 = k1 - 1
+      ENDDO
+      k1 = k1 + 2
+
+      ! Get reference state at model levels
+      DO k = k1, ktf
+        k2 = ktf
+        DO WHILE( z_base(k2) .gt. z00(k) )
+          k2 = k2 - 1
+        ENDDO
+        if(k2+1.gt.ktf)then
+          u00(k) = u_base(k2) + ( u_base(k2) - u_base(k2-1) )   &
+                              * (     z00(k) - z_base(k2)   )   &
+                              / ( z_base(k2) - z_base(k2-1) )
+        else
+          u00(k) = u_base(k2) + ( u_base(k2+1) - u_base(k2) )   &
+                              * (       z00(k) - z_base(k2) )   &
+                              / ( z_base(k2+1) - z_base(k2) )
+        endif
+      ENDDO
+
+      ! Apply the Rayleigh damper
+      DO k = k1, ktf
+        dcoef = 1.0 - MIN( 1.0, ( ztop - z00(k) ) / zdamp )
+        dcoef = (SIN( 0.5 * pii * dcoef ) )**2
+        ru_tendf(i,k,j) = ru_tendf(i,k,j) -                    &
+                          muu(i,j) * ( dcoef * dampcoef ) *    &
+                          ( u(i,k,j) - u00(k) )
+      END DO
+
+    END DO
+    END DO
+
+! End adjustment of u.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Adjust v to base state.
+
+    DO j = jts, MIN( jte, jde   )
+    DO i = its, MIN( ite, ide-1 )
+
+      ! Get height at top of model
+      ztop = 0.5*( phb(i,kde,j  )+phb(i,kde,j-1)   &
+                  +ph(i,kde,j  )+ph(i,kde,j-1) )/g
+
+      ! Find bottom of damping layer
+      k1 = ktf
+      z = ztop
+      DO WHILE( z >= (ztop-zdamp) )
+        z = 0.25*( phb(i,k1,j  )+phb(i,k1+1,j  )  &
+                  +phb(i,k1,j-1)+phb(i,k1+1,j-1)  &
+                  +ph(i,k1,j  )+ph(i,k1+1,j  )    &
+                  +ph(i,k1,j-1)+ph(i,k1+1,j-1))/g
+        z00(k1) = z
+        k1 = k1 - 1
+      ENDDO
+      k1 = k1 + 2
+
+      ! Get reference state at model levels
+      DO k = k1, ktf
+        k2 = ktf
+        DO WHILE( z_base(k2) .gt. z00(k) )
+          k2 = k2 - 1
+        ENDDO
+        if(k2+1.gt.ktf)then
+          v00(k) = v_base(k2) + ( v_base(k2) - v_base(k2-1) )   &
+                              * (     z00(k) - z_base(k2)   )   &
+                              / ( z_base(k2) - z_base(k2-1) )
+        else
+          v00(k) = v_base(k2) + ( v_base(k2+1) - v_base(k2) )   &
+                              * (       z00(k) - z_base(k2) )   &
+                              / ( z_base(k2+1) - z_base(k2) )
+        endif
+      ENDDO
+
+      ! Apply the Rayleigh damper
+      DO k = k1, ktf
+        dcoef = 1.0 - MIN( 1.0, ( ztop - z00(k) ) / zdamp )
+        dcoef = (SIN( 0.5 * pii * dcoef ) )**2
+        rv_tendf(i,k,j) = rv_tendf(i,k,j) -                    &
+                          muv(i,j) * ( dcoef * dampcoef ) *    &
+                          ( v(i,k,j) - v00(k) )
+      END DO
+
+    END DO
+    END DO
+
+! End adjustment of v.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Adjust w to base state.
+
+    DO j = jts, MIN( jte,   jde-1 )
+    DO i = its, MIN( ite,   ide-1 )
+      ztop = ( phb(i,kde,j) + ph(i,kde,j) ) / g
+      DO k = kts, MIN( kte,   kde   )
+        z = ( phb(i,k,j) + ph(i,k,j) ) / g
+        IF ( z >= (ztop-zdamp) ) THEN
+          dcoef = 1.0 - MIN( 1.0, ( ztop - z ) / zdamp )
+          dcoef = ( SIN( 0.5 * pii * dcoef ) )**2
+          rw_tendf(i,k,j) = rw_tendf(i,k,j) -  &
+                            mut(i,j) * ( dcoef * dampcoef ) * w(i,k,j)
+        END IF
+      END DO
+    END DO
+    END DO
+
+! End adjustment of w.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Adjust potential temperature to base state.
+
+    DO j = jts, MIN( jte,   jde-1 )
+    DO i = its, MIN( ite,   ide-1 )
+
+      ! Get height at top of model
+      ztop = ( phb(i,kde,j) + ph(i,kde,j) ) / g
+
+      ! Find bottom of damping layer
+      k1 = ktf
+      z = ztop
+      DO WHILE( z >= (ztop-zdamp) )
+        z = 0.5 * ( phb(i,k1,j) + phb(i,k1+1,j) +  &
+                     ph(i,k1,j) +  ph(i,k1+1,j) ) / g
+        z00(k1) = z
+        k1 = k1 - 1
+      ENDDO
+      k1 = k1 + 2
+
+      ! Get reference state at model levels
+      DO k = k1, ktf
+        k2 = ktf
+        DO WHILE( z_base(k2) .gt. z00(k) )
+          k2 = k2 - 1
+        ENDDO
+        if(k2+1.gt.ktf)then
+          t00(k) = t_base(k2) + ( t_base(k2) - t_base(k2-1) )   &
+                              * (     z00(k) - z_base(k2)   )   &
+                              / ( z_base(k2) - z_base(k2-1) )
+        else
+          t00(k) = t_base(k2) + ( t_base(k2+1) - t_base(k2) )   &
+                              * (       z00(k) - z_base(k2) )   &
+                              / ( z_base(k2+1) - z_base(k2) )
+        endif
+      ENDDO
+
+      ! Apply the Rayleigh damper
+      DO k = k1, ktf
+        dcoef = 1.0 - MIN( 1.0, ( ztop - z00(k) ) / zdamp )
+        dcoef = (SIN( 0.5 * pii * dcoef ) )**2
+        t_tendf(i,k,j) = t_tendf(i,k,j) -                      &
+                         mut(i,j) * ( dcoef * dampcoef )  *    &
+                         ( t(i,k,j) - t00(k) )
+      END DO
+
+    END DO
+    END DO
+
+! End adjustment of potential temperature.
+!-----------------------------------------------------------------------
+
+    END SUBROUTINE rk_rayleigh_damp
+
+!==============================================================================
+!==============================================================================
+                                                                                
+      SUBROUTINE sixth_order_diffusion( name, field, tendency, mu, dt,  &
+                                        config_flags,                   &
+                                        diff_6th_opt, diff_6th_factor,  &
+                                        ids, ide, jds, jde, kds, kde,   &
+                                        ims, ime, jms, jme, kms, kme,   &
+                                        its, ite, jts, jte, kts, kte )
+                                                                                
+! History:       14 Nov 2006   Name of variable changed by Jason Knievel
+!                07 Jun 2006   Revised and generalized by Jason Knievel  
+!                25 Apr 2005   Original code by Jason Knievel, NCAR
+                                                                                
+! Purpose:       Apply 6th-order, monotonic (flux-limited), numerical
+!                diffusion to 3-d velocity and to scalars.
+                                                                                
+! References:    Ming Xue (MWR Aug 2000)
+!                Durran ("Numerical Methods for Wave Equations..." 1999)
+!                George Bryan (personal communication)
+ 
+!------------------------------------------------------------------------------
+! Begin: Declarations.
+
+    IMPLICIT NONE
+
+    INTEGER, INTENT(IN)  &
+    :: ids, ide, jds, jde, kds, kde,   &
+       ims, ime, jms, jme, kms, kme,   &
+       its, ite, jts, jte, kts, kte
+ 
+    TYPE(grid_config_rec_type), INTENT(IN)  &
+    :: config_flags
+ 
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT)  &
+    :: tendency
+ 
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN)  &
+    :: field
+ 
+    REAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN)  &
+    :: mu
+ 
+    REAL, INTENT(IN)  &
+    :: dt
+
+    REAL, INTENT(IN)  &
+    :: diff_6th_factor
+
+    INTEGER, INTENT(IN)  &
+    :: diff_6th_opt
+
+    CHARACTER(LEN=1) , INTENT(IN)  &
+    :: name
+
+    INTEGER  &
+    :: i, j, k,         &
+       i_start, i_end,  &
+       j_start, j_end,  &
+       k_start, k_end,  &
+       ktf
+ 
+    REAL  &
+    :: dflux_x_p0, dflux_y_p0,  &
+       dflux_x_p1, dflux_y_p1,  &
+       tendency_x, tendency_y,  &
+       mu_avg_p0, mu_avg_p1,    &
+       diff_6th_coef
+
+    LOGICAL  &
+    :: specified
+ 
+! End: Declarations.
+!------------------------------------------------------------------------------
+
+!------------------------------------------------------------------------------
+! Begin: Translate the diffusion factor into a diffusion coefficient.  See
+! Durran's text, section 2.4.3, then adjust for sixth-order diffusion (not
+! fourth) and for diffusion in two dimensions (not one).  For reference, a
+! factor of 1.0 would mean complete diffusion of a 2dx wave in one time step,
+! although application of the flux limiter reduces somewhat the effects of
+! diffusion for a given coefficient.
+
+    diff_6th_coef = diff_6th_factor * 0.015625 / ( 2.0 * dt )  
+
+! End: Translate diffusion factor.
+!------------------------------------------------------------------------------
+
+!------------------------------------------------------------------------------
+! Begin: Assign limits of spatial loops depending on variable to be diffused.
+! The halo regions are already filled with values by the time this subroutine
+! is called, which allows the stencil to extend beyond the domains' edges.
+
+    ktf = MIN( kte, kde-1 )
+
+    IF ( name .EQ. 'u' ) THEN
+
+      i_start = its
+      i_end   = ite
+      j_start = jts
+      j_end   = MIN(jde-1,jte)
+      k_start = kts
+      k_end   = ktf
+
+    ELSE IF ( name .EQ. 'v' ) THEN
+ 
+      i_start = its
+      i_end   = MIN(ide-1,ite)
+      j_start = jts
+      j_end   = jte
+      k_start = kts
+      k_end   = ktf
+ 
+    ELSE IF ( name .EQ. 'w' ) THEN
+
+      i_start = its
+      i_end   = MIN(ide-1,ite)
+      j_start = jts
+      j_end   = MIN(jde-1,jte)
+      k_start = kts+1
+      k_end   = ktf
+
+    ELSE
+
+      i_start = its
+      i_end   = MIN(ide-1,ite)
+      j_start = jts
+      j_end   = MIN(jde-1,jte)
+      k_start = kts
+      k_end   = ktf
+ 
+    ENDIF
+
+! End: Assignment of limits of spatial loops.
+!------------------------------------------------------------------------------
+
+!------------------------------------------------------------------------------
+! Begin: Loop across spatial dimensions.
+
+    DO j = j_start, j_end
+    DO k = k_start, k_end
+    DO i = i_start, i_end
+
+!------------------------------------------------------------------------------
+! Begin: Diffusion in x (i index).
+ 
+! Calculate the diffusive flux in x direction (from Xue's eq. 3).
+ 
+      dflux_x_p0 = (  10.0 * ( field(i,  k,j) - field(i-1,k,j) )    &
+                     - 5.0 * ( field(i+1,k,j) - field(i-2,k,j) )    &
+                     +       ( field(i+2,k,j) - field(i-3,k,j) ) )
+ 
+      dflux_x_p1 = (  10.0 * ( field(i+1,k,j) - field(i  ,k,j) )    &
+                     - 5.0 * ( field(i+2,k,j) - field(i-1,k,j) )    &
+                     +       ( field(i+3,k,j) - field(i-2,k,j) ) )
+ 
+! If requested in the namelist (diff_6th_opt=2), prohibit up-gradient diffusion
+! (variation on Xue's eq. 10).
+
+      IF ( diff_6th_opt .EQ. 2 ) THEN
+ 
+        IF ( dflux_x_p0 * ( field(i  ,k,j)-field(i-1,k,j) ) .LE. 0.0 ) THEN
+          dflux_x_p0 = 0.0
+        END IF
+ 
+        IF ( dflux_x_p1 * ( field(i+1,k,j)-field(i  ,k,j) ) .LE. 0.0 ) THEN
+          dflux_x_p1 = 0.0
+        END IF
+
+      END IF
+
+! Apply 6th-order diffusion in x direction.
+ 
+      IF      ( name .EQ. 'u' ) THEN
+        mu_avg_p0 = mu(i-1,j)
+        mu_avg_p1 = mu(i  ,j)
+      ELSE IF ( name .EQ. 'v' ) THEN
+        mu_avg_p0 = 0.25 * (       &
+                    mu(i-1,j-1) +  &
+                    mu(i  ,j-1) +  &
+                    mu(i-1,j  ) +  &
+                    mu(i  ,j  ) )
+        mu_avg_p1 = 0.25 * (       &
+                    mu(i  ,j-1) +  &
+                    mu(i+1,j-1) +  &
+                    mu(i  ,j  ) +  &
+                    mu(i+1,j  ) )
+      ELSE
+        mu_avg_p0 = 0.5 * (        &
+                    mu(i-1,j) +    &
+                    mu(i  ,j) )
+        mu_avg_p1 = 0.5 * (        &
+                    mu(i  ,j) +    &
+                    mu(i+1,j) )
+      END IF
+ 
+      tendency_x = diff_6th_coef *  &
+                 ( ( mu_avg_p1 * dflux_x_p1 ) - ( mu_avg_p0 * dflux_x_p0 ) )
+ 
+! End: Diffusion in x.
+!------------------------------------------------------------------------------
+ 
+!------------------------------------------------------------------------------
+! Begin: Diffusion in y (j index).
+ 
+! Calculate the diffusive flux in y direction (from Xue's eq. 3).
+ 
+      dflux_y_p0 = (  10.0 * ( field(i,k,j  ) - field(i,k,j-1) )    &
+                     - 5.0 * ( field(i,k,j+1) - field(i,k,j-2) )    &
+                     +       ( field(i,k,j+2) - field(i,k,j-3) ) )
+ 
+      dflux_y_p1 = (  10.0 * ( field(i,k,j+1) - field(i,k,j  ) )    &
+                     - 5.0 * ( field(i,k,j+2) - field(i,k,j-1) )    &
+                     +       ( field(i,k,j+3) - field(i,k,j-2) ) )
+ 
+! If requested in the namelist (diff_6th_opt=2), prohibit up-gradient diffusion
+! (variation on Xue's eq. 10).
+
+      IF ( diff_6th_opt .EQ. 2 ) THEN
+ 
+        IF ( dflux_y_p0 * ( field(i,k,j  )-field(i,k,j-1) ) .LE. 0.0 ) THEN
+          dflux_y_p0 = 0.0
+        END IF
+ 
+        IF ( dflux_y_p1 * ( field(i,k,j+1)-field(i,k,j  ) ) .LE. 0.0 ) THEN
+          dflux_y_p1 = 0.0
+        END IF
+
+      END IF
+ 
+! Apply 6th-order diffusion in y direction.
+ 
+      IF      ( name .EQ. 'u' ) THEN
+        mu_avg_p0 = 0.25 * (       &
+                    mu(i-1,j-1) +  &
+                    mu(i  ,j-1) +  &
+                    mu(i-1,j  ) +  &
+                    mu(i  ,j  ) )
+        mu_avg_p1 = 0.25 * (       &
+                    mu(i-1,j  ) +  &
+                    mu(i  ,j  ) +  &
+                    mu(i-1,j+1) +  &
+                    mu(i  ,j+1) )
+      ELSE IF ( name .EQ. 'v' ) THEN
+        mu_avg_p0 = mu(i,j-1)
+        mu_avg_p1 = mu(i,j  )
+      ELSE
+        mu_avg_p0 = 0.5 * (      &
+                    mu(i,j-1) +  &
+                    mu(i,j  ) )
+        mu_avg_p1 = 0.5 * (      &
+                    mu(i,j  ) +  &
+                    mu(i,j+1) )
+      END IF
+ 
+      tendency_y = diff_6th_coef *  &
+                 ( ( mu_avg_p1 * dflux_y_p1 ) - ( mu_avg_p0 * dflux_y_p0 ) )
+ 
+! End: Diffusion in y.
+!------------------------------------------------------------------------------
+ 
+!------------------------------------------------------------------------------
+! Begin: Combine diffusion in x and y.
+     
+      tendency(i,k,j) = tendency(i,k,j) + tendency_x + tendency_y
+ 
+! End: Combine diffusion in x and y.
+!------------------------------------------------------------------------------
+
+    ENDDO
+    ENDDO
+    ENDDO
+
+! End: Loop across spatial dimensions.
+!------------------------------------------------------------------------------
+ 
+    END SUBROUTINE sixth_order_diffusion
+ 
+!==============================================================================
+!==============================================================================
+
+END MODULE module_big_step_utilities_em
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_diffusion_em.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_diffusion_em.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_diffusion_em.F	(revision 142)
@@ -0,0 +1,5525 @@
+! WRF:MODEL_LAYER:PHYSICS
+ 
+    MODULE module_diffusion_em
+
+    USE module_configure
+    USE module_bc
+    USE module_state_description
+    USE module_big_step_utilities_em
+    USE module_model_constants    
+    USE module_wrf_error
+
+    CONTAINS
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE cal_deform_and_div( config_flags, u, v, w, div,       &
+                                   defor11, defor22, defor33,        &
+                                   defor12, defor13, defor23,        &
+                                   u_base, v_base, msfux, msfuy,     &
+                                   msfvx, msfvy, msftx, msfty,       &
+                                   rdx, rdy, dn, dnw, rdz, rdzw,     &
+                                   fnm, fnp, cf1, cf2, cf3, zx, zy,  &
+                                   ids, ide, jds, jde, kds, kde,     &
+                                   ims, ime, jms, jme, kms, kme,     &
+                                   its, ite, jts, jte, kts, kte      )
+
+! History:     Sep 2003  Changes by Jason Knievel and George Bryan, NCAR
+!              Oct 2001  Converted to mass core by Bill Skamarock, NCAR
+!              ...        ...
+
+! Purpose:     This routine calculates deformation and 3-d divergence.
+
+! References:  Klemp and Wilhelmson (JAS 1978)
+!              Chen and Dudhia (NCAR WRF physics report 2000)
+
+!-----------------------------------------------------------------------
+! Comments 10-MAR-05
+! Equations 13a-f, Chen and Dudhia 2000, Appendix A:
+! Eqn 13a: D11=defor11= 2m^2 * (partial du^/dX + partial dpsi/dx * partial du^/dpsi)
+! Eqn 13b: D22=defor22= 2m^2 * (partial dv^/dY + partial dpsi/dy * partial dv^/dpsi)
+! Eqn 13c: D33=defor33= 2 * partial dw/dz [SIMPLER FORM]
+! Eqn 13d: D12=defor12= m^2 * (partial dv^/dX + partial du^/dY +
+!                              partial dpsi/dx * partial dv^/dpsi +
+!                              partial dpsi/dy * partial du^/dpsi)
+! Eqn 13e: D13=defor13= m^2 * (partial dw^/dX + partial dpsi/dx * partial dw^/dpsi)
+!                           + partial du/dz [SIMPLER FORM]
+! Eqn 13f: D23=defor23= m^2 * (partial dw^/dY + partial dpsi/dy * partial dw^/dpsi)
+!                           + partial dv/dz [SIMPLER FORM]
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde, &
+       ims, ime, jms, jme, kms, kme, &
+       its, ite, jts, jte, kts, kte
+
+    REAL, INTENT( IN )  &
+    :: rdx, rdy, cf1, cf2, cf3
+
+    REAL, DIMENSION( kms:kme ), INTENT( IN )  &
+    :: fnm, fnp, dn, dnw, u_base, v_base
+
+    REAL, DIMENSION( ims:ime , jms:jme ),  INTENT( IN )  &
+    :: msfux, msfuy, msfvx, msfvy, msftx, msfty
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    ::  u, v, w, zx, zy, rdz, rdzw
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( INOUT )  &
+    :: defor11, defor22, defor33, defor12, defor13, defor23, div 
+
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k, ktf, ktes1, ktes2, i_start, i_end, j_start, j_end
+
+    REAL  &
+    :: tmp, tmpzx, tmpzy, tmpzeta_z, cft1, cft2
+
+    REAL, DIMENSION( its:ite, jts:jte )  &
+    :: mm, zzavg, zeta_zd12
+
+    REAL, DIMENSION( its-2:ite+2, kts:kte, jts-2:jte+2 )  &
+    :: tmp1, hat, hatavg
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+! Comments 10-MAR-2005
+! Treat all differentials as 'div-style' [or 'curl-style'],
+! i.e., du/dX becomes (in map coordinate space) mx*my * d(u/my)/dx,
+! NB - all equations referred to here are from Chen and Dudhia 2002, from the
+! WRF physics documents web pages:
+! http://www.mmm.ucar.edu/wrf/users/docs/wrf-doc-physics.pdf
+
+!=======================================================================
+! In the following section, calculate 3-d divergence and the first three
+! (defor11, defor22, defor33) of six deformation terms.
+
+    ktes1   = kte-1
+    ktes2   = kte-2
+
+    cft2    = - 0.5 * dnw(ktes1) / dn(ktes1)
+    cft1    = 1.0 - cft2
+
+    ktf     = MIN( kte, kde-1 )
+
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+! Square the map scale factor.
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      mm(i,j) = msftx(i,j) * msfty(i,j)
+    END DO
+    END DO
+
+!-----------------------------------------------------------------------
+! Calculate du/dx.
+
+! Apply a coordinate transformation to zonal velocity, u.
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end+1
+      hat(i,k,j) = u(i,k,j) / msfuy(i,j)
+    END DO
+    END DO
+    END DO
+
+! Average in x and z.
+
+    DO j=j_start,j_end
+    DO k=kts+1,ktf
+    DO i=i_start,i_end
+      hatavg(i,k,j) = 0.5 *  &
+                    ( fnm(k) * ( hat(i,k  ,j) + hat(i+1,  k,j) ) +  &
+                      fnp(k) * ( hat(i,k-1,j) + hat(i+1,k-1,j) ) )
+    END DO
+    END DO
+    END DO
+
+! Extrapolate to top and bottom of domain (to w levels).
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      hatavg(i,1,j)   =  0.5 * (  &
+                         cf1 * hat(i  ,1,j) +  &
+                         cf2 * hat(i  ,2,j) +  &
+                         cf3 * hat(i  ,3,j) +  &
+                         cf1 * hat(i+1,1,j) +  &
+                         cf2 * hat(i+1,2,j) +  &
+                         cf3 * hat(i+1,3,j) )
+      hatavg(i,kte,j) =  0.5 * (  &
+                        cft1 * ( hat(i,ktes1,j) + hat(i+1,ktes1,j) )  +  &
+                        cft2 * ( hat(i,ktes2,j) + hat(i+1,ktes2,j) ) )
+    END DO
+    END DO
+
+    ! Comments 10-MAR-05
+    ! Eqn 13a: D11=defor11= 2m^2 * (partial du^/dX + partial dpsi/dx * partial du^/dpsi)
+    ! Below, D11 is set = 2*tmp1
+    ! => tmp1 = m^2 * (partial du^/dX + partial dpsi/dx * partial du^/dpsi)
+    ! tmpzx = averaged value of dpsi/dx (=zx)
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tmpzx       = 0.25 * (  &
+                    zx(i,k  ,j) + zx(i+1,k  ,j) +  &
+                    zx(i,k+1,j) + zx(i+1,k+1,j) )
+      tmp1(i,k,j) = ( hatavg(i,k+1,j) - hatavg(i,k,j) ) *tmpzx * rdzw(i,k,j)
+      ! tmp1 to here = partial dpsi/dx * partial du^/dpsi:
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tmp1(i,k,j) = mm(i,j) * ( rdx * ( hat(i+1,k,j) - hat(i,k,j) ) -  &
+                    tmp1(i,k,j))
+    END DO
+    END DO
+    END DO
+
+! End calculation of du/dx.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate defor11 (2*du/dx).
+! Comments 10-MAR-05
+! Eqn 13a: D11=defor11= 2 m^2 * (partial du^/dX + partial dpsi/dx * partial du^/dpsi)
+!                     = 2*tmp1
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      defor11(i,k,j) = 2.0 * tmp1(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! End calculation of defor11.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate zonal divergence (du/dx) and add it to the divergence array.
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      div(i,k,j) = tmp1(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! End calculation of zonal divergence.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate dv/dy.
+
+! Apply a coordinate transformation to meridional velocity, v.
+
+    DO j = j_start, j_end+1
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      ! Because msfvx at the poles will be undefined (1./0.), we will have
+      ! trouble.  But we are OK since v at the poles is 0., and that takes
+      ! precedence in this case.
+      IF ((config_flags%polar) .AND. ((j == jds) .OR. (j == jde))) THEN
+         hat(i,k,j) = 0.
+      ELSE ! normal code
+      hat(i,k,j) = v(i,k,j) / msfvx(i,j)
+      ENDIF
+    END DO
+    END DO
+    END DO
+
+! Account for the slope in y of eta surfaces.
+
+    DO j=j_start,j_end
+    DO k=kts+1,ktf
+    DO i=i_start,i_end
+      hatavg(i,k,j) = 0.5 * (  &
+                      fnm(k) * ( hat(i,k  ,j) + hat(i,k  ,j+1) ) +  &
+                      fnp(k) * ( hat(i,k-1,j) + hat(i,k-1,j+1) ) )
+    END DO
+    END DO
+    END DO
+
+! Extrapolate to top and bottom of domain (to w levels).
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      hatavg(i,1,j)   =  0.5 * (  &
+                         cf1 * hat(i,1,j  ) +  &
+                         cf2 * hat(i,2,j  ) +  &
+                         cf3 * hat(i,3,j  ) +  &
+                         cf1 * hat(i,1,j+1) +  &
+                         cf2 * hat(i,2,j+1) +  &
+                         cf3 * hat(i,3,j+1) )
+      hatavg(i,kte,j) =  0.5 * (  &
+                        cft1 * ( hat(i,ktes1,j) + hat(i,ktes1,j+1) ) +  &
+                        cft2 * ( hat(i,ktes2,j) + hat(i,ktes2,j+1) ) )
+    END DO
+    END DO
+
+    ! Comments 10-MAR-05
+    ! Eqn 13b: D22=defor22= 2m^2 * (partial dv^/dY + partial dpsi/dy * partial dv^/dpsi)
+    ! Below, D22 is set = 2*tmp1
+    ! => tmp1 = m^2 * (partial dv^/dY + partial dpsi/dy * partial dv^/dpsi)
+    ! tmpzy = averaged value of dpsi/dy (=zy)
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tmpzy       =  0.25 * (  &
+                     zy(i,k  ,j) + zy(i,k  ,j+1) +  &
+                     zy(i,k+1,j) + zy(i,k+1,j+1)  )
+      tmp1(i,k,j) = ( hatavg(i,k+1,j) - hatavg(i,k,j) ) * tmpzy * rdzw(i,k,j)
+      ! tmp1 to here = partial dpsi/dy * partial dv^/dpsi:
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tmp1(i,k,j) = mm(i,j) * (  &
+                    rdy * ( hat(i,k,j+1) - hat(i,k,j) ) - tmp1(i,k,j) )
+    END DO
+    END DO
+    END DO
+
+! End calculation of dv/dy.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate defor22 (2*dv/dy).
+! Comments 10-MAR-05
+! Eqn 13b: D22=defor22= 2 m^2 * (partial dv^/dY + partial dpsi/dy * partial dv^/dpsi)
+!                     = 2*tmp1
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      defor22(i,k,j) = 2.0 * tmp1(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! End calculation of defor22.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate meridional divergence (dv/dy) and add it to the divergence
+! array.
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      div(i,k,j) = div(i,k,j) + tmp1(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! End calculation of meridional divergence.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Comments 10-MAR-05
+! Eqn 13c: D33=defor33= 2 * partial dw/dz
+! Below, D33 is set = 2*tmp1
+! => tmp1 = partial dw/dz
+
+! Calculate dw/dz.
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tmp1(i,k,j) = ( w(i,k+1,j) - w(i,k,j) ) * rdzw(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! End calculation of dw/dz.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate defor33 (2*dw/dz).
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      defor33(i,k,j) = 2.0 * tmp1(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! End calculation of defor33.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate vertical divergence (dw/dz) and add it to the divergence
+! array.
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      div(i,k,j) = div(i,k,j) + tmp1(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! End calculation of vertical divergence. 
+!-----------------------------------------------------------------------
+
+! Three-dimensional divergence is now finished and values are in array
+! "div."  Also, the first three (defor11, defor22, defor33) of six
+! deformation terms are now calculated at pressure points.
+!=======================================================================
+
+! Comments 10-MAR-2005
+! Treat all differentials as 'div-style' [or 'curl-style'],
+! i.e., du/dY becomes (in map coordinate space) mx*my * d(u/mx)/dy,
+!       dv/dX becomes (in map coordinate space) mx*my * d(v/my)/dx,
+! (see e.g. Haltiner and Williams p. 441)
+
+!=======================================================================
+! Calculate the final three deformations (defor12, defor13, defor23) at 
+! vorticity points.
+
+    i_start = its
+    i_end   = ite
+    j_start = jts
+    j_end   = jte
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_xe .OR. config_flags%specified .OR. & 
+         config_flags%nested) i_end   = MIN( ide-1, ite )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested) j_start = MAX( jds+1, jts )
+    IF ( config_flags%open_ye .OR. config_flags%specified .OR. &
+         config_flags%nested) j_end   = MIN( jde-1, jte )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+
+!-----------------------------------------------------------------------
+! Calculate du/dy.
+
+! First, calculate an average mapscale factor.
+
+! Comments 10-MAR-05
+! du/dy => need u map scale factor in x (which is defined at u points)
+! averaged over j and j-1
+! dv/dx => need v map scale factor in y (which is defined at v points)
+! averaged over i and i-1
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      mm(i,j) = 0.25 * ( msfux(i,j-1) + msfux(i,j) ) * ( msfvy(i-1,j) + msfvy(i,j) )
+    END DO
+    END DO
+
+! Apply a coordinate transformation to zonal velocity, u.
+
+    DO j =j_start-1, j_end
+    DO k =kts, ktf
+    DO i =i_start, i_end
+      ! Fixes to set_physical_bc2/3d for polar boundary conditions 
+      ! remove issues with loop over j
+      hat(i,k,j) = u(i,k,j) / msfux(i,j)
+    END DO
+    END DO
+    END DO
+
+! Average in y and z.
+
+    DO j=j_start,j_end
+    DO k=kts+1,ktf
+    DO i=i_start,i_end
+      hatavg(i,k,j) = 0.5 * (  &
+                      fnm(k) * ( hat(i,k  ,j-1) + hat(i,k  ,j) ) +  &
+                      fnp(k) * ( hat(i,k-1,j-1) + hat(i,k-1,j) ) )
+    END DO
+    END DO
+    END DO
+
+! Extrapolate to top and bottom of domain (to w levels).
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      hatavg(i,1,j)   =  0.5 * (  &
+                         cf1 * hat(i,1,j-1) +  &
+                         cf2 * hat(i,2,j-1) +  &
+                         cf3 * hat(i,3,j-1) +  &
+                         cf1 * hat(i,1,j  ) +  &
+                         cf2 * hat(i,2,j  ) +  &
+                         cf3 * hat(i,3,j  ) )
+      hatavg(i,kte,j) =  0.5 * (  &
+                        cft1 * ( hat(i,ktes1,j-1) + hat(i,ktes1,j) ) +  &
+                        cft2 * ( hat(i,ktes2,j-1) + hat(i,ktes2,j) ) )
+    END DO
+    END DO
+
+    ! tmpzy = averaged value of dpsi/dy (=zy) on vorticity grid
+    ! tmp1  = partial dpsi/dy * partial du^/dpsi
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tmpzy       = 0.25 * (  &
+                    zy(i-1,k  ,j) + zy(i,k  ,j) +  &
+                    zy(i-1,k+1,j) + zy(i,k+1,j) )
+      tmp1(i,k,j) = ( hatavg(i,k+1,j) - hatavg(i,k,j) ) *  &
+                    0.25 * tmpzy * ( rdzw(i,k,j) + rdzw(i-1,k,j) + &
+                                     rdzw(i-1,k,j-1) + rdzw(i,k,j-1) )
+    END DO
+    END DO
+    END DO
+
+! End calculation of du/dy.
+!---------------------------------------------------------------------- 
+
+!-----------------------------------------------------------------------
+! Add the first term to defor12 (du/dy+dv/dx) at vorticity points.
+
+! Comments 10-MAR-05
+! Eqn 13d: D12=defor12= m^2 * (partial dv^/dX + partial du^/dY +
+!                              partial dpsi/dx * partial dv^/dpsi +
+!                              partial dpsi/dy * partial du^/dpsi)
+! Here deal with m^2 * (partial du^/dY + partial dpsi/dy * partial du^/dpsi)
+! Still need to add v^ terms: 
+!   m^2 * (partial dv^/dX + partial dpsi/dx * partial dv^/dpsi)
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      defor12(i,k,j) = mm(i,j) * (  &
+                       rdy * ( hat(i,k,j) - hat(i,k,j-1) ) - tmp1(i,k,j) )
+    END DO
+    END DO
+    END DO
+
+! End addition of the first term to defor12.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate dv/dx.
+
+! Apply a coordinate transformation to meridional velocity, v.
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start-1, i_end
+       hat(i,k,j) = v(i,k,j) / msfvy(i,j)
+    END DO
+    END DO
+    END DO
+
+! Account for the slope in x of eta surfaces.
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      hatavg(i,k,j) = 0.5 * (  &
+                      fnm(k) * ( hat(i-1,k  ,j) + hat(i,k  ,j) ) +  &
+                      fnp(k) * ( hat(i-1,k-1,j) + hat(i,k-1,j) ) )
+    END DO
+    END DO
+    END DO
+
+! Extrapolate to top and bottom of domain (to w levels).
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+       hatavg(i,1,j)   =  0.5 * (  &
+                          cf1 * hat(i-1,1,j) +  &
+                          cf2 * hat(i-1,2,j) +  &
+                          cf3 * hat(i-1,3,j) +  &
+                          cf1 * hat(i  ,1,j) +  &
+                          cf2 * hat(i  ,2,j) +  &
+                          cf3 * hat(i  ,3,j) )
+       hatavg(i,kte,j) =  0.5 * (  &
+                         cft1 * ( hat(i,ktes1,j) + hat(i-1,ktes1,j) ) +  &
+                         cft2 * ( hat(i,ktes2,j) + hat(i-1,ktes2,j) ) )
+    END DO
+    END DO
+
+    ! Fixes to set_physical_bc2/3d have made any check for polar B.C.'s
+    ! unnecessary in this place.  zx, rdzw, and hatavg are all defined
+    ! in places they need to be and the values at the poles are replications
+    ! of the values one grid point in, so the averaging over j and j-1 works
+    ! to act as just using the value at j or j-1 (with out extra code).
+    !
+    ! tmpzx = averaged value of dpsi/dx (=zx) on vorticity grid
+    ! tmp1  = partial dpsi/dx * partial dv^/dpsi
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tmpzx       = 0.25 * (  &
+                    zx(i,k  ,j-1) + zx(i,k  ,j) +  &
+                    zx(i,k+1,j-1) + zx(i,k+1,j) )
+      tmp1(i,k,j) = ( hatavg(i,k+1,j) - hatavg(i,k,j) ) *  &
+                    0.25 * tmpzx * ( rdzw(i,k,j) + rdzw(i,k,j-1) + &
+                                     rdzw(i-1,k,j-1) + rdzw(i-1,k,j) )
+    END DO
+    END DO
+    END DO
+
+! End calculation of dv/dx.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Add the second term to defor12 (du/dy+dv/dx) at vorticity points.
+
+! Comments 10-MAR-05
+! Eqn 13d: D12=defor12= m^2 * (partial dv^/dX + partial du^/dY +
+!                              partial dpsi/dx * partial dv^/dpsi +
+!                              partial dpsi/dy * partial du^/dpsi)
+! Here adding v^ terms:
+!    m^2 * (partial dv^/dX + partial dpsi/dx * partial dv^/dpsi)
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      defor12(i,k,j) = defor12(i,k,j) +  &
+                       mm(i,j) * (  &
+                       rdx * ( hat(i,k,j) - hat(i-1,k,j) ) - tmp1(i,k,j) )
+    END DO
+    END DO
+    END DO
+
+! End addition of the second term to defor12.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Update the boundary for defor12 (might need to change later).
+ 
+    IF ( .NOT. config_flags%periodic_x .AND. i_start .EQ. ids+1 ) THEN
+      DO j = jts, jte
+      DO k = kts, kte
+        defor12(ids,k,j) = defor12(ids+1,k,j)
+      END DO
+      END DO
+    END IF
+ 
+    IF ( .NOT. config_flags%periodic_y .AND. j_start .EQ. jds+1) THEN
+      DO k = kts, kte
+      DO i = its, ite
+        defor12(i,k,jds) = defor12(i,k,jds+1)
+      END DO
+      END DO
+    END IF
+
+    IF ( .NOT. config_flags%periodic_x .AND. i_end .EQ. ide-1) THEN
+      DO j = jts, jte
+      DO k = kts, kte
+        defor12(ide,k,j) = defor12(ide-1,k,j)
+      END DO
+      END DO
+    END IF
+
+    IF ( .NOT. config_flags%periodic_y .AND. j_end .EQ. jde-1) THEN
+      DO k = kts, kte
+      DO i = its, ite
+        defor12(i,k,jde) = defor12(i,k,jde-1)
+      END DO
+      END DO
+    END IF
+
+! End update of boundary for defor12.
+!-----------------------------------------------------------------------
+
+! Comments 10-MAR-05
+! Further deformation terms not needed for 2-dimensional Smagorinsky diffusion,
+! so those terms have not been dealt with yet.
+! A "y" has simply been added to all map scale factors to allow the model to
+! compile without errors.
+
+!-----------------------------------------------------------------------
+! Calculate dw/dx.
+
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested) j_start = MAX( jds+1, jts )
+
+    IF ( config_flags%periodic_x ) i_start = its
+    IF ( config_flags%periodic_x ) i_end = MIN( ite, ide )
+    IF ( config_flags%periodic_y ) j_end = MIN( jte, jde )
+
+! Square the mapscale factor.
+
+    DO j = jts, jte
+    DO i = its, ite
+      mm(i,j) = msfux(i,j) * msfuy(i,j)
+    END DO
+    END DO
+
+! Apply a coordinate transformation to vertical velocity, w.  This is for both
+! defor13 and defor23.
+
+    DO j = j_start, j_end
+    DO k = kts, kte
+    DO i = i_start, i_end
+      hat(i,k,j) = w(i,k,j) / msfty(i,j)
+    END DO
+    END DO
+    END DO
+
+    i = i_start-1
+    DO j = j_start, MIN( jte, jde-1 )
+    DO k = kts, kte
+      hat(i,k,j) = w(i,k,j) / msfty(i,j)
+    END DO
+    END DO
+
+    j = j_start-1
+    DO k = kts, kte
+    DO i = i_start, MIN( ite, ide-1 )
+      hat(i,k,j) = w(i,k,j) / msfty(i,j)
+    END DO
+    END DO
+
+! QUESTION: What is this for?
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      hatavg(i,k,j) = 0.25 * (  &
+                      hat(i  ,k  ,j) +  &
+                      hat(i  ,k+1,j) +  &
+                      hat(i-1,k  ,j) +  &
+                      hat(i-1,k+1,j) )
+    END DO
+    END DO
+    END DO
+
+! Calculate dw/dx.
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      tmp1(i,k,j) = ( hatavg(i,k,j) - hatavg(i,k-1,j) ) * zx(i,k,j) *  &
+                    0.5 * ( rdz(i,k,j) + rdz(i-1,k,j) )
+    END DO
+    END DO
+    END DO
+
+! End calculation of dw/dx.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Add the first term (dw/dx) to defor13 (dw/dx+du/dz) at vorticity
+! points.
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      defor13(i,k,j) = mm(i,j) * (  &
+                       rdx * ( hat(i,k,j) - hat(i-1,k,j) ) - tmp1(i,k,j) )
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      defor13(i,kts,j  ) = 0.0
+      defor13(i,ktf+1,j) = 0.0
+    END DO
+    END DO
+
+! End addition of the first term to defor13.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate du/dz.
+
+    IF ( config_flags%mix_full_fields ) THEN
+
+      DO j = j_start, j_end
+      DO k = kts+1, ktf
+      DO i = i_start, i_end
+        tmp1(i,k,j) = ( u(i,k,j) - u(i,k-1,j) ) *  &
+                      0.5 * ( rdz(i,k,j) + rdz(i-1,k,j) )
+      END DO
+      END DO
+      END DO
+
+    ELSE
+
+      DO j = j_start, j_end
+      DO k = kts+1, ktf
+      DO i = i_start, i_end
+        tmp1(i,k,j) = ( u(i,k,j) - u_base(k) - u(i,k-1,j) + u_base(k-1) ) *  &
+                      0.5 * ( rdz(i,k,j) + rdz(i-1,k,j) )
+      END DO
+      END DO
+      END DO
+
+    END IF
+
+!-----------------------------------------------------------------------
+! Add the second term (du/dz) to defor13 (dw/dx+du/dz) at vorticity
+! points.
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      defor13(i,k,j) = defor13(i,k,j) + tmp1(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! End addition of the second term to defor13.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate dw/dy.
+
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested) j_start = MAX( jds+1, jts )
+    IF ( config_flags%periodic_y ) j_end = MIN( jte, jde )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+
+! Square mapscale factor.
+
+    DO j = jts, jte
+    DO i = its, ite
+      mm(i,j) = msfvx(i,j) * msfvy(i,j)
+    END DO
+    END DO
+
+! Apply a coordinate transformation to vertical velocity, w.  Added by CW 7/19/07
+
+    DO j = j_start, j_end
+    DO k = kts, kte
+    DO i = i_start, i_end
+      hat(i,k,j) = w(i,k,j) / msftx(i,j)
+    END DO
+    END DO
+    END DO
+
+    i = i_start-1
+    DO j = j_start, MIN( jte, jde-1 )
+    DO k = kts, kte
+      hat(i,k,j) = w(i,k,j) / msftx(i,j)
+    END DO
+    END DO
+
+    j = j_start-1
+    DO k = kts, kte
+    DO i = i_start, MIN( ite, ide-1 )
+      hat(i,k,j) = w(i,k,j) / msftx(i,j)
+    END DO
+    END DO
+
+! QUESTION: What is this for?
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      hatavg(i,k,j) = 0.25 * (  &
+                      hat(i,k  ,j  ) +  &
+                      hat(i,k+1,j  ) +  &
+                      hat(i,k  ,j-1) +  &
+                      hat(i,k+1,j-1) )
+    END DO
+    END DO
+    END DO
+
+! Calculate dw/dy and store in tmp1.
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      tmp1(i,k,j) = ( hatavg(i,k,j) - hatavg(i,k-1,j) ) * zy(i,k,j) *  &
+                    0.5 * ( rdz(i,k,j) + rdz(i,k,j-1) )
+    END DO
+    END DO
+    END DO
+
+! End calculation of dw/dy.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Add the first term (dw/dy) to defor23 (dw/dy+dv/dz) at vorticity
+! points.
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      defor23(i,k,j) = mm(i,j) * (  &
+                       rdy * ( hat(i,k,j) - hat(i,k,j-1) ) - tmp1(i,k,j) )
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      defor23(i,kts,j  ) = 0.0
+      defor23(i,ktf+1,j) = 0.0
+    END DO
+    END DO
+
+! End addition of the first term to defor23.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Calculate dv/dz.
+
+    IF ( config_flags%mix_full_fields ) THEN
+
+      DO j = j_start, j_end
+      DO k = kts+1, ktf
+      DO i = i_start, i_end
+        tmp1(i,k,j) = ( v(i,k,j) - v(i,k-1,j) ) *  &
+                      0.5 * ( rdz(i,k,j) + rdz(i,k,j-1) )
+      END DO
+      END DO
+      END DO
+
+    ELSE
+
+      DO j = j_start, j_end
+      DO k = kts+1, ktf
+      DO i = i_start, i_end
+        tmp1(i,k,j) = ( v(i,k,j) - v_base(k) - v(i,k-1,j) + v_base(k-1) ) *  &
+                      0.5 * ( rdz(i,k,j) + rdz(i,k,j-1) )
+      END DO
+      END DO
+      END DO
+
+    END IF
+
+! End calculation of dv/dz.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Add the second term (dv/dz) to defor23 (dw/dy+dv/dz) at vorticity
+! points.
+
+! Add tmp1 to defor23.
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      defor23(i,k,j) = defor23(i,k,j) + tmp1(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! End addition of the second term to defor23.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Update the boundary for defor13 and defor23 (might need to change
+! later).
+
+    IF ( .NOT. config_flags%periodic_x .AND. i_start .EQ. ids+1) THEN
+      DO j = jts, jte
+      DO k = kts, kte
+        defor13(ids,k,j) = defor13(ids+1,k,j)
+        defor23(ids,k,j) = defor23(ids+1,k,j)
+      END DO
+      END DO
+    END IF
+
+    IF ( .NOT. config_flags%periodic_y .AND. j_start .EQ. jds+1) THEN
+      DO k = kts, kte
+      DO i = its, ite
+        defor13(i,k,jds) = defor13(i,k,jds+1)
+        defor23(i,k,jds) = defor23(i,k,jds+1)
+      END DO
+      END DO
+    END IF
+
+    IF ( .NOT. config_flags%periodic_x .AND. i_end .EQ. ide-1) THEN
+      DO j = jts, jte
+      DO k = kts, kte
+        defor13(ide,k,j) = defor13(ide-1,k,j)
+        defor23(ide,k,j) = defor23(ide-1,k,j)
+      END DO
+      END DO
+    END IF
+
+    IF ( .NOT. config_flags%periodic_y .AND. j_end .EQ. jde-1) THEN
+      DO k = kts, kte
+      DO i = its, ite
+        defor13(i,k,jde) = defor13(i,k,jde-1)
+        defor23(i,k,jde) = defor23(i,k,jde-1)
+      END DO
+      END DO
+    END IF
+
+! End update of boundary for defor13 and defor23.
+!-----------------------------------------------------------------------
+
+! The second three (defor12, defor13, defor23) of six deformation terms
+! are now calculated at vorticity points.
+!=======================================================================
+
+    END SUBROUTINE cal_deform_and_div
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE calculate_km_kh( config_flags, dt,                        &
+                                dampcoef, zdamp, damp_opt,               &
+                                xkmh, xkmv, xkhh, xkhv,                  &
+                                BN2, khdif, kvdif, div,                  &
+                                defor11, defor22, defor33,               &
+                                defor12, defor13, defor23,               &
+                                tke, p8w, t8w, theta, t, p, moist,       &
+                                dn, dnw, dx, dy, rdz, rdzw, isotropic,   &
+                                n_moist, cf1, cf2, cf3, warm_rain,       &
+                                mix_upper_bound,                         &
+                                msftx, msfty,                            &
+                                ids, ide, jds, jde, kds, kde,            &
+                                ims, ime, jms, jme, kms, kme,            &
+                                its, ite, jts, jte, kts, kte             )
+
+! History:     Sep 2003  Changes by George Bryan and Jason Knievel, NCAR
+!              Oct 2001  Converted to mass core by Bill Skamarock, NCAR
+!              ...       ...
+
+! Purpose:     This routine calculates exchange coefficients for the TKE
+!              scheme.
+
+! References:  Klemp and Wilhelmson (JAS 1978)
+!              Deardorff (B-L Meteor 1980)
+!              Chen and Dudhia (NCAR WRF physics report 2000)
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags   
+
+    INTEGER, INTENT( IN )  &
+    :: n_moist, damp_opt, isotropic,  & 
+       ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte 
+
+    LOGICAL, INTENT( IN )  &
+    :: warm_rain
+
+    REAL, INTENT( IN )  &
+    :: dx, dy, zdamp, dt, dampcoef, cf1, cf2, cf3, khdif, kvdif
+
+    REAL, DIMENSION( kms:kme ), INTENT( IN )  &
+    :: dnw, dn
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme, n_moist ), INTENT( INOUT )  &
+    :: moist
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( INOUT )  &
+    :: xkmv, xkmh, xkhv, xkhh, BN2  
+
+    REAL, DIMENSION( ims:ime , kms:kme, jms:jme ),  INTENT( IN )  &
+    :: defor11, defor22, defor33, defor12, defor13, defor23,      &
+       div, rdz, rdzw, p8w, t8w, theta, t, p
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( INOUT )  &
+    :: tke
+
+    REAL, INTENT( IN )  &
+    :: mix_upper_bound
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: msftx, msfty
+
+! Local variables.
+
+    INTEGER  &
+    :: i_start, i_end, j_start, j_end, ktf, i, j, k
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    ktf     = MIN( kte, kde-1 )
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+    CALL calculate_N2( config_flags, BN2, moist,           &
+                       theta, t, p, p8w, t8w,              &
+                       dnw, dn, rdz, rdzw,                 &
+                       n_moist, cf1, cf2, cf3, warm_rain,  &
+                       ids, ide, jds, jde, kds, kde,       &
+                       ims, ime, jms, jme, kms, kme,       &
+                       its, ite, jts, jte, kts, kte        )
+
+! Select a scheme for calculating diffusion coefficients.
+
+    km_coef: SELECT CASE( config_flags%km_opt )
+
+      CASE (1)
+            CALL isotropic_km( config_flags, xkmh, xkmv,                &
+                               xkhh, xkhv, khdif, kvdif,                &
+                               ids, ide, jds, jde, kds, kde,            &
+                               ims, ime, jms, jme, kms, kme,            &
+                               its, ite, jts, jte, kts, kte             )
+      CASE (2)  
+            CALL tke_km(       config_flags, xkmh, xkmv,                &
+                               xkhh, xkhv, BN2, tke, p8w, t8w, theta,   &
+                               rdz, rdzw, dx, dy, dt, isotropic,        &
+                               mix_upper_bound, msftx, msfty,           &
+                               ids, ide, jds, jde, kds, kde,            &
+                               ims, ime, jms, jme, kms, kme,            &
+                               its, ite, jts, jte, kts, kte             )
+      CASE (3)  
+            CALL smag_km(      config_flags, xkmh, xkmv,                &
+                               xkhh, xkhv, BN2, div,                    &
+                               defor11, defor22, defor33,               &
+                               defor12, defor13, defor23,               &
+                               rdzw, dx, dy, dt, isotropic,             &
+                               mix_upper_bound, msftx, msfty,           &
+                               ids, ide, jds, jde, kds, kde,            &
+                               ims, ime, jms, jme, kms, kme,            &
+                               its, ite, jts, jte, kts, kte             )
+      CASE (4)  
+            CALL smag2d_km(    config_flags, xkmh, xkmv,                &
+                               xkhh, xkhv, defor11, defor22, defor12,   &
+                               rdzw, dx, dy, msftx, msfty,              &
+                               ids, ide, jds, jde, kds, kde,            &
+                               ims, ime, jms, jme, kms, kme,            &
+                               its, ite, jts, jte, kts, kte             )
+      CASE DEFAULT
+            CALL wrf_error_fatal( 'Please choose diffusion coefficient scheme' )
+
+    END SELECT km_coef
+
+    IF ( damp_opt .eq. 1 ) THEN
+      CALL cal_dampkm( config_flags, xkmh, xkhh, xkmv, xkhv,    &
+                       dx, dy, dt, dampcoef, rdz, rdzw, zdamp,  &
+                       msftx, msfty,                            &
+                       ids, ide, jds, jde, kds, kde,            &
+                       ims, ime, jms, jme, kms, kme,            &
+                       its, ite, jts, jte, kts, kte             )
+    END IF
+
+    END SUBROUTINE calculate_km_kh
+
+!=======================================================================
+
+SUBROUTINE cal_dampkm( config_flags,xkmh,xkhh,xkmv,xkhv,                       &
+                       dx,dy,dt,dampcoef,                                      &
+                       rdz, rdzw ,zdamp,                                       &
+                       msftx, msfty,                                           &
+                       ids,ide, jds,jde, kds,kde,                              &
+                       ims,ime, jms,jme, kms,kme,                              &
+                       its,ite, jts,jte, kts,kte                              )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type) , INTENT(IN   ) :: config_flags
+
+   INTEGER ,          INTENT(IN   )           :: ids, ide, jds, jde, kds, kde, &
+                                                 ims, ime, jms, jme, kms, kme, &
+                                                 its, ite, jts, jte, kts, kte
+
+   REAL    ,          INTENT(IN   )           :: zdamp,dx,dy,dt,dampcoef
+
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT)    ::     xkmh , &
+                                                                         xkhh , &
+                                                                         xkmv , &
+                                                                         xkhv 
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(IN   )    ::     rdz,   &
+                                                                         rdzw
+
+   REAL , DIMENSION( ims:ime, jms:jme), INTENT(IN   )             ::     msftx, &
+                                                                         msfty
+! LOCAL VARS
+
+   INTEGER :: i_start, i_end, j_start, j_end, ktf, ktfm1, i, j, k
+   REAL    :: kmmax,kmmvmax,degrad90,dz,tmp
+   REAL    :: ds
+   REAL ,     DIMENSION( its:ite )                                ::   deltaz
+   REAL , DIMENSION( its:ite, kts:kte, jts:jte)                   ::   dampk,dampkv
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf = min(kte,kde-1)
+   ktfm1 = ktf-1
+
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+! keep upper damping diffusion away from relaxation zones at boundaries if used
+   IF(config_flags%specified .OR. config_flags%nested)THEN
+     i_start = MAX(i_start,ids+config_flags%spec_bdy_width-1)
+     i_end   = MIN(i_end,ide-config_flags%spec_bdy_width)
+     j_start = MAX(j_start,jds+config_flags%spec_bdy_width-1)
+     j_end   = MIN(j_end,jde-config_flags%spec_bdy_width)
+   ENDIF
+
+   kmmax=dx*dx/dt
+   degrad90=DEGRAD*90.
+   DO j = j_start, j_end
+
+      k=ktf
+      DO i = i_start, i_end
+         ! Unmodified dx used above may produce very large diffusivities
+         ! when msftx is very large.  And the above formula ignores the fact
+         ! that dy may now be different from dx as well.  Let's fix that by
+         ! defining a "ds" as the minimum of the "real-space" (physical
+         ! distance) values of dx and dy, and then using that smallest value
+         ! to calculate a point-by-point kmmax
+         ds = MIN(dx/msftx(i,j),dy/msfty(i,j))
+         kmmax=ds*ds/dt
+
+!         deltaz(i)=0.5*dnw(k)/zeta_z(i,j)
+!         dz=dnw(k)/zeta_z(i,j)
+         dz = 1./rdzw(i,k,j)
+         deltaz(i) = 0.5*dz
+
+         kmmvmax=dz*dz/dt
+         tmp=min(deltaz(i)/zdamp,1.)
+         dampk(i,k,j)=cos(degrad90*tmp)*cos(degrad90*tmp)*kmmax*dampcoef
+         dampkv(i,k,j)=cos(degrad90*tmp)*cos(degrad90*tmp)*kmmvmax*dampcoef
+! set upper limit on vertical K (based on horizontal K)
+         dampkv(i,k,j)=min(dampkv(i,k,j),dampk(i,k,j))
+
+      ENDDO
+
+      DO k = ktfm1,kts,-1
+      DO i = i_start, i_end
+         ! Unmodified dx used above may produce very large diffusivities
+         ! when msftx is very large.  And the above formula ignores the fact
+         ! that dy may now be different from dx as well.  Let's fix that by
+         ! defining a "ds" as the minimum of the "real-space" (physical
+         ! distance) values of dx and dy, and then using that smallest value
+         ! to calculate a point-by-point kmmax
+         ds = MIN(dx/msftx(i,j),dy/msfty(i,j))
+         kmmax=ds*ds/dt
+
+!         deltaz(i)=deltaz(i)+dn(k)/zeta_z(i,j)
+!         dz=dnw(k)/zeta_z(i,j)
+         dz = 1./rdz(i,k,j)
+         deltaz(i) = deltaz(i) + dz
+         dz = 1./rdzw(i,k,j)
+
+         kmmvmax=dz*dz/dt
+         tmp=min(deltaz(i)/zdamp,1.)
+         dampk(i,k,j)=cos(degrad90*tmp)*cos(degrad90*tmp)*kmmax*dampcoef
+         dampkv(i,k,j)=cos(degrad90*tmp)*cos(degrad90*tmp)*kmmvmax*dampcoef
+! set upper limit on vertical K (based on horizontal K)
+         dampkv(i,k,j)=min(dampkv(i,k,j),dampk(i,k,j))
+      ENDDO
+      ENDDO
+
+   ENDDO
+
+   DO j = j_start, j_end
+   DO k = kts,ktf
+   DO i = i_start, i_end
+      xkmh(i,k,j)=max(xkmh(i,k,j),dampk(i,k,j))
+      xkhh(i,k,j)=max(xkhh(i,k,j),dampk(i,k,j))
+      xkmv(i,k,j)=max(xkmv(i,k,j),dampkv(i,k,j))
+      xkhv(i,k,j)=max(xkhv(i,k,j),dampkv(i,k,j))
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE cal_dampkm
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE calculate_N2( config_flags, BN2, moist,           &
+                             theta, t, p, p8w, t8w,              &
+                             dnw, dn, rdz, rdzw,                 &
+                             n_moist, cf1, cf2, cf3, warm_rain,  &
+                             ids, ide, jds, jde, kds, kde,       &
+                             ims, ime, jms, jme, kms, kme,       &
+                             its, ite, jts, jte, kts, kte        )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: n_moist,  &
+       ids, ide, jds, jde, kds, kde, &
+       ims, ime, jms, jme, kms, kme, &
+       its, ite, jts, jte, kts, kte
+
+    LOGICAL, INTENT( IN )  &
+    :: warm_rain
+
+    REAL, INTENT( IN )  &
+    :: cf1, cf2, cf3
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( INOUT )  &
+    :: BN2
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: rdz, rdzw, theta, t, p, p8w, t8w 
+
+    REAL, DIMENSION( kms:kme ), INTENT( IN )  &
+    :: dnw, dn
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme, n_moist), INTENT( INOUT )  &
+    :: moist
+
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k, ktf, ispe, ktes1, ktes2,  &
+       i_start, i_end, j_start, j_end
+
+    REAL  &
+    :: coefa, thetaep1, thetaem1, qc_cr, es, tc, qlpqi, qsw, qsi,  &
+       tmpdz, xlvqv, thetaesfc, thetasfc, qvtop, qvsfc, thetatop, thetaetop
+
+    REAL, DIMENSION( its:ite, jts:jte )  &
+    :: tmp1sfc, tmp1top
+
+    REAL, DIMENSION( its:ite, kts:kte, jts:jte )  &
+    :: tmp1, qvs, qctmp
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    qc_cr   = 0.00001  ! in Kg/Kg
+
+    ktf     = MIN( kte, kde-1 )
+    ktes1   = kte-1
+    ktes2   = kte-2
+
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_xe .OR. config_flags%specified .OR. &
+         config_flags%nested) i_end   = MIN( ide-2, ite )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested) j_start = MAX( jds+1, jts )
+    IF ( config_flags%open_ye .OR. config_flags%specified .OR. &
+         config_flags%nested) j_end   = MIN( jde-2 ,jte )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+ 
+    IF ( P_QC .GT. PARAM_FIRST_SCALAR) THEN
+      DO j = j_start, j_end
+      DO k = kts, ktf
+      DO i = i_start, i_end
+        qctmp(i,k,j) = moist(i,k,j,P_QC)
+      END DO
+      END DO
+      END DO
+    ELSE
+      DO j = j_start, j_end
+      DO k = kts, ktf
+      DO i = i_start, i_end
+         qctmp(i,k,j) = 0.0
+      END DO
+      END DO
+      END DO
+    END IF
+ 
+    DO j = jts, jte
+    DO k = kts, kte
+    DO i = its, ite
+      tmp1(i,k,j) = 0.0
+    END DO
+    END DO
+    END DO
+ 
+    DO j = jts,jte
+    DO i = its,ite
+      tmp1sfc(i,j) = 0.0
+      tmp1top(i,j) = 0.0
+    END DO
+    END DO
+ 
+    DO ispe = PARAM_FIRST_SCALAR, n_moist
+      IF ( ispe .EQ. P_QV .OR. ispe .EQ. P_QC .OR. ispe .EQ. P_QI) THEN
+        DO j = j_start, j_end
+        DO k = kts, ktf
+        DO i = i_start, i_end
+          tmp1(i,k,j) = tmp1(i,k,j) + moist(i,k,j,ispe)
+        END DO
+        END DO
+        END DO
+ 
+        DO j = j_start, j_end
+        DO i = i_start, i_end
+          tmp1sfc(i,j) = tmp1sfc(i,j) +  &
+                         cf1 * moist(i,1,j,ispe) +  &
+                         cf2 * moist(i,2,j,ispe) +  &
+                         cf3 * moist(i,3,j,ispe)
+          tmp1top(i,j) = tmp1top(i,j) +  &
+                         moist(i,ktes1,j,ispe) + &
+                         ( moist(i,ktes1,j,ispe) - moist(i,ktes2,j,ispe) ) *  &
+                         0.5 * dnw(ktes1) / dn(ktes1)
+        END DO
+        END DO
+      END IF
+    END DO
+
+! Calculate saturation mixing ratio.
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tc         = t(i,k,j) - SVPT0
+      es         = 1000.0 * SVP1 * EXP( SVP2 * tc / ( t(i,k,j) - SVP3 ) )
+      qvs(i,k,j) = EP_2 * es / ( p(i,k,j) - es )
+    END DO
+    END DO
+    END DO
+ 
+    DO j = j_start, j_end
+    DO k = kts+1, ktf-1
+    DO i = i_start, i_end
+      tmpdz = 1.0 / rdz(i,k,j) + 1.0 / rdz(i,k+1,j)
+      IF ( moist(i,k,j,P_QV) .GE. qvs(i,k,j) .OR. qctmp(i,k,j) .GE. qc_cr) THEN
+        xlvqv      = XLV * moist(i,k,j,P_QV)
+        coefa      = ( 1.0 + xlvqv / R_d / t(i,k,j) ) / &
+                     ( 1.0 + XLV * xlvqv / Cp / R_v / t(i,k,j) / t(i,k,j) ) /  &
+                     theta(i,k,j)
+        thetaep1   = theta(i,k+1,j) *  &
+                     ( 1.0 + XLV * qvs(i,k+1,j) / Cp / t(i,k+1,j) )
+        thetaem1   = theta(i,k-1,j) *  &
+                     ( 1.0 + XLV * qvs(i,k-1,j) / Cp / t(i,k-1,j) )
+        BN2(i,k,j) = g * ( coefa * ( thetaep1 - thetaem1 ) / tmpdz -  &
+                     ( tmp1(i,k+1,j) - tmp1(i,k-1,j) ) / tmpdz )
+      ELSE
+        BN2(i,k,j) = g * ( (theta(i,k+1,j) - theta(i,k-1,j) ) /  &
+                     theta(i,k,j) / tmpdz +  &
+                     1.61 * ( moist(i,k+1,j,P_QV) - moist(i,k-1,j,P_QV) ) / &
+                     tmpdz -   &
+                     ( tmp1(i,k+1,j) - tmp1(i,k-1,j) ) / tmpdz )
+      ENDIF
+    END DO
+    END DO
+    END DO
+
+    k = kts
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      tmpdz     = 1.0 / rdz(i,k+1,j) + 0.5 / rdzw(i,k,j)
+      thetasfc  = T8w(i,kts,j) / ( p8w(i,k,j) / p1000mb )**( R_d / Cp )
+      IF ( moist(i,k,j,P_QV) .GE. qvs(i,k,j) .OR. qctmp(i,k,j) .GE. qc_cr) THEN
+        qvsfc     = cf1 * qvs(i,1,j) +  &
+                    cf2 * qvs(i,2,j) +  &
+                    cf3 * qvs(i,3,j)
+        xlvqv      = XLV * moist(i,k,j,P_QV)
+        coefa      = ( 1.0 + xlvqv / R_d / t(i,k,j) ) /  &
+                     ( 1.0 + XLV * xlvqv / Cp / R_v / t(i,k,j) / t(i,k,j) ) /  &
+                     theta(i,k,j)
+        thetaep1   = theta(i,k+1,j) *  &
+                     ( 1.0 + XLV * qvs(i,k+1,j) / Cp / t(i,k+1,j) )
+        thetaesfc  = thetasfc *  &
+                     ( 1.0 + XLV * qvsfc / Cp / t8w(i,kts,j) )
+        BN2(i,k,j) = g * ( coefa * ( thetaep1 - thetaesfc ) / tmpdz -  &
+                     ( tmp1(i,k+1,j) - tmp1sfc(i,j) ) / tmpdz )
+      ELSE
+        qvsfc     = cf1 * moist(i,1,j,P_QV) +  &
+                    cf2 * moist(i,2,j,P_QV) +  &
+                    cf3 * moist(i,3,j,P_QV)
+!        BN2(i,k,j) = g * ( ( theta(i,k+1,j) - thetasfc ) /  &
+!                     theta(i,k,j) / tmpdz +  &
+!                     1.61 * ( moist(i,k+1,j,P_QV) - qvsfc ) /  &
+!                     tmpdz -  &
+!                     ( tmp1(i,k+1,j) - tmp1sfc(i,j) ) / tmpdz  )
+!...... MARTA: change in computation of BN2 at the surface, WCS 040331
+
+        tmpdz= 1./rdzw(i,k,j) ! controlare come calcola rdzw
+        BN2(i,k,j) = g * ( ( theta(i,k+1,j) - theta(i,k,j)) /  &
+                     theta(i,k,j) / tmpdz +  &
+                     1.61 * ( moist(i,k+1,j,P_QV) - qvsfc ) /  &
+                     tmpdz -  &
+                     ( tmp1(i,k+1,j) - tmp1sfc(i,j) ) / tmpdz  )
+! end of MARTA/WCS change
+
+      ENDIF
+    END DO
+    END DO
+ 
+
+!...... MARTA: change in computation of BN2 at the top, WCS 040331
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+       BN2(i,ktf,j)=BN2(i,ktf-1,j)
+    END DO
+    END DO   
+! end of MARTA/WCS change
+
+    END SUBROUTINE calculate_N2
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE isotropic_km( config_flags,                                         &
+                         xkmh,xkmv,xkhh,xkhv,khdif,kvdif,                      &
+                         ids,ide, jds,jde, kds,kde,                            &
+                         ims,ime, jms,jme, kms,kme,                            &
+                         its,ite, jts,jte, kts,kte                            )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type) , INTENT(IN   ) :: config_flags
+
+   INTEGER ,          INTENT(IN   )           :: ids, ide, jds, jde, kds, kde, &
+                                                 ims, ime, jms, jme, kms, kme, &
+                                                 its, ite, jts, jte, kts, kte
+
+   REAL    ,          INTENT(IN   )           :: khdif,kvdif               
+
+   REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) ::     xkmh, &
+                                                                         xkmv, &
+                                                                         xkhh, &
+                                                                         xkhv
+! LOCAL VARS
+
+   INTEGER :: i_start, i_end, j_start, j_end, ktf, i, j, k
+   REAL    :: khdif3,kvdif3
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf = kte
+
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+!   khdif3=khdif*3.
+!   kvdif3=kvdif*3.
+   khdif3=khdif/prandtl
+   kvdif3=kvdif/prandtl
+
+   DO j = j_start, j_end
+   DO k = kts, ktf
+   DO i = i_start, i_end
+      xkmh(i,k,j)=khdif
+      xkmv(i,k,j)=kvdif
+      xkhh(i,k,j)=khdif3
+      xkhv(i,k,j)=kvdif3
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE isotropic_km
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE smag_km( config_flags,xkmh,xkmv,xkhh,xkhv,BN2,                      &
+                    div,defor11,defor22,defor33,defor12,                       &
+                    defor13,defor23,                                           &
+                    rdzw,dx,dy,dt,isotropic,                                   &
+                    mix_upper_bound, msftx, msfty,                             &
+                    ids,ide, jds,jde, kds,kde,                                 &
+                    ims,ime, jms,jme, kms,kme,                                 &
+                    its,ite, jts,jte, kts,kte                                  )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type) , INTENT(IN   ) :: config_flags
+
+   INTEGER ,          INTENT(IN   )           :: ids, ide, jds, jde, kds, kde, &
+                                                 ims, ime, jms, jme, kms, kme, &
+                                                 its, ite, jts, jte, kts, kte
+
+   INTEGER ,          INTENT(IN   )           :: isotropic
+   REAL    ,          INTENT(IN   )           :: dx, dy, dt, mix_upper_bound
+
+
+   REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) ::      BN2, &
+                                                                         rdzw
+
+   REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) ::     xkmh, &
+                                                                         xkmv, &
+                                                                         xkhh, &
+                                                                         xkhv
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme ),  INTENT(IN   )      ::      &    
+                                                                      defor11, &
+                                                                      defor22, &
+                                                                      defor33, &
+                                                                      defor12, &
+                                                                      defor13, &
+                                                                      defor23, &
+                                                                          div
+   REAL , DIMENSION( ims:ime, jms:jme), INTENT(IN   ) ::                msftx, &
+                                                                        msfty
+! LOCAL VARS
+
+   INTEGER :: i_start, i_end, j_start, j_end, ktf, i, j, k
+   REAL    :: deltas, tmp, pr, mlen_h, mlen_v, c_s
+
+   REAL, DIMENSION( its:ite , kts:kte , jts:jte )                 ::     def2
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf = min(kte,kde-1)
+
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+   IF ( config_flags%open_xs .or. config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%open_ys .or. config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+
+   pr = prandtl
+   c_s = config_flags%c_s
+
+   do j=j_start,j_end
+   do k=kts,ktf
+   do i=i_start,i_end
+      def2(i,k,j)=0.5*(defor11(i,k,j)*defor11(i,k,j) + &
+                       defor22(i,k,j)*defor22(i,k,j) + &
+                       defor33(i,k,j)*defor33(i,k,j))
+   enddo
+   enddo
+   enddo
+
+   do j=j_start,j_end
+   do k=kts,ktf
+   do i=i_start,i_end
+      tmp=0.25*(defor12(i  ,k,j)+defor12(i  ,k,j+1)+ &
+                defor12(i+1,k,j)+defor12(i+1,k,j+1))
+      def2(i,k,j)=def2(i,k,j)+tmp*tmp
+   enddo
+   enddo
+   enddo
+
+   do j=j_start,j_end
+   do k=kts,ktf
+   do i=i_start,i_end
+      tmp=0.25*(defor13(i  ,k+1,j)+defor13(i  ,k,j)+ &
+                defor13(i+1,k+1,j)+defor13(i+1,k,j))
+      def2(i,k,j)=def2(i,k,j)+tmp*tmp
+   enddo
+   enddo
+   enddo
+
+   do j=j_start,j_end
+   do k=kts,ktf
+   do i=i_start,i_end
+      tmp=0.25*(defor23(i,k+1,j  )+defor23(i,k,j  )+ &
+                defor23(i,k+1,j+1)+defor23(i,k,j+1))
+      def2(i,k,j)=def2(i,k,j)+tmp*tmp
+   enddo
+   enddo
+   enddo
+!
+   IF (isotropic .EQ. 0) THEN
+      DO j = j_start, j_end
+      DO k = kts, ktf
+      DO i = i_start, i_end
+         mlen_h=sqrt(dx/msftx(i,j) * dy/msfty(i,j))
+         mlen_v= 1./rdzw(i,k,j)
+         tmp=max(0.,def2(i,k,j)-BN2(i,k,j)/pr)
+         tmp=tmp**0.5
+         xkmh(i,k,j)=max(c_s*c_s*mlen_h*mlen_h*tmp, 1.0E-6*mlen_h*mlen_h )
+         xkmh(i,k,j)=min(xkmh(i,k,j), mix_upper_bound * mlen_h * mlen_h / dt )
+         xkmv(i,k,j)=max(c_s*c_s*mlen_v*mlen_v*tmp, 1.0E-6*mlen_v*mlen_v )
+         xkmv(i,k,j)=min(xkmv(i,k,j), mix_upper_bound * mlen_v * mlen_v / dt )
+         xkhh(i,k,j)=xkmh(i,k,j)/pr
+         xkhh(i,k,j)=min(xkhh(i,k,j), mix_upper_bound * mlen_h * mlen_h / dt )
+         xkhv(i,k,j)=xkmv(i,k,j)/pr
+         xkhv(i,k,j)=min(xkhv(i,k,j), mix_upper_bound * mlen_v * mlen_v / dt )
+      ENDDO
+      ENDDO
+      ENDDO
+   ELSE
+      DO j = j_start, j_end
+      DO k = kts, ktf
+      DO i = i_start, i_end
+         deltas=(dx/msftx(i,j) * dy/msfty(i,j)/rdzw(i,k,j))**0.33333333
+         tmp=max(0.,def2(i,k,j)-BN2(i,k,j)/pr)
+         tmp=tmp**0.5
+         xkmh(i,k,j)=max(c_s*c_s*deltas*deltas*tmp, 1.0E-6*deltas*deltas )
+         xkmh(i,k,j)=min(xkmh(i,k,j), mix_upper_bound * dx/msftx(i,j) * dy/msfty(i,j) / dt )
+         xkmv(i,k,j)=xkmh(i,k,j)
+         xkmv(i,k,j)=min(xkmv(i,k,j), mix_upper_bound / rdzw(i,k,j) / rdzw(i,k,j) / dt )
+         xkhh(i,k,j)=xkmh(i,k,j)/pr
+         xkhh(i,k,j)=min(xkhh(i,k,j), mix_upper_bound * dx/msftx(i,j) * dy/msfty(i,j) / dt )
+         xkhv(i,k,j)=xkmv(i,k,j)/pr
+         xkhv(i,k,j)=min(xkhv(i,k,j), mix_upper_bound / rdzw(i,k,j) / rdzw(i,k,j) / dt )
+      ENDDO
+      ENDDO
+      ENDDO
+   ENDIF
+
+END SUBROUTINE smag_km
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE smag2d_km( config_flags,xkmh,xkmv,xkhh,xkhv,                        &
+                    defor11,defor22,defor12,                                   &
+                    rdzw,dx,dy,msftx, msfty,                                   &
+                    ids,ide, jds,jde, kds,kde,                                 &
+                    ims,ime, jms,jme, kms,kme,                                 &
+                    its,ite, jts,jte, kts,kte                                  )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type) , INTENT(IN   ) :: config_flags
+
+   INTEGER ,          INTENT(IN   )           :: ids, ide, jds, jde, kds, kde, &
+                                                 ims, ime, jms, jme, kms, kme, &
+                                                 its, ite, jts, jte, kts, kte
+
+   REAL    ,          INTENT(IN   )           :: dx, dy
+
+
+   REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN   ) ::     rdzw
+
+   REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) ::     xkmh, &
+                                                                         xkmv, &
+                                                                         xkhh, &
+                                                                         xkhv
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme ),  INTENT(IN   )      ::      &    
+                                                                      defor11, &
+                                                                      defor22, &
+                                                                      defor12
+
+   REAL , DIMENSION( ims:ime, jms:jme), INTENT(IN   ) ::                msftx, &
+                                                                        msfty
+! LOCAL VARS
+
+   INTEGER :: i_start, i_end, j_start, j_end, ktf, i, j, k
+   REAL    :: deltas, tmp, pr, mlen_h, c_s
+
+   REAL, DIMENSION( its:ite , kts:kte , jts:jte )                 ::     def2
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf = min(kte,kde-1)
+
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+   IF ( config_flags%open_xs .or. config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%open_ys .or. config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+
+   pr=prandtl
+   c_s = config_flags%c_s
+
+   do j=j_start,j_end
+   do k=kts,ktf
+   do i=i_start,i_end
+      def2(i,k,j)=0.25*((defor11(i,k,j)-defor22(i,k,j))*(defor11(i,k,j)-defor22(i,k,j)))
+      tmp=0.25*(defor12(i  ,k,j)+defor12(i  ,k,j+1)+ &
+                defor12(i+1,k,j)+defor12(i+1,k,j+1))
+      def2(i,k,j)=def2(i,k,j)+tmp*tmp
+   enddo
+   enddo
+   enddo
+!
+      DO j = j_start, j_end
+      DO k = kts, ktf
+      DO i = i_start, i_end
+         mlen_h=sqrt(dx/msftx(i,j) * dy/msfty(i,j))
+         tmp=sqrt(def2(i,k,j))
+!        xkmh(i,k,j)=max(c_s*c_s*mlen_h*mlen_h*tmp, 1.0E-6*mlen_h*mlen_h )
+         xkmh(i,k,j)=c_s*c_s*mlen_h*mlen_h*tmp
+         xkmh(i,k,j)=min(xkmh(i,k,j), 10.*mlen_h )
+         xkmv(i,k,j)=0.
+         xkhh(i,k,j)=xkmh(i,k,j)/pr
+         xkhv(i,k,j)=0.
+      ENDDO
+      ENDDO
+      ENDDO
+
+END SUBROUTINE smag2d_km
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE tke_km( config_flags, xkmh, xkmv, xkhh, xkhv,         &
+                       bn2, tke, p8w, t8w, theta,                    &
+                       rdz, rdzw, dx,dy, dt, isotropic,              &
+                       mix_upper_bound, msftx, msfty,                &
+                       ids, ide, jds, jde, kds, kde,                 &
+                       ims, ime, jms, jme, kms, kme,                 &
+                       its, ite, jts, jte, kts, kte                  )
+
+! History:     Sep 2003   Changes by Jason Knievel and George Bryan, NCAR
+!              Oct 2001   Converted to mass core by Bill Skamarock, NCAR
+!              ...        ...
+
+! Purpose:     This routine calculates the exchange coefficients for the
+!              TKE turbulence parameterization.
+
+! References:  Klemp and Wilhelmson (JAS 1978)
+!              Chen and Dudhia (NCAR WRF physics report 2000)
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte
+
+    INTEGER, INTENT( IN )  :: isotropic
+    REAL, INTENT( IN )  &
+    :: dx, dy, dt
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: tke, p8w, t8w, theta, rdz, rdzw, bn2
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( INOUT )  &
+    :: xkmh, xkmv, xkhh, xkhv
+
+    REAL, INTENT( IN )  &
+    :: mix_upper_bound
+
+   REAL , DIMENSION( ims:ime, jms:jme), INTENT(IN   ) ::     msftx, &
+                                                             msfty
+! Local variables.
+
+    REAL, DIMENSION( its:ite, kts:kte, jts:jte )  &
+    :: l_scale
+
+    REAL, DIMENSION( its:ite, kts:kte, jts:jte )  &
+    :: dthrdn
+
+    REAL  &
+    :: deltas, tmp, mlen_s, mlen_h, mlen_v, tmpdz,  &
+       thetasfc, thetatop, minkx, pr_inv, pr_inv_h, pr_inv_v, c_k
+
+    INTEGER  &
+    :: i_start, i_end, j_start, j_end, ktf, i, j, k
+
+    REAL, PARAMETER :: tke_seed_value = 1.e-06
+    REAL            :: tke_seed
+    REAL, PARAMETER :: epsilon = 1.e-10
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    ktf     = MIN( kte, kde-1 )
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_xe .OR. config_flags%specified .OR. &
+         config_flags%nested) i_end   = MIN( ide-2, ite )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested) j_start = MAX( jds+1, jts )
+    IF ( config_flags%open_ye .OR. config_flags%specified .OR. &
+         config_flags%nested) j_end   = MIN( jde-2, jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+
+! in the absence of surface drag or a surface heat flux, there
+! is no way to generate tke without pre-existing tke.  Use
+! tke_seed if the drag and flux are off.
+
+    c_k = config_flags%c_k
+    tke_seed = tke_seed_value
+    if( (config_flags%tke_drag_coefficient .gt. epsilon) .or.  &
+        (config_flags%tke_heat_flux .gt. epsilon)  ) tke_seed = 0.
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf-1
+    DO i = i_start, i_end
+      tmpdz         = 1.0 / ( rdz(i,k+1,j) + rdz(i,k,j) )
+      dthrdn(i,k,j) = ( theta(i,k+1,j) - theta(i,k-1,j) ) / tmpdz
+    END DO
+    END DO
+    END DO
+
+    k = kts
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      tmpdz         = 1.0 / ( rdzw(i,k+1,j) + rdzw(i,k,j) )
+      thetasfc      = T8w(i,kts,j) / ( p8w(i,k,j) / p1000mb )**( R_d / Cp )
+      dthrdn(i,k,j) = ( theta(i,k+1,j) - thetasfc ) / tmpdz
+    END DO
+    END DO
+
+    k = ktf
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      tmpdz         = 1.0 / rdz(i,k,j) + 0.5 / rdzw(i,k,j)
+      thetatop      = T8w(i,kde,j) / ( p8w(i,kde,j) / p1000mb )**( R_d / Cp )
+      dthrdn(i,k,j) = ( thetatop - theta(i,k-1,j) ) / tmpdz
+    END DO
+    END DO
+
+    IF ( isotropic .EQ. 0 ) THEN
+      DO j = j_start, j_end
+      DO k = kts, ktf
+      DO i = i_start, i_end
+        mlen_h = SQRT( dx/msftx(i,j) * dy/msfty(i,j) )
+        tmp    = SQRT( MAX( tke(i,k,j), tke_seed ) )
+        deltas = 1.0 / rdzw(i,k,j)
+        mlen_v = deltas
+        IF ( dthrdn(i,k,j) .GT. 0.) THEN
+          mlen_s = 0.76 * tmp / ( ABS( g / theta(i,k,j) * dthrdn(i,k,j) ) )**0.5
+          mlen_v = MIN( mlen_v, mlen_s )
+        END IF
+        xkmh(i,k,j)  = MAX( c_k * tmp * mlen_h, 1.0E-6 * mlen_h * mlen_h )
+        xkmh(i,k,j)  = MIN( xkmh(i,k,j), mix_upper_bound * mlen_h *mlen_h / dt )
+        xkmv(i,k,j)  = MAX( c_k * tmp * mlen_v, 1.0E-6 * deltas * deltas )
+        xkmv(i,k,j)  = MIN( xkmv(i,k,j), mix_upper_bound * deltas *deltas / dt )
+        pr_inv_h     = 1./prandtl
+        pr_inv_v     = 1.0 + 2.0 * mlen_v / deltas
+        xkhh(i,k,j)  = xkmh(i,k,j) * pr_inv_h
+        xkhv(i,k,j)  = xkmv(i,k,j) * pr_inv_v
+      END DO
+      END DO
+      END DO
+    ELSE
+      CALL calc_l_scale( config_flags, tke, BN2, l_scale,      &
+                         i_start, i_end, ktf, j_start, j_end,  &
+                         dx, dy, rdzw, msftx, msfty,           &
+                         ids, ide, jds, jde, kds, kde,         &
+                         ims, ime, jms, jme, kms, kme,         &
+                         its, ite, jts, jte, kts, kte          )
+      DO j = j_start, j_end
+      DO k = kts, ktf
+      DO i = i_start, i_end
+        tmp          = SQRT( MAX( tke(i,k,j), tke_seed ) )
+        deltas       = ( dx/msftx(i,j) * dy/msfty(i,j) / rdzw(i,k,j) )**0.33333333
+        xkmh(i,k,j)  = c_k * tmp * l_scale(i,k,j)
+        xkmh(i,k,j)  = MIN( mix_upper_bound * dx/msftx(i,j) * dy/msfty(i,j) / dt,  xkmh(i,k,j) )
+        xkmv(i,k,j)  = c_k * tmp * l_scale(i,k,j)
+        xkmv(i,k,j)  = MIN( mix_upper_bound / rdzw(i,k,j) / rdzw(i,k,j) / dt ,  xkmv(i,k,j) )
+        pr_inv       = 1.0 + 2.0 * l_scale(i,k,j) / deltas
+        xkhh(i,k,j)  = MIN( mix_upper_bound * dx/msftx(i,j) * dy/msfty(i,j) / dt, xkmh(i,k,j) * pr_inv )
+        xkhv(i,k,j)  = MIN( mix_upper_bound / rdzw(i,k,j) / rdzw(i,k,j) / dt, xkmv(i,k,j) * pr_inv )
+      END DO
+      END DO
+      END DO
+    END IF
+
+    END SUBROUTINE tke_km
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE calc_l_scale( config_flags, tke, BN2, l_scale,      &
+                             i_start, i_end, ktf, j_start, j_end,  &
+                             dx, dy, rdzw, msftx, msfty,           &
+                             ids, ide, jds, jde, kds, kde,         &
+                             ims, ime, jms, jme, kms, kme,         &
+                             its, ite, jts, jte, kts, kte          )
+
+! History:     Sep 2003   Written by Bryan and Knievel, NCAR
+
+! Purpose:     This routine calculates the length scale, based on stability,
+!              for TKE parameterization of subgrid-scale turbulence.
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: i_start, i_end, ktf, j_start, j_end,  &
+       ids, ide, jds, jde, kds, kde,         &
+       ims, ime, jms, jme, kms, kme,         &
+       its, ite, jts, jte, kts, kte
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: BN2, tke, rdzw
+
+    REAL, INTENT( IN )  &
+    :: dx, dy
+
+    REAL, DIMENSION( its:ite, kts:kte, jts:jte ), INTENT( OUT )  &
+    :: l_scale
+
+    REAL , DIMENSION( ims:ime, jms:jme), INTENT(IN   ) ::     msftx, &
+                                                              msfty
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k
+
+    REAL  &
+    :: deltas, tmp
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      deltas         = ( dx/msftx(i,j) * dy/msfty(i,j) / rdzw(i,k,j) )**0.33333333
+      l_scale(i,k,j) = deltas
+
+      IF ( BN2(i,k,j) .gt. 1.0e-6 ) THEN
+        tmp            = SQRT( MAX( tke(i,k,j), 1.0e-6 ) )
+        l_scale(i,k,j) = 0.76 * tmp / SQRT( BN2(i,k,j) )
+        l_scale(i,k,j) = MIN( l_scale(i,k,j), deltas)
+        l_scale(i,k,j) = MAX( l_scale(i,k,j), 0.001 * deltas )
+      END IF
+
+    END DO
+    END DO
+    END DO
+
+    END SUBROUTINE calc_l_scale
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE horizontal_diffusion_2 ( rt_tendf, ru_tendf, rv_tendf, rw_tendf,    &
+                                    tke_tendf,                                 &
+                                    moist_tendf, n_moist,                      &
+                                    chem_tendf, n_chem,                        &
+                                    scalar_tendf, n_scalar,                    &
+                                    thp, theta, mu, tke, config_flags,         &
+                                    defor11, defor22, defor12,                 &
+                                    defor13, defor23, div,                     &
+                                    moist, chem, scalar,                       &
+                                    msfux, msfuy, msfvx, msfvy,                &
+                                    msftx, msfty, xkmh, xkhh,km_opt,           &
+                                    rdx, rdy, rdz, rdzw, fnm, fnp,             &
+                                    cf1, cf2, cf3, zx, zy, dn, dnw,            &
+                                    ids, ide, jds, jde, kds, kde,              &
+                                    ims, ime, jms, jme, kms, kme,              &
+                                    its, ite, jts, jte, kts, kte               )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,        INTENT(IN   ) ::        ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+
+   INTEGER ,        INTENT(IN   ) ::        n_moist, n_chem, n_scalar, km_opt
+
+   REAL ,           INTENT(IN   ) ::        cf1, cf2, cf3
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnm
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnp
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: dnw
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::  dn
+
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::   msfux, &
+                                                                    msfuy, &
+                                                                    msfvx, &
+                                                                    msfvy, &
+                                                                    msftx, &
+                                                                    msfty, &
+                                                                      mu
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::rt_tendf,&
+                                                                 ru_tendf,&
+                                                                 rv_tendf,&
+                                                                 rw_tendf,&
+                                                                tke_tendf
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_moist),                 &
+          INTENT(INOUT) ::                                    moist_tendf
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_chem),                  &
+          INTENT(INOUT) ::                                     chem_tendf
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_scalar),                &
+          INTENT(INOUT) ::                                   scalar_tendf
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_moist),                 &
+          INTENT(IN   ) ::                                          moist
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_chem),                  &
+          INTENT(IN   ) ::                                          chem 
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_scalar) ,               &
+          INTENT(IN   ) ::                                         scalar 
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(IN   ) ::defor11, &
+                                                                 defor22, &
+                                                                 defor12, &
+                                                                 defor13, &
+                                                                 defor23, &
+                                                                     div, &
+                                                                    xkmh, &
+                                                                    xkhh, &
+                                                                      zx, &
+                                                                      zy, &
+                                                                   theta, &
+                                                                     thp, &
+                                                                     tke, &
+                                                                     rdz, &
+                                                                    rdzw
+
+
+   REAL ,                                        INTENT(IN   ) ::    rdx, &
+                                                                     rdy
+
+! LOCAL VARS
+   
+   INTEGER :: im, ic, is
+
+!  REAL , DIMENSION(its-1:ite+1, kts:kte, jts-1:jte+1)       ::     xkhh
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Call diffusion subroutines.
+
+    CALL horizontal_diffusion_u_2( ru_tendf, mu, config_flags,             &
+                                   defor11, defor12, div,                  &
+                                   tke(ims,kms,jms),                       &
+                                   msfux, msfuy, xkmh, rdx, rdy, fnm, fnp, &
+                                   zx, zy, rdzw,                           &
+                                   ids, ide, jds, jde, kds, kde,           &
+                                   ims, ime, jms, jme, kms, kme,           &
+                                   its, ite, jts, jte, kts, kte           )
+
+    CALL horizontal_diffusion_v_2( rv_tendf, mu, config_flags,             &
+                                   defor12, defor22, div,                  &
+                                   tke(ims,kms,jms),                       &
+                                   msfvx, msfvy, xkmh, rdx, rdy, fnm, fnp, &
+                                   zx, zy, rdzw,                           &
+                                   ids, ide, jds, jde, kds, kde,           &
+                                   ims, ime, jms, jme, kms, kme,           &
+                                   its, ite, jts, jte, kts, kte           )
+
+    CALL horizontal_diffusion_w_2( rw_tendf, mu, config_flags,             &
+                                   defor13, defor23, div,                  &
+                                   tke(ims,kms,jms),                       &
+                                   msftx, msfty, xkmh, rdx, rdy, fnm, fnp, &
+                                   zx, zy, rdz,                            &
+                                   ids, ide, jds, jde, kds, kde,           &
+                                   ims, ime, jms, jme, kms, kme,           &
+                                   its, ite, jts, jte, kts, kte           )
+
+    CALL horizontal_diffusion_s  ( rt_tendf, mu, config_flags, thp,        &
+                                   msftx, msfty, msfux, msfuy,             &
+                                   msfvx, msfvy, xkhh, rdx, rdy,           &
+                                   fnm, fnp, cf1, cf2, cf3,                &
+                                   zx, zy, rdz, rdzw, dnw, dn,             &
+                                   .false.,                                &
+                                   ids, ide, jds, jde, kds, kde,           &
+                                   ims, ime, jms, jme, kms, kme,           &
+                                   its, ite, jts, jte, kts, kte           )
+
+    IF (km_opt .eq. 2)                                                     &
+    CALL horizontal_diffusion_s  ( tke_tendf(ims,kms,jms),                 &
+                                   mu, config_flags,                       &
+                                   tke(ims,kms,jms),                       &
+                                   msftx, msfty, msfux, msfuy,             &
+                                   msfvx, msfvy, xkhh, rdx, rdy,           &
+                                   fnm, fnp, cf1, cf2, cf3,                &
+                                   zx, zy, rdz, rdzw, dnw, dn,             &
+                                   .true.,                                 &
+                                   ids, ide, jds, jde, kds, kde,           &
+                                   ims, ime, jms, jme, kms, kme,           &
+                                   its, ite, jts, jte, kts, kte           )
+
+    IF (n_moist .ge. PARAM_FIRST_SCALAR) THEN 
+
+      moist_loop: do im = PARAM_FIRST_SCALAR, n_moist
+
+          CALL horizontal_diffusion_s( moist_tendf(ims,kms,jms,im),       &
+                                       mu, config_flags,                  &
+                                       moist(ims,kms,jms,im),             &
+                                       msftx, msfty, msfux, msfuy,        &
+                                       msfvx, msfvy, xkhh, rdx, rdy,      &
+                                       fnm, fnp, cf1, cf2, cf3,           &
+                                       zx, zy, rdz, rdzw, dnw, dn,        &
+                                       .false.,                           &
+                                       ids, ide, jds, jde, kds, kde,      &
+                                       ims, ime, jms, jme, kms, kme,      &
+                                       its, ite, jts, jte, kts, kte      )
+
+      ENDDO moist_loop
+
+    ENDIF
+
+    IF (n_chem .ge. PARAM_FIRST_SCALAR) THEN 
+
+      chem_loop: do ic = PARAM_FIRST_SCALAR, n_chem
+
+        CALL horizontal_diffusion_s( chem_tendf(ims,kms,jms,ic),     &
+                                     mu, config_flags,                 &
+                                     chem(ims,kms,jms,ic),           &
+                                     msftx, msfty, msfux, msfuy,       &
+                                     msfvx, msfvy, xkhh, rdx, rdy,     &
+                                     fnm, fnp, cf1, cf2, cf3,          &
+                                     zx, zy, rdz, rdzw, dnw, dn,       &
+                                     .false.,                          &
+                                     ids, ide, jds, jde, kds, kde,     &
+                                     ims, ime, jms, jme, kms, kme,     &
+                                     its, ite, jts, jte, kts, kte     )
+
+      ENDDO chem_loop
+
+    ENDIF
+    IF (n_scalar .ge. PARAM_FIRST_SCALAR) THEN 
+
+      scalar_loop: do is = PARAM_FIRST_SCALAR, n_scalar
+
+        CALL horizontal_diffusion_s( scalar_tendf(ims,kms,jms,is),     &
+                                     mu, config_flags,                 &
+                                     scalar(ims,kms,jms,is),           &
+                                     msftx, msfty, msfux, msfuy,       &
+                                     msfvx, msfvy, xkhh, rdx, rdy,     &
+                                     fnm, fnp, cf1, cf2, cf3,          &
+                                     zx, zy, rdz, rdzw, dnw, dn,       &
+                                     .false.,                          &
+                                     ids, ide, jds, jde, kds, kde,     &
+                                     ims, ime, jms, jme, kms, kme,     &
+                                     its, ite, jts, jte, kts, kte     )
+
+      ENDDO scalar_loop
+
+    ENDIF
+
+    END SUBROUTINE horizontal_diffusion_2
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE horizontal_diffusion_u_2( tendency, mu, config_flags,          &
+                                     defor11, defor12, div, tke,          &
+                                     msfux, msfuy,                        &
+                                     xkmh, rdx, rdy, fnm, fnp,            &
+                                     zx, zy, rdzw,                        &
+                                     ids, ide, jds, jde, kds, kde,        &
+                                     ims, ime, jms, jme, kms, kme,        &
+                                     its, ite, jts, jte, kts, kte        )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,        INTENT(IN   ) ::        ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnm
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnp
+
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::  msfux, &
+                                                                   msfuy, &
+                                                                      mu
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::tendency
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(IN   ) ::   rdzw  
+                                                                    
+ 
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(IN   ) ::defor11, &
+                                                                 defor12, &
+                                                                     div, &   
+                                                                     tke, &   
+                                                                    xkmh, &
+                                                                      zx, &
+                                                                      zy
+
+   REAL ,                                        INTENT(IN   ) ::    rdx, &
+                                                                     rdy
+! Local data
+   
+   INTEGER :: i, j, k, ktf
+
+   INTEGER :: i_start, i_end, j_start, j_end
+   INTEGER :: is_ext,ie_ext,js_ext,je_ext  
+
+   REAL , DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1)    :: titau1avg, &
+                                                              titau2avg, &
+                                                                 titau1, & 
+                                                                 titau2, & 
+                                                                 xkxavg, & 
+                                                                  rravg
+! new
+!                                                                 zxavg, & 
+!                                                                 zyavg
+   REAL :: mrdx, mrdy, rcoup
+
+   REAL :: tmpzy, tmpzeta_z
+
+   REAL :: term1, term2, term3
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf=MIN(kte,kde-1)
+ 
+!-----------------------------------------------------------------------
+! u :   p (.), u(|), w(-)
+!       
+!       p  u  p  u                                  u     u
+!
+! p  |  .  |  .  |  .  |   k+1                |  .  |  .  |  .  |   k+1
+!           
+! w     - 13  -     -      k+1                     13               k+1 
+!
+! p  |  11 O 11  |  .  |   k                  |  12 O 12  |  .  |   k      
+!
+! w     - 13  -     -      k                       13               k  
+!
+! p  |  .  |  .  |  .  |   k-1                |  .  |  .  |  .  |   k-1
+!
+!      i-1 i  i i+1                          j-1 j  j j+1 j+1         
+!
+
+   i_start = its
+   i_end   = ite
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+   IF ( config_flags%open_xs .or. config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-1,ite)
+   IF ( config_flags%open_ys .or. config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+! titau1 = titau11 
+   is_ext=1
+   ie_ext=0
+   js_ext=0
+   je_ext=0
+   CALL cal_titau_11_22_33( config_flags, titau1,            &
+                            mu, tke, xkmh, defor11,          &
+                            is_ext, ie_ext, js_ext, je_ext,  &
+                            ids, ide, jds, jde, kds, kde,    &
+                            ims, ime, jms, jme, kms, kme,    &
+                            its, ite, jts, jte, kts, kte     )
+
+! titau2 = titau12
+   is_ext=0
+   ie_ext=0
+   js_ext=0
+   je_ext=1
+   CALL cal_titau_12_21( config_flags, titau2,            &
+                         mu, xkmh, defor12,               &
+                         is_ext, ie_ext, js_ext, je_ext,  &
+                         ids, ide, jds, jde, kds, kde,    &
+                         ims, ime, jms, jme, kms, kme,    &
+                         its, ite, jts, jte, kts, kte     )
+
+! titau1avg = titau11avg
+! titau2avg = titau12avg 
+
+   DO j = j_start, j_end
+   DO k = kts+1,ktf
+   DO i = i_start, i_end
+      titau1avg(i,k,j)=0.5*(fnm(k)*(titau1(i-1,k  ,j)+titau1(i,k  ,j))+ &
+                            fnp(k)*(titau1(i-1,k-1,j)+titau1(i,k-1,j)))
+      titau2avg(i,k,j)=0.5*(fnm(k)*(titau2(i,k  ,j+1)+titau2(i,k  ,j))+ &
+                            fnp(k)*(titau2(i,k-1,j+1)+titau2(i,k-1,j)))
+      tmpzy = 0.25*( zy(i-1,k,j  )+zy(i,k,j  )+ &
+                     zy(i-1,k,j+1)+zy(i,k,j+1)  )
+!      tmpzeta_z = 0.5*(zeta_z(i,j)+zeta_z(i-1,j))
+!      titau1avg(i,k,j)=titau1avg(i,k,j)*zx(i,k,j)*tmpzeta_z
+!      titau2avg(i,k,j)=titau2avg(i,k,j)*tmpzy    *tmpzeta_z
+
+      titau1avg(i,k,j)=titau1avg(i,k,j)*zx(i,k,j)
+      titau2avg(i,k,j)=titau2avg(i,k,j)*tmpzy    
+
+   ENDDO
+   ENDDO
+   ENDDO
+!
+   DO j = j_start, j_end
+   DO i = i_start, i_end
+      titau1avg(i,kts,j)=0.
+      titau1avg(i,ktf+1,j)=0.
+      titau2avg(i,kts,j)=0.
+      titau2avg(i,ktf+1,j)=0.
+   ENDDO
+   ENDDO
+!
+   DO j = j_start, j_end
+   DO k = kts,ktf
+   DO i = i_start, i_end
+
+      mrdx=msfux(i,j)*rdx
+      mrdy=msfuy(i,j)*rdy
+      tendency(i,k,j)=tendency(i,k,j)-                                    &
+           (mrdx*(titau1(i,k,j  )-titau1(i-1,k,j))+                       &
+            mrdy*(titau2(i,k,j+1)-titau2(i,k,j  ))-                       &
+            msfuy(i,j)*rdzw(i,k,j)*((titau1avg(i,k+1,j)-titau1avg(i,k,j))+ &
+                                   (titau2avg(i,k+1,j)-titau2avg(i,k,j))  &
+                                  )                                      )
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE horizontal_diffusion_u_2
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE horizontal_diffusion_v_2( tendency, mu, config_flags,          &
+                                     defor12, defor22, div, tke,          &
+                                     msfvx, msfvy,                        &
+                                     xkmh, rdx, rdy, fnm, fnp,            &
+                                     zx, zy, rdzw,                        &
+                                     ids, ide, jds, jde, kds, kde,        &
+                                     ims, ime, jms, jme, kms, kme,        &
+                                     its, ite, jts, jte, kts, kte        )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,        INTENT(IN   ) ::        ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnm
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnp
+
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::  msfvx, &
+                                                                   msfvy, &
+                                                                      mu
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: tendency
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(IN   ) ::defor12, &
+                                                                 defor22, &
+                                                                     div, &
+                                                                     tke, &
+                                                                    xkmh, &
+                                                                      zx, &
+                                                                      zy, &
+                                                                    rdzw
+
+   REAL ,                                        INTENT(IN   ) ::    rdx, &
+                                                                     rdy
+
+! Local data
+
+   INTEGER :: i, j, k, ktf
+
+   INTEGER :: i_start, i_end, j_start, j_end
+   INTEGER :: is_ext,ie_ext,js_ext,je_ext  
+
+   REAL , DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1)    :: titau1avg, &
+                                                              titau2avg, &
+                                                                 titau1, &
+                                                                 titau2, &
+                                                                 xkxavg, &
+                                                                  rravg
+! new
+!                                                                 zxavg, &
+!                                                                 zyavg
+
+   REAL :: mrdx, mrdy, rcoup
+
+   REAL :: tmpzx, tmpzeta_z
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf=MIN(kte,kde-1)
+ 
+!-----------------------------------------------------------------------
+! v :   p (.), v(+), w(-)
+!       
+!       p  v  p  v                                  v     v
+!
+! p  +  .  +  .  +  .  +   k+1                +  .  +  .  +  .  +   k+1
+!           
+! w     - 23  -     -      k+1                     23               k+1 
+!
+! p  +  22 O 22  +  .  +   k                  +  21 O 21  +  .  +   k      
+!
+! w     - 23  -     -      k                       23               k  
+!
+! p  +  .  +  .  +  .  +   k-1                +  .  +  .  +  .  +   k-1
+!
+!      j-1 j  j j+1                          i-1 i  i i+1 i+1         
+!
+
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = jte
+
+   IF ( config_flags%open_xs .or. config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%open_ys .or. config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-1,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN(ite,ide-1)
+
+! titau1 = titau21
+   is_ext=0
+   ie_ext=1
+   js_ext=0
+   je_ext=0
+   CALL cal_titau_12_21( config_flags, titau1,          &
+                         mu, xkmh, defor12,             &
+                         is_ext,ie_ext,js_ext,je_ext,   &
+                         ids, ide, jds, jde, kds, kde,  &
+                         ims, ime, jms, jme, kms, kme,  &
+                         its, ite, jts, jte, kts, kte   )
+
+! titau2 = titau22
+   is_ext=0
+   ie_ext=0
+   js_ext=1
+   je_ext=0
+   CALL cal_titau_11_22_33( config_flags, titau2,           &
+                            mu, tke, xkmh, defor22,         &
+                            is_ext, ie_ext, js_ext, je_ext, &
+                            ids, ide, jds, jde, kds, kde,   &
+                            ims, ime, jms, jme, kms, kme,   &
+                            its, ite, jts, jte, kts, kte    )
+
+   DO j = j_start, j_end
+   DO k = kts+1,ktf
+   DO i = i_start, i_end
+      titau1avg(i,k,j)=0.5*(fnm(k)*(titau1(i+1,k  ,j)+titau1(i,k  ,j))+ &
+                            fnp(k)*(titau1(i+1,k-1,j)+titau1(i,k-1,j)))
+      titau2avg(i,k,j)=0.5*(fnm(k)*(titau2(i,k  ,j-1)+titau2(i,k  ,j))+ &
+                            fnp(k)*(titau2(i,k-1,j-1)+titau2(i,k-1,j)))
+
+      tmpzx = 0.25*( zx(i,k,j  )+zx(i+1,k,j  )+ &
+                     zx(i,k,j-1)+zx(i+1,k,j-1)  )
+
+
+      titau1avg(i,k,j)=titau1avg(i,k,j)*tmpzx
+      titau2avg(i,k,j)=titau2avg(i,k,j)*zy(i,k,j)
+
+
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end
+   DO i = i_start, i_end
+      titau1avg(i,kts,j)=0.
+      titau1avg(i,ktf+1,j)=0.
+      titau2avg(i,kts,j)=0.
+      titau2avg(i,ktf+1,j)=0.
+   ENDDO
+   ENDDO
+!
+   DO j = j_start, j_end
+   DO k = kts,ktf
+   DO i = i_start, i_end
+       
+      mrdx=msfvx(i,j)*rdx
+      mrdy=msfvy(i,j)*rdy
+      tendency(i,k,j)=tendency(i,k,j)-                                    &
+           (mrdy*(titau2(i  ,k,j)-titau2(i,k,j-1))+                       &
+            mrdx*(titau1(i+1,k,j)-titau1(i,k,j  ))-                       &
+           msfvy(i,j)*rdzw(i,k,j)*((titau1avg(i,k+1,j)-titau1avg(i,k,j))+ &
+                                   (titau2avg(i,k+1,j)-titau2avg(i,k,j))  &
+                                )			                  &
+           )
+
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE horizontal_diffusion_v_2
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE horizontal_diffusion_w_2( tendency, mu, config_flags,          &
+                                     defor13, defor23, div, tke,          &
+                                     msftx, msfty,                        &
+                                     xkmh, rdx, rdy, fnm, fnp,            &
+                                     zx, zy, rdz,                         &
+                                     ids, ide, jds, jde, kds, kde,        &
+                                     ims, ime, jms, jme, kms, kme,        &
+                                     its, ite, jts, jte, kts, kte        )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,        INTENT(IN   ) ::        ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnm
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnp
+
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::  msftx, &
+                                                                   msfty, &
+                                                                      mu
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: tendency
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(IN   ) ::defor13, &
+                                                                 defor23, &
+                                                                     div, &
+                                                                     tke, &
+                                                                    xkmh, &
+                                                                      zx, &
+                                                                      zy, &
+                                                                     rdz
+
+   REAL ,                                        INTENT(IN   ) ::    rdx, &
+                                                                     rdy
+
+! Local data
+
+   INTEGER :: i, j, k, ktf
+
+   INTEGER :: i_start, i_end, j_start, j_end
+   INTEGER :: is_ext,ie_ext,js_ext,je_ext  
+
+   REAL , DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1)    :: titau1avg, &
+                                                              titau2avg, &
+                                                                 titau1, &
+                                                                 titau2, &
+                                                                 xkxavg, &
+                                                                  rravg
+! new
+!                                                                 zxavg, &
+!                                                                 zyavg
+
+   REAL :: mrdx, mrdy, rcoup
+
+   REAL :: tmpzx, tmpzy, tmpzeta_z
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf=MIN(kte,kde-1)
+ 
+!-----------------------------------------------------------------------
+! w :   p (.), u(|), v(+), w(-)
+!       
+!       p  u  p  u                               p  v  p  v 
+!
+! w     -     -     -      k+1             w     -     -     -      k+1 
+!
+! p     .  | 33  |  .      k               p     .  + 33  +  .      k      
+!
+! w     -  31 O 31  -      k               w     -  32 O 32  -      k   
+!
+! p     .  | 33  |  .      k-1             p     .  | 33  |  .      k-1 
+!
+! w     -     -     -      k-1             w     -     -     -      k-1 
+!
+!      i-1 i  i i+1                             j-1 j  j j+1         
+!
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+   IF ( config_flags%open_xs .or. config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%open_ys .or. config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN(ite,ide-1)
+
+! titau1 = titau31
+   is_ext=0
+   ie_ext=1
+   js_ext=0
+   je_ext=0
+   CALL cal_titau_13_31( config_flags, titau1, defor13,   &
+                         mu, xkmh, fnm, fnp,              &
+                         is_ext, ie_ext, js_ext, je_ext,  &
+                         ids, ide, jds, jde, kds, kde,    &
+                         ims, ime, jms, jme, kms, kme,    &
+                         its, ite, jts, jte, kts, kte     )
+
+! titau2 = titau32
+   is_ext=0
+   ie_ext=0
+   js_ext=0
+   je_ext=1
+   CALL cal_titau_23_32( config_flags, titau2, defor23,   &
+                         mu, xkmh, fnm, fnp,              &
+                         is_ext, ie_ext, js_ext, je_ext,  &
+                         ids, ide, jds, jde, kds, kde,    &
+                         ims, ime, jms, jme, kms, kme,    &
+                         its, ite, jts, jte, kts, kte     )
+
+! titau1avg = titau31avg * zx * zeta_z = titau13avg * zx * zeta_z
+! titau2avg = titau32avg * zy * zeta_z = titau23avg * zy * zeta_z
+
+   DO j = j_start, j_end
+   DO k = kts,ktf
+   DO i = i_start, i_end
+      titau1avg(i,k,j)=0.25*(titau1(i+1,k+1,j)+titau1(i,k+1,j)+ &
+                             titau1(i+1,k  ,j)+titau1(i,k  ,j))
+      titau2avg(i,k,j)=0.25*(titau2(i,k+1,j+1)+titau2(i,k+1,j)+ &
+                             titau2(i,k  ,j+1)+titau2(i,k  ,j))
+! new
+      tmpzx  =0.25*( zx(i,k  ,j)+zx(i+1,k  ,j)+ &
+                     zx(i,k+1,j)+zx(i+1,k+1,j)  )
+      tmpzy  =0.25*( zy(i,k  ,j)+zy(i,k  ,j+1)+ &
+                     zy(i,k+1,j)+zy(i,k+1,j+1)  )
+
+      titau1avg(i,k,j)=titau1avg(i,k,j)*tmpzx
+      titau2avg(i,k,j)=titau2avg(i,k,j)*tmpzy
+!      titau1avg(i,k,j)=titau1avg(i,k,j)*tmpzx*zeta_z(i,j)
+!      titau2avg(i,k,j)=titau2avg(i,k,j)*tmpzy*zeta_z(i,j)
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end
+   DO i = i_start, i_end
+      titau1avg(i,ktf+1,j)=0.
+      titau2avg(i,ktf+1,j)=0.
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end
+   DO k = kts+1,ktf
+   DO i = i_start, i_end
+
+      mrdx=msftx(i,j)*rdx
+      mrdy=msfty(i,j)*rdy
+
+      tendency(i,k,j)=tendency(i,k,j)-                                 &
+           (mrdx*(titau1(i+1,k,j)-titau1(i,k,j))+                      &
+            mrdy*(titau2(i,k,j+1)-titau2(i,k,j))-                      &
+           msfty(i,j)*rdz(i,k,j)*(titau1avg(i,k,j)-titau1avg(i,k-1,j)+ &
+                                  titau2avg(i,k,j)-titau2avg(i,k-1,j)  &
+                               )				       &
+           )
+!            msft(i,j)/dn(k)*(titau1avg(i,k,j)-titau1avg(i,k-1,j)+ &
+!                                titau2avg(i,k,j)-titau2avg(i,k-1,j)  &
+!                               )				     &
+!           )
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE horizontal_diffusion_w_2
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE horizontal_diffusion_s (tendency, mu, config_flags, var,       &
+                                   msftx, msfty, msfux, msfuy,            &
+                                   msfvx, msfvy, xkhh, rdx, rdy,          &
+                                   fnm, fnp, cf1, cf2, cf3,               &
+                                   zx, zy, rdz, rdzw, dnw, dn,            &
+                                   doing_tke,                             &
+                                   ids, ide, jds, jde, kds, kde,          &
+                                   ims, ime, jms, jme, kms, kme,          &
+                                   its, ite, jts, jte, kts, kte           )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,        INTENT(IN   ) ::        ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+
+   LOGICAL,         INTENT(IN   ) ::        doing_tke
+
+   REAL , INTENT(IN   )           ::        cf1, cf2, cf3
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnm
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnp
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::     dn
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    dnw
+
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::   msfux
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::   msfuy
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::   msfvx
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::   msfvy
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::   msftx
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::   msfty
+
+   REAL , DIMENSION( ims:ime, jms:jme) ,         INTENT(IN   ) ::   mu
+
+!  REAL , DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1),                 &
+!         INTENT(IN   ) ::                                         xkhh
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: tendency
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(IN   ) ::         &
+                                                                    xkhh, &
+                                                                     rdz, &
+                                                                     rdzw
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(IN   ) ::    var, &
+                                                                      zx, &
+                                                                      zy
+
+   REAL ,                                        INTENT(IN   ) ::    rdx, &
+                                                                     rdy
+
+! Local data
+
+   INTEGER :: i, j, k, ktf
+
+   INTEGER :: i_start, i_end, j_start, j_end
+
+   REAL , DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1)    ::     H1avg, &
+                                                                  H2avg, &
+                                                                     H1, &
+                                                                     H2, &
+                                                                 xkxavg
+! new
+!                                                                 zxavg, &
+!                                                                 zyavg
+
+   REAL , DIMENSION( its:ite, kts:kte, jts:jte)            ::  tmptendf
+
+   REAL    :: mrdx, mrdy, rcoup
+   REAL    :: tmpzx, tmpzy, tmpzeta_z, rdzu, rdzv
+   INTEGER :: ktes1,ktes2
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf=MIN(kte,kde-1)
+ 
+!-----------------------------------------------------------------------
+! scalars:   t (.), u(|), v(+), w(-)
+!       
+!       t  u  t  u                               t  v  t  v 
+!
+! w     -     3     -      k+1             w     -     3     -      k+1 
+!
+! t     .  1  O  1  .      k               t     .  2  O  2  .      k      
+!
+! w     -     3     -      k               w     -     3     -      k   
+!
+! t     .  |  .  |  .      k-1             t     .  +  .  +  .      k-1 
+!
+! w     -     -     -      k-1             w     -     -     -      k-1 
+!
+! t    i-1 i  i i+1                             j-1 j  j j+1         
+!
+
+   ktes1=kte-1
+   ktes2=kte-2
+
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+   IF ( config_flags%open_xs .or. config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%open_ys .or. config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN(ite,ide-1)
+
+! diffusion of the TKE needs mutiple 2
+
+   IF ( doing_tke ) THEN
+      DO j = j_start, j_end
+      DO k = kts,ktf
+      DO i = i_start, i_end
+         tmptendf(i,k,j)=tendency(i,k,j)
+      ENDDO
+      ENDDO
+      ENDDO
+   ENDIF
+
+! H1 = partial var over partial x
+
+   DO j = j_start, j_end
+   DO k = kts, ktf
+   DO i = i_start, i_end + 1
+! new
+!     zxavg(i,k,j) =0.5*( zx(i-1,k,j)+ zx(i,k,j))
+      xkxavg(i,k,j)=0.5*(xkhh(i-1,k,j)+xkhh(i,k,j))
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end
+   DO k = kts+1, ktf
+   DO i = i_start, i_end + 1
+      H1avg(i,k,j)=0.5*(fnm(k)*(var(i-1,k  ,j)+var(i,k  ,j))+  &
+                        fnp(k)*(var(i-1,k-1,j)+var(i,k-1,j)))
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end
+   DO i = i_start, i_end + 1
+      H1avg(i,kts  ,j)=0.5*(cf1*var(i  ,1,j)+cf2*var(i  ,2,j)+ &
+                            cf3*var(i  ,3,j)+cf1*var(i-1,1,j)+  &
+                            cf2*var(i-1,2,j)+cf3*var(i-1,3,j))
+      H1avg(i,ktf+1,j)=0.5*(var(i,ktes1,j)+(var(i,ktes1,j)- &
+                            var(i,ktes2,j))*0.5*dnw(ktes1)/dn(ktes1)+ &
+                            var(i-1,ktes1,j)+(var(i-1,ktes1,j)- &
+                            var(i-1,ktes2,j))*0.5*dnw(ktes1)/dn(ktes1))
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end
+   DO k = kts, ktf
+   DO i = i_start, i_end + 1
+! new
+      tmpzx = 0.5*( zx(i,k,j)+ zx(i,k+1,j))
+      rdzu = 2./(1./rdzw(i,k,j) + 1./rdzw(i-1,k,j))
+      H1(i,k,j)=-msfuy(i,j)*xkxavg(i,k,j)*(                      &
+                 rdx*(var(i,k,j)-var(i-1,k,j)) - tmpzx*         &
+                     (H1avg(i,k+1,j)-H1avg(i,k,j))*rdzu )
+
+!      tmpzeta_z = 0.5*(zeta_z(i,j)+zeta_z(i-1,j))
+!      H1(i,k,j)=-msfuy(i,j)*xkxavg(i,k,j)*(                         &
+!                 rdx*(var(i,k,j)-var(i-1,k,j)) - tmpzx*tmpzeta_z*  &
+!                     (H1avg(i,k+1,j)-H1avg(i,k,j))/dnw(k))
+   ENDDO
+   ENDDO
+   ENDDO
+
+! H2 = partial var over partial y
+
+   DO j = j_start, j_end + 1
+   DO k = kts, ktf
+   DO i = i_start, i_end
+! new
+!     zyavg(i,k,j) =0.5*( zy(i,k,j-1)+ zy(i,k,j))
+      xkxavg(i,k,j)=0.5*(xkhh(i,k,j-1)+xkhh(i,k,j))
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end + 1
+   DO k = kts+1,   ktf
+   DO i = i_start, i_end
+! new
+      H2avg(i,k,j)=0.5*(fnm(k)*(var(i,k  ,j-1)+var(i,k  ,j))+  &
+                        fnp(k)*(var(i,k-1,j-1)+var(i,k-1,j)))
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end + 1
+   DO i = i_start, i_end
+      H2avg(i,kts  ,j)=0.5*(cf1*var(i,1,j  )+cf2*var(i  ,2,j)+ &
+                            cf3*var(i,3,j  )+cf1*var(i,1,j-1)+  &
+                            cf2*var(i,2,j-1)+cf3*var(i,3,j-1))
+      H2avg(i,ktf+1,j)=0.5*(var(i,ktes1,j)+(var(i,ktes1,j)- &
+                            var(i,ktes2,j))*0.5*dnw(ktes1)/dn(ktes1)+ &
+                            var(i,ktes1,j-1)+(var(i,ktes1,j-1)- &
+                            var(i,ktes2,j-1))*0.5*dnw(ktes1)/dn(ktes1))
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end + 1
+   DO k = kts, ktf
+   DO i = i_start, i_end
+! new
+      tmpzy = 0.5*( zy(i,k,j)+ zy(i,k+1,j))
+      rdzv = 2./(1./rdzw(i,k,j) + 1./rdzw(i,k,j-1))
+      H2(i,k,j)=-msfvy(i,j)*xkxavg(i,k,j)*(                       &
+                 rdy*(var(i,k,j)-var(i,k,j-1)) - tmpzy*          &
+                     (H2avg(i ,k+1,j)-H2avg(i,k,j))*rdzv)
+
+!      tmpzeta_z = 0.5*(zeta_z(i,j)+zeta_z(i,j-1))
+!      H2(i,k,j)=-msfvy(i,j)*xkxavg(i,k,j)*(                         &
+!                 rdy*(var(i,k,j)-var(i,k,j-1)) - tmpzy*tmpzeta_z*  &
+!                     (H2avg(i ,k+1,j)-H2avg(i,k,j))/dnw(k))
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end
+   DO k = kts+1, ktf
+   DO i = i_start, i_end
+      H1avg(i,k,j)=0.5*(fnm(k)*(H1(i+1,k  ,j)+H1(i,k  ,j))+  &
+                        fnp(k)*(H1(i+1,k-1,j)+H1(i,k-1,j)))
+      H2avg(i,k,j)=0.5*(fnm(k)*(H2(i,k  ,j+1)+H2(i,k  ,j))+  &
+                        fnp(k)*(H2(i,k-1,j+1)+H2(i,k-1,j)))
+! new
+!     zxavg(i,k,j)=fnm(k)*zx(i,k,j)+fnp(k)*zx(i,k-1,j)
+!     zyavg(i,k,j)=fnm(k)*zy(i,k,j)+fnp(k)*zy(i,k-1,j)
+
+! H1avg(i,k,j)=zx*H1avg*zeta_z
+! H2avg(i,k,j)=zy*H2avg*zeta_z
+
+      tmpzx = 0.5*( zx(i,k,j)+ zx(i+1,k,j  ))
+      tmpzy = 0.5*( zy(i,k,j)+ zy(i  ,k,j+1))
+
+      H1avg(i,k,j)=H1avg(i,k,j)*tmpzx
+      H2avg(i,k,j)=H2avg(i,k,j)*tmpzy
+
+!      H1avg(i,k,j)=H1avg(i,k,j)*tmpzx*zeta_z(i,j)
+!      H2avg(i,k,j)=H2avg(i,k,j)*tmpzy*zeta_z(i,j)
+   ENDDO
+   ENDDO
+   ENDDO
+ 
+   DO j = j_start, j_end
+   DO i = i_start, i_end
+      H1avg(i,kts  ,j)=0.
+      H1avg(i,ktf+1,j)=0.
+      H2avg(i,kts  ,j)=0.
+      H2avg(i,ktf+1,j)=0.
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end
+   DO k = kts,ktf
+   DO i = i_start, i_end
+
+      mrdx=msftx(i,j)*rdx
+      mrdy=msfty(i,j)*rdy
+
+      tendency(i,k,j)=tendency(i,k,j)-                      &
+           (mrdx*0.5*((mu(i+1,j)+mu(i,j))*H1(i+1,k,j)-      &
+                      (mu(i-1,j)+mu(i,j))*H1(i  ,k,j))+     &
+            mrdy*0.5*((mu(i,j+1)+mu(i,j))*H2(i,k,j+1)-      &
+                      (mu(i,j-1)+mu(i,j))*H2(i,k,j  ))-     &
+           msfty(i,j)*mu(i,j)*(H1avg(i,k+1,j)-H1avg(i,k,j)+ &
+                       H2avg(i,k+1,j)-H2avg(i,k,j)          &
+                                )*rdzw(i,k,j)               &
+                                                          )
+
+   ENDDO
+   ENDDO
+   ENDDO
+           
+   IF ( doing_tke ) THEN
+      DO j = j_start, j_end
+      DO k = kts,ktf
+      DO i = i_start, i_end
+          tendency(i,k,j)=tmptendf(i,k,j)+2.* &
+                          (tendency(i,k,j)-tmptendf(i,k,j))
+      ENDDO
+      ENDDO
+      ENDDO
+   ENDIF
+
+END SUBROUTINE horizontal_diffusion_s
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE vertical_diffusion_2   ( ru_tendf, rv_tendf, rw_tendf, rt_tendf,   &
+                                    tke_tendf, moist_tendf, n_moist,          &
+                                    chem_tendf, n_chem,                       &
+                                    scalar_tendf, n_scalar,                   &
+                                    u_2, v_2,                                 &
+                                    thp,u_base,v_base,t_base,qv_base,mu,tke,  &
+                                    config_flags,defor13,defor23,defor33,div, &
+                                    moist, chem, scalar, xkmv, xkhv,km_opt,   &
+                                    fnm, fnp, dn, dnw, rdz, rdzw,             &
+                                    hfx, qfx, ust, rho,                       &
+                                    ids, ide, jds, jde, kds, kde,             &
+                                    ims, ime, jms, jme, kms, kme,             &
+                                    its, ite, jts, jte, kts, kte              )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,        INTENT(IN   ) ::        ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+
+   INTEGER ,        INTENT(IN   ) ::        n_moist, n_chem, n_scalar, km_opt
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: fnm
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: fnp
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: dnw
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::  dn
+   REAL , DIMENSION( ims:ime , jms:jme ) ,  INTENT(IN   )      ::  mu
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: qv_base
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::  u_base
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::  v_base
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::  t_base
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::ru_tendf,&
+                                                                 rv_tendf,&
+                                                                 rw_tendf,&
+                                                                tke_tendf,&
+                                                                rt_tendf  
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_moist),                 &
+          INTENT(INOUT) ::                                    moist_tendf
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_chem),                  &
+          INTENT(INOUT) ::                                     chem_tendf
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_scalar) ,               &
+          INTENT(INOUT) ::                                   scalar_tendf
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_moist),                 &
+          INTENT(INOUT) ::                                          moist
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_chem),                  &
+          INTENT(INOUT) ::                                           chem
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_scalar) ,               &
+          INTENT(IN   ) ::                                         scalar
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(IN   ) ::defor13, &
+                                                                 defor23, &
+                                                                 defor33, &
+                                                                     div, &
+                                                                    xkmv, &
+                                                                    xkhv, &
+                                                                     tke, &
+                                                                     rdz, &
+                                                                     u_2, &
+                                                                     v_2, &
+                                                                    rdzw
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(IN   )   :: rho  
+   REAL , DIMENSION( ims:ime, jms:jme), INTENT(IN   )            :: hfx,  &
+                                                                    qfx
+   REAL , DIMENSION( ims:ime, jms:jme), INTENT(IN   )            :: ust
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::    thp
+
+! LOCAL VAR
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme)  ::    var_mix
+
+   INTEGER :: im, i,j,k
+   INTEGER :: i_start, i_end, j_start, j_end
+
+!  REAL , DIMENSION( its:ite, kts:kte, jts:jte) :: xkhv
+
+!***************************************************************************
+!***************************************************************************
+!MODIFICA VARIABILI PER I FLUSSI
+!
+    REAL :: V0_u,V0_v,tao_xz,tao_yz,ustar,cd0
+    REAL :: xsfc,psi1,vk2,zrough,lnz
+    REAL :: heat_flux, moist_flux, heat_flux0
+    REAL :: cpm
+!
+!FINE MODIFICA VARIABILI PER I FLUSSI
+!***************************************************************************
+!
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+!
+!-----------------------------------------------------------------------
+
+      CALL vertical_diffusion_u_2( ru_tendf, config_flags, mu,    &
+                                   defor13, xkmv,                 &
+                                   dnw, rdzw, fnm, fnp,           &
+                                   ids, ide, jds, jde, kds, kde,  &
+                                   ims, ime, jms, jme, kms, kme,  &
+                                   its, ite, jts, jte, kts, kte  )
+
+
+      CALL vertical_diffusion_v_2( rv_tendf, config_flags, mu,    &
+                                   defor23, xkmv,                 &
+                                   dnw, rdzw, fnm, fnp,           &
+                                   ids, ide, jds, jde, kds, kde,  &
+                                   ims, ime, jms, jme, kms, kme,  &
+                                   its, ite, jts, jte, kts, kte  )
+
+      CALL vertical_diffusion_w_2( rw_tendf, config_flags, mu,    &
+                                   defor33, tke(ims,kms,jms),     &
+                                   div, xkmv,                     &
+                                   dn, rdz,                       &  
+                                   ids, ide, jds, jde, kds, kde,  &
+                                   ims, ime, jms, jme, kms, kme,  &
+                                   its, ite, jts, jte, kts, kte  )
+
+!*****************************************
+!*****************************************
+!  MODIFICA al flusso di momento alla parete
+!
+  vflux: SELECT CASE( config_flags%isfflx )
+  CASE (0) ! Assume cd a constant, specified in namelist
+    cd0 = config_flags%tke_drag_coefficient  ! constant drag coefficient
+                                             ! set in namelist.input
+!
+!calcolo del modulo della velocita
+    DO j = j_start, j_end
+    DO i = i_start, ite
+       V0_u=0.
+       tao_xz=0.
+       V0_u=    sqrt((u_2(i,kts,j)**2) +         &
+                        (((v_2(i  ,kts,j  )+          &
+                           v_2(i  ,kts,j+1)+          &
+                           v_2(i-1,kts,j  )+          &
+                           v_2(i-1,kts,j+1))/4)**2))+epsilon
+       tao_xz=cd0*V0_u*u_2(i,kts,j)
+       ru_tendf(i,kts,j)=ru_tendf(i,kts,j)            &
+                         -0.25*(mu(i,j)+mu(i-1,j))*tao_xz*(rdzw(i,kts,j)+rdzw(i-1,kts,j))
+    ENDDO
+    ENDDO
+ 
+!
+    DO j = j_start, jte
+    DO i = i_start, i_end
+       V0_v=0.
+       tao_yz=0.
+       V0_v=    sqrt((v_2(i,kts,j)**2) +         &
+                        (((u_2(i  ,kts,j  )+          &
+                           u_2(i  ,kts,j-1)+          &
+                           u_2(i+1,kts,j  )+          &
+                           u_2(i+1,kts,j-1))/4)**2))+epsilon
+       tao_yz=cd0*V0_v*v_2(i,kts,j)
+       rv_tendf(i,kts,j)=rv_tendf(i,kts,j)            &
+                         -0.25*(mu(i,j)+mu(i,j-1))*tao_yz*(rdzw(i,kts,j)+rdzw(i,kts,j-1))
+    ENDDO
+    ENDDO
+
+  CASE (1,2) ! ustar computed from surface routine
+    DO j = j_start, j_end
+    DO i = i_start, ite
+       V0_u=0.
+       tao_xz=0.
+       V0_u=    sqrt((u_2(i,kts,j)**2) +         &
+                        (((v_2(i  ,kts,j  )+          &
+                           v_2(i  ,kts,j+1)+          &
+                           v_2(i-1,kts,j  )+          &
+                           v_2(i-1,kts,j+1))/4)**2))+epsilon
+       ustar=0.5*(ust(i,j)+ust(i-1,j))
+       tao_xz=ustar*ustar*u_2(i,kts,j)/V0_u
+       ru_tendf(i,kts,j)=ru_tendf(i,kts,j)            &
+                         -0.25*(mu(i,j)+mu(i-1,j))*tao_xz*(rdzw(i,kts,j)+rdzw(i-1,kts,j))
+    ENDDO
+    ENDDO
+ 
+    DO j = j_start, jte
+    DO i = i_start, i_end
+       V0_v=0.
+       tao_yz=0.
+       V0_v=    sqrt((v_2(i,kts,j)**2) +         &
+                        (((u_2(i  ,kts,j  )+          &
+                           u_2(i  ,kts,j-1)+          &
+                           u_2(i+1,kts,j  )+          &
+                           u_2(i+1,kts,j-1))/4)**2))+epsilon
+       ustar=0.5*(ust(i,j)+ust(i,j-1))
+       tao_yz=ustar*ustar*v_2(i,kts,j)/V0_v
+       rv_tendf(i,kts,j)=rv_tendf(i,kts,j)            &
+                         -0.25*(mu(i,j)+mu(i,j-1))*tao_yz*(rdzw(i,kts,j)+rdzw(i,kts,j-1))
+    ENDDO
+    ENDDO
+
+  CASE DEFAULT
+    CALL wrf_error_fatal( 'isfflx value invalid for diff_opt=2' )
+  END SELECT vflux
+
+!
+!  FINE MODIFICA al flusso di momento alla parete
+!*****************************************
+!*****************************************
+
+   IF ( config_flags%mix_full_fields ) THEN
+
+     DO j=jts,min(jte,jde-1)
+     DO k=kts,kte-1
+     DO i=its,min(ite,ide-1)
+       var_mix(i,k,j) = thp(i,k,j)
+     ENDDO
+     ENDDO
+     ENDDO
+
+   ELSE
+
+     DO j=jts,min(jte,jde-1)
+     DO k=kts,kte-1
+     DO i=its,min(ite,ide-1)
+       var_mix(i,k,j) = thp(i,k,j) - t_base(k)
+     ENDDO
+     ENDDO
+     ENDDO
+
+   END IF
+
+   CALL vertical_diffusion_s( rt_tendf, config_flags, var_mix, mu, xkhv, &
+                              dn, dnw, rdz, rdzw, fnm, fnp,          &
+                              .false.,                               &
+                              ids, ide, jds, jde, kds, kde,          &
+                              ims, ime, jms, jme, kms, kme,          &
+                              its, ite, jts, jte, kts, kte          )
+
+
+!*****************************************
+!*****************************************
+!MODIFICA al flusso di calore
+!
+!
+  hflux: SELECT CASE( config_flags%isfflx )
+  CASE (0,2) ! with fixed surface heat flux given in the namelist
+    heat_flux = config_flags%tke_heat_flux  ! constant heat flux value
+                                            ! set in namelist.input
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+       rt_tendf(i,kts,j)=rt_tendf(i,kts,j)  &
+            +mu(i,j)*heat_flux*rdzw(i,kts,j)
+    ENDDO
+    ENDDO
+
+  CASE (1) ! use surface heat flux computed from surface routine
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+
+       cpm = cp * (1. + 0.8 * moist(i,kts,j,P_QV))
+       heat_flux = hfx(i,j)/cpm/rho(i,1,j)
+       rt_tendf(i,kts,j)=rt_tendf(i,kts,j)  &
+            +mu(i,j)*heat_flux*rdzw(i,kts,j)
+
+    ENDDO
+    ENDDO
+
+  CASE DEFAULT
+    CALL wrf_error_fatal( 'isfflx value invalid for diff_opt=2' )
+  END SELECT hflux
+
+!
+! FINE MODIFICA al flusso di calore
+!*****************************************
+!*****************************************
+
+   If (km_opt .eq. 2) then
+   CALL vertical_diffusion_s( tke_tendf(ims,kms,jms),               &
+                              config_flags, tke(ims,kms,jms),       &
+                              mu, xkhv,                             &
+                              dn, dnw, rdz, rdzw, fnm, fnp,         &
+                              .true.,                               &
+                              ids, ide, jds, jde, kds, kde,         &
+                              ims, ime, jms, jme, kms, kme,         &
+                              its, ite, jts, jte, kts, kte         )
+   endif
+ 
+   IF (n_moist .ge. PARAM_FIRST_SCALAR) THEN 
+
+     moist_loop: do im = PARAM_FIRST_SCALAR, n_moist
+
+       IF ( (.not. config_flags%mix_full_fields) .and. (im == P_QV) ) THEN
+
+         DO j=jts,min(jte,jde-1)
+         DO k=kts,kte-1
+         DO i=its,min(ite,ide-1)
+          var_mix(i,k,j) = moist(i,k,j,im) - qv_base(k)
+         ENDDO
+         ENDDO
+         ENDDO
+
+       ELSE
+
+         DO j=jts,min(jte,jde-1)
+         DO k=kts,kte-1
+         DO i=its,min(ite,ide-1)
+          var_mix(i,k,j) = moist(i,k,j,im)
+         ENDDO
+         ENDDO
+         ENDDO
+
+       END IF
+
+
+          CALL vertical_diffusion_s( moist_tendf(ims,kms,jms,im),         &
+                                     config_flags, var_mix,               &
+                                     mu, xkhv,                            &
+                                     dn, dnw, rdz, rdzw, fnm, fnp,        &
+                                     .false.,                             &
+                                     ids, ide, jds, jde, kds, kde,        &
+                                     ims, ime, jms, jme, kms, kme,        &
+                                     its, ite, jts, jte, kts, kte        )
+
+!*****************************************
+!*****************************************
+!MODIFICATIONS for water vapor flux
+!
+!
+  qflux: SELECT CASE( config_flags%isfflx )
+  CASE (0)
+! do nothing
+  CASE (1,2) ! with surface moisture flux 
+    IF ( im == P_QV ) THEN
+       DO j = j_start, j_end
+       DO i = i_start, i_end
+          moist_flux = qfx(i,j)/rho(i,1,j)
+          moist_tendf(i,kts,j,im)=moist_tendf(i,kts,j,im)  &
+               +mu(i,j)*moist_flux*rdzw(i,kts,j)
+       ENDDO
+       ENDDO
+    ENDIF
+
+  CASE DEFAULT
+    CALL wrf_error_fatal( 'isfflx value invalid for diff_opt=2' )
+  END SELECT qflux
+!
+! END MODIFICATIONS for water vapor flux
+!*****************************************
+!*****************************************
+     ENDDO moist_loop
+
+   ENDIF
+
+   IF (n_chem .ge. PARAM_FIRST_SCALAR) THEN 
+
+     chem_loop: do im = PARAM_FIRST_SCALAR, n_chem
+
+          CALL vertical_diffusion_s( chem_tendf(ims,kms,jms,im),         &
+                                     config_flags, chem(ims,kms,jms,im), &
+                                     mu, xkhv,                             &
+                                     dn, dnw, rdz, rdzw, fnm, fnp,         &
+                                     .false.,                              &
+                                     ids, ide, jds, jde, kds, kde,         &
+                                     ims, ime, jms, jme, kms, kme,         &
+                                     its, ite, jts, jte, kts, kte         )
+     ENDDO chem_loop
+
+   ENDIF
+
+
+   IF (n_scalar .ge. PARAM_FIRST_SCALAR) THEN 
+
+     scalar_loop: do im = PARAM_FIRST_SCALAR, n_scalar
+
+          CALL vertical_diffusion_s( scalar_tendf(ims,kms,jms,im),         &
+                                     config_flags, scalar(ims,kms,jms,im), &
+                                     mu, xkhv,                             &
+                                     dn, dnw, rdz, rdzw, fnm, fnp,         &
+                                     .false.,                              &
+                                     ids, ide, jds, jde, kds, kde,         &
+                                     ims, ime, jms, jme, kms, kme,         &
+                                     its, ite, jts, jte, kts, kte         )
+     ENDDO scalar_loop
+
+   ENDIF
+
+END SUBROUTINE vertical_diffusion_2
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE vertical_diffusion_u_2( tendency, config_flags, mu,            &
+                                   defor13, xkmv,                         &
+                                   dnw, rdzw, fnm, fnp,                   &
+                                   ids, ide, jds, jde, kds, kde,          &
+                                   ims, ime, jms, jme, kms, kme,          &
+                                   its, ite, jts, jte, kts, kte          )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,         INTENT(IN   ) ::       ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnm
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnp
+   REAL , DIMENSION( kms:kme ) ,            INTENT(IN   )      :: dnw
+!   REAL , DIMENSION( ims:ime , jms:jme ) ,  INTENT(IN   )      :: zeta_z
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::tendency
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) ,                       &
+                                            INTENT(IN   )      ::defor13, &
+                                                                    xkmv, &
+                                                                      rdzw
+   REAL , DIMENSION( ims:ime , jms:jme ) ,  INTENT(IN   )      :: mu
+
+! LOCAL VARS
+
+   INTEGER :: i, j, k, ktf
+
+   INTEGER :: i_start, i_end, j_start, j_end
+   INTEGER :: is_ext,ie_ext,js_ext,je_ext  
+
+   REAL , DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1)        :: titau3
+
+   REAL , DIMENSION( its:ite, jts:jte)                         ::  zzavg
+
+   REAL :: rdzu
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf=MIN(kte,kde-1)
+  
+   i_start = its
+   i_end   = ite
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+   IF ( config_flags%open_xs .or. config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-1,ite)
+   IF ( config_flags%open_ys .or. config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+! titau3 = titau13
+   is_ext=0
+   ie_ext=0
+   js_ext=0
+   je_ext=0
+   CALL cal_titau_13_31( config_flags, titau3, defor13,   &
+                         mu, xkmv, fnm, fnp,              &
+                         is_ext, ie_ext, js_ext, je_ext,  &
+                         ids, ide, jds, jde, kds, kde,    &
+                         ims, ime, jms, jme, kms, kme,    &
+                         its, ite, jts, jte, kts, kte     )
+!
+      DO j = j_start, j_end
+      DO k=kts+1,ktf
+      DO i = i_start, i_end
+
+         rdzu = 2./(1./rdzw(i,k,j) + 1./rdzw(i-1,k,j))
+         tendency(i,k,j)=tendency(i,k,j)-rdzu*(titau3(i,k+1,j)-titau3(i,k,j))
+
+      ENDDO
+      ENDDO
+      ENDDO
+
+! ******** MODIF...
+!  we will pick up the surface drag (titau3(i,kts,j)) later
+!
+       DO j = j_start, j_end
+       k=kts
+       DO i = i_start, i_end
+ 
+          rdzu = 2./(1./rdzw(i,k,j) + 1./rdzw(i-1,k,j))
+          tendency(i,k,j)=tendency(i,k,j)-rdzu*(titau3(i,k+1,j))
+       ENDDO
+       ENDDO
+! ******** MODIF...
+
+END SUBROUTINE vertical_diffusion_u_2
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE vertical_diffusion_v_2( tendency, config_flags, mu,            &
+                                   defor23, xkmv,                         &
+                                   dnw, rdzw, fnm, fnp,                   &
+                                   ids, ide, jds, jde, kds, kde,          &
+                                   ims, ime, jms, jme, kms, kme,          &
+                                   its, ite, jts, jte, kts, kte          )
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,         INTENT(IN   ) ::       ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnm
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnp
+   REAL , DIMENSION( kms:kme ) ,            INTENT(IN   )      :: dnw
+!   REAL , DIMENSION( ims:ime , jms:jme ) ,  INTENT(IN   )      :: zeta_z
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::tendency
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) ,                       &
+                                            INTENT(IN   )      ::defor23, &
+                                                                    xkmv, &
+                                                                    rdzw
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,  INTENT(IN   )      :: mu
+
+! LOCAL VARS
+
+   INTEGER :: i, j, k, ktf
+
+   INTEGER :: i_start, i_end, j_start, j_end
+   INTEGER :: is_ext,ie_ext,js_ext,je_ext  
+
+   REAL , DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1)        :: titau3
+
+   REAL , DIMENSION( its:ite, jts:jte)                         ::  zzavg
+
+   REAL  :: rdzv
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf=MIN(kte,kde-1)
+  
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = jte
+
+   IF ( config_flags%open_xs .or. config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%open_ys .or. config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-1,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN(ite,ide-1)
+
+! titau3 = titau23
+   is_ext=0
+   ie_ext=0
+   js_ext=0
+   je_ext=0
+   CALL cal_titau_23_32( config_flags, titau3, defor23,   &
+                         mu, xkmv, fnm, fnp,              &
+                         is_ext, ie_ext, js_ext, je_ext,  &
+                         ids, ide, jds, jde, kds, kde,    &
+                         ims, ime, jms, jme, kms, kme,    &
+                         its, ite, jts, jte, kts, kte     )
+
+   DO j = j_start, j_end
+   DO k = kts+1,ktf
+   DO i = i_start, i_end
+
+      rdzv = 2./(1./rdzw(i,k,j) + 1./rdzw(i,k,j-1))
+      tendency(i,k,j)=tendency(i,k,j)-rdzv*(titau3(i,k+1,j)-titau3(i,k,j))
+
+   ENDDO
+   ENDDO
+   ENDDO
+
+! ******** MODIF...
+!  we will pick up the surface drag (titau3(i,kts,j)) later
+!
+       DO j = j_start, j_end
+       k=kts
+       DO i = i_start, i_end
+ 
+          rdzv = 2./(1./rdzw(i,k,j) + 1./rdzw(i,k,j-1))
+          tendency(i,k,j)=tendency(i,k,j)-rdzv*(titau3(i,k+1,j))
+ 
+       ENDDO
+       ENDDO
+! ******** MODIF...
+
+END SUBROUTINE vertical_diffusion_v_2
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE vertical_diffusion_w_2(tendency, config_flags, mu,             &
+                                defor33, tke, div, xkmv,                  &
+                                dn, rdz,                                  &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                its, ite, jts, jte, kts, kte              )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,         INTENT(IN   ) ::       ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( kms:kme ) ,            INTENT(IN   )      ::  dn
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::tendency
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) ,                       &
+                                            INTENT(IN   )      ::defor33, &
+                                                                     tke, &
+                                                                     div, &
+                                                                    xkmv, &
+                                                                     rdz
+
+   REAL , DIMENSION( ims:ime, jms:jme), INTENT(IN   ) :: mu
+
+! LOCAL VARS
+
+   INTEGER :: i, j, k, ktf
+
+   INTEGER :: i_start, i_end, j_start, j_end
+   INTEGER :: is_ext,ie_ext,js_ext,je_ext  
+
+   REAL , DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1)        :: titau3
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf=MIN(kte,kde-1)
+  
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+   IF ( config_flags%open_xs .or. config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%open_ys .or. config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN(ite,ide-1)
+
+! titau3 = titau33
+   is_ext=0
+   ie_ext=0
+   js_ext=0
+   je_ext=0
+   CALL cal_titau_11_22_33( config_flags, titau3,            &
+                            mu, tke, xkmv, defor33,          &
+                            is_ext, ie_ext, js_ext, je_ext,  &
+                            ids, ide, jds, jde, kds, kde,    &
+                            ims, ime, jms, jme, kms, kme,    &
+                            its, ite, jts, jte, kts, kte     )
+
+!   DO j = j_start, j_end
+!   DO k = kts+1, ktf
+!   DO i = i_start, i_end
+!      titau3(i,k,j)=titau3(i,k,j)*zeta_z(i,j)
+!   ENDDO
+!   ENDDO
+!   ENDDO
+
+   DO j = j_start, j_end
+   DO k = kts+1, ktf
+   DO i = i_start, i_end
+      tendency(i,k,j)=tendency(i,k,j)-rdz(i,k,j)*(titau3(i,k,j)-titau3(i,k-1,j))
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE vertical_diffusion_w_2
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE vertical_diffusion_s( tendency, config_flags, var, mu, xkhv,   &
+                                 dn, dnw, rdz, rdzw, fnm, fnp,            &
+                                 doing_tke,                               &
+                                 ids, ide, jds, jde, kds, kde,            &
+                                 ims, ime, jms, jme, kms, kme,            &
+                                 its, ite, jts, jte, kts, kte            )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,         INTENT(IN   ) ::       ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+
+   LOGICAL,         INTENT(IN   ) ::        doing_tke
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnm
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) ::    fnp
+   REAL , DIMENSION( kms:kme ) ,            INTENT(IN   )      ::  dn
+   REAL , DIMENSION( kms:kme ) ,            INTENT(IN   )      :: dnw
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::tendency
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(IN) ::   xkhv
+
+   REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN) ::   mu
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) ,                       &
+                                            INTENT(IN   )      ::    var, &
+                                                                     rdz, &
+                                                                    rdzw
+! LOCAL VARS
+
+   INTEGER :: i, j, k, ktf
+
+   INTEGER :: i_start, i_end, j_start, j_end
+
+   REAL , DIMENSION( its:ite, kts:kte, jts:jte)            ::        H3, &
+                                                                 xkxavg, &
+                                                                  rravg
+
+   REAL , DIMENSION( its:ite, kts:kte, jts:jte)            ::  tmptendf
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   ktf=MIN(kte,kde-1)
+  
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+   IF ( config_flags%open_xs .or. config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%open_xe .or. config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%open_ys .or. config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%open_ye .or. config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN(ite,ide-1)
+
+   IF (doing_tke) THEN
+      DO j = j_start, j_end
+      DO k = kts,ktf
+      DO i = i_start, i_end
+         tmptendf(i,k,j)=tendency(i,k,j)
+      ENDDO
+      ENDDO
+      ENDDO
+   ENDIF
+
+! H3
+
+   xkxavg = 0.
+
+   DO j = j_start, j_end
+   DO k = kts+1,ktf
+   DO i = i_start, i_end
+      xkxavg(i,k,j)=fnm(k)*xkhv(i,k,j)+fnp(k)*xkhv(i,k-1,j)
+      H3(i,k,j)=-xkxavg(i,k,j)*(var(i,k,j)-var(i,k-1,j))*rdz(i,k,j)
+!      H3(i,k,j)=-xkxavg(i,k,j)*zeta_z(i,j)* &
+!                 (var(i,k,j)-var(i,k-1,j))/dn(k)
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end
+   DO i = i_start, i_end
+      H3(i,kts,j)=0.
+      H3(i,ktf+1,j)=0.
+!      H3(i,kts,j)=H3(i,kts+1,j)
+!      H3(i,ktf+1,j)=H3(i,ktf,j)
+   ENDDO
+   ENDDO
+
+   DO j = j_start, j_end
+   DO k = kts,ktf
+   DO i = i_start, i_end
+      tendency(i,k,j)=tendency(i,k,j)  &
+                       -mu(i,j)*(H3(i,k+1,j)-H3(i,k,j))*rdzw(i,k,j)
+   ENDDO
+   ENDDO
+   ENDDO
+
+   IF (doing_tke) THEN
+      DO j = j_start, j_end
+      DO k = kts,ktf
+      DO i = i_start, i_end
+          tendency(i,k,j)=tmptendf(i,k,j)+2.* &
+                          (tendency(i,k,j)-tmptendf(i,k,j))
+      ENDDO
+      ENDDO
+      ENDDO
+   ENDIF
+
+END SUBROUTINE vertical_diffusion_s
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE cal_titau_11_22_33( config_flags, titau,              &
+                                   mu, tke, xkx, defor,              &
+                                   is_ext, ie_ext, js_ext, je_ext,   &
+                                   ids, ide, jds, jde, kds, kde,     &
+                                   ims, ime, jms, jme, kms, kme,     &
+                                   its, ite, jts, jte, kts, kte      )
+
+! History:     Sep 2003  Changes by George Bryan and Jason Knievel, NCAR
+!              Oct 2001  Converted to mass core by Bill Skamarock, NCAR
+!              Aug 2000  Original code by Shu-Hua Chen, UC-Davis
+
+! Purpose:     This routine calculates stress terms (taus) for use in
+!              the calculation of production of TKE by sheared wind
+
+! References:  Klemp and Wilhelmson (JAS 1978)
+!              Deardorff (B-L Meteor 1980)
+!              Chen and Dudhia (NCAR WRF physics report 2000)
+
+! Key:
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte
+
+    INTEGER, INTENT( IN )  &
+    :: is_ext, ie_ext, js_ext, je_ext  
+
+    REAL, DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1 ), INTENT( INOUT )  &
+    :: titau 
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: defor, xkx, tke
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: mu
+
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k, ktf, i_start, i_end, j_start, j_end
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    ktf = MIN( kte, kde-1 )
+
+    i_start = its
+    i_end   = ite
+    j_start = jts
+    j_end   = jte
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_xe .OR. config_flags%specified .OR. &
+         config_flags%nested) i_end   = MIN( ide-1, ite )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested) j_start = MAX( jds+1, jts )
+    IF ( config_flags%open_ye .OR. config_flags%specified .OR. &
+         config_flags%nested) j_end   = MIN( jde-1, jte )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+    i_start = i_start - is_ext
+    i_end   = i_end   + ie_ext   
+    j_start = j_start - js_ext
+    j_end   = j_end   + je_ext   
+
+    IF ( config_flags%km_opt .EQ. 2) THEN
+      DO j = j_start,j_end
+      DO k = kts,ktf
+      DO i = i_start,i_end  
+        titau(i,k,j) = mu(i,j) * ( - xkx(i,k,j) * ( defor(i,k,j) ) )       
+      END DO
+      END DO
+      END DO
+    ELSE
+      DO j = j_start, j_end
+      DO k = kts, ktf
+      DO i = i_start, i_end
+        titau(i,k,j) = - mu(i,j) * xkx(i,k,j) * defor(i,k,j)
+      END DO
+      END DO
+      END DO
+    END IF
+
+    END SUBROUTINE cal_titau_11_22_33
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE cal_titau_12_21( config_flags, titau,             &
+                                mu, xkx, defor,                  &
+                                is_ext, ie_ext, js_ext, je_ext,  &
+                                ids, ide, jds, jde, kds, kde,    &
+                                ims, ime, jms, jme, kms, kme,    &
+                                its, ite, jts, jte, kts, kte     )
+
+! History:     Sep 2003   Modifications by George Bryan and Jason Knievel, NCAR
+!              Oct 2001   Converted to mass core by Bill Skamarock, NCAR
+!              Aug 2000   Original code by Shu-Hua Chen, UC-Davis
+
+! Pusrpose     This routine calculates the stress terms (taus) for use in
+!              the calculation of production of TKE by sheared wind
+
+! References:  Klemp and Wilhelmson (JAS 1978)
+!              Deardorff (B-L Meteor 1980)
+!              Chen and Dudhia (NCAR WRF physics report 2000)
+
+! Key:
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte
+
+    INTEGER, INTENT( IN )  &
+    :: is_ext, ie_ext, js_ext, je_ext  
+
+    REAL, DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1 ), INTENT( INOUT )  &
+    :: titau 
+ 
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: defor, xkx
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: mu
+
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k, ktf, i_start, i_end, j_start, j_end
+
+    REAL, DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1 )  &
+    :: xkxavg  
+
+    REAL, DIMENSION( its-1:ite+1, jts-1:jte+1 )  &
+    :: muavg
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    ktf = MIN( kte, kde-1 )
+
+! Needs one more point in the x and y directions.
+
+    i_start = its
+    i_end   = ite
+    j_start = jts
+    j_end   = jte
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested ) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_xe .OR. config_flags%specified .OR. &
+         config_flags%nested ) i_end   = MIN( ide-1, ite )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested ) j_start = MAX( jds+1, jts )
+    IF ( config_flags%open_ye .OR. config_flags%specified .OR. &
+         config_flags%nested ) j_end   = MIN( jde-1, jte )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+    i_start = i_start - is_ext
+    i_end   = i_end   + ie_ext   
+    j_start = j_start - js_ext
+    j_end   = j_end   + je_ext   
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      xkxavg(i,k,j) = 0.25 * ( xkx(i-1,k,j  ) + xkx(i,k,j  ) +  &
+                               xkx(i-1,k,j-1) + xkx(i,k,j-1) )
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      muavg(i,j) = 0.25 * ( mu(i-1,j  ) + mu(i,j  ) +  &
+                            mu(i-1,j-1) + mu(i,j-1) )
+    END DO
+    END DO
+
+! titau12 or titau21
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      titau(i,k,j) = - muavg(i,j) * xkxavg(i,k,j) * defor(i,k,j)
+    END DO
+    END DO
+    END DO
+
+    END SUBROUTINE cal_titau_12_21
+
+!=======================================================================
+
+    SUBROUTINE cal_titau_13_31( config_flags, titau,             &
+                                defor, mu, xkx, fnm, fnp,        &
+                                is_ext, ie_ext, js_ext, je_ext,  &
+                                ids, ide, jds, jde, kds, kde,    &
+                                ims, ime, jms, jme, kms, kme,    &
+                                its, ite, jts, jte, kts, kte     )
+
+! History:     Sep 2003   Modifications by George Bryan and Jason Knievel, NCAR
+!              Oct 2001   Converted to mass core by Bill Skamarock, NCAR
+!              Aug 2000   Original code by Shu-Hua Chen, UC-Davis
+
+! Purpose:     This routine calculates the stress terms (taus) for use in
+!              the calculation of production of TKE by sheared wind
+
+! References:  Klemp and Wilhelmson (JAS 1978)
+!              Deardorff (B-L Meteor 1980)
+!              Chen and Dudhia (NCAR WRF physics report 2000)
+
+! Key:
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte
+
+    INTEGER, INTENT( IN )  &
+    :: is_ext, ie_ext, js_ext, je_ext  
+
+    REAL, DIMENSION( kms:kme ), INTENT( IN )  &
+    :: fnm, fnp
+
+    REAL, DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1 ), INTENT( INOUT )  &
+    :: titau 
+ 
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme), INTENT( IN )  &
+    :: defor, xkx
+
+    REAL, DIMENSION( ims:ime, jms:jme), INTENT( IN )  &
+    :: mu
+
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k, ktf, i_start, i_end, j_start, j_end
+
+    REAL, DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1 )  &
+    :: xkxavg 
+
+    REAL, DIMENSION( its-1:ite+1, jts-1:jte+1 )  &
+    :: muavg
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    ktf = MIN( kte, kde-1 )
+
+! Find ide-1 and jde-1 for averaging to p point.
+
+    i_start = its
+    i_end   = ite
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_xe .OR. config_flags%specified .OR. &
+         config_flags%nested) i_end   = MIN( ide-1, ite )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested) j_start = MAX( jds+1, jts )
+    IF ( config_flags%open_ye .OR. config_flags%specified .OR. &
+         config_flags%nested) j_end   = MIN( jde-2, jte )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+    i_start = i_start - is_ext
+    i_end   = i_end   + ie_ext   
+    j_start = j_start - js_ext
+    j_end   = j_end   + je_ext   
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      xkxavg(i,k,j) = 0.5 * ( fnm(k) * ( xkx(i,k  ,j) + xkx(i-1,k  ,j) ) +  &
+                              fnp(k) * ( xkx(i,k-1,j) + xkx(i-1,k-1,j) ) )
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      muavg(i,j) = 0.5 * ( mu(i,j) + mu(i-1,j) )
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      titau(i,k,j) = - muavg(i,j) * xkxavg(i,k,j) * defor(i,k,j)
+    ENDDO
+    ENDDO
+    ENDDO
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      titau(i,kts  ,j) = 0.0
+      titau(i,ktf+1,j) = 0.0
+    ENDDO
+    ENDDO
+
+    END SUBROUTINE cal_titau_13_31
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE cal_titau_23_32( config_flags, titau, defor,      &
+                                mu, xkx, fnm, fnp,               &
+                                is_ext, ie_ext, js_ext, je_ext,  &
+                                ids, ide, jds, jde, kds, kde,    &
+                                ims, ime, jms, jme, kms, kme,    &
+                                its, ite, jts, jte, kts, kte     )
+
+! History:     Sep 2003  Changes by George Bryan and Jason Knievel, NCAR
+!              Oct 2001  Converted to mass core by Bill Skamarock, NCAR
+!              Aug 2000  Original code by Shu-Hua Chen, UC-Davis
+
+! Purpose:     This routine calculates stress terms (taus) for use in
+!              the calculation of production of TKE by sheared wind
+
+! References:  Klemp and Wilhelmson (JAS 1978)
+!              Deardorff (B-L Meteor 1980)
+!              Chen and Dudhia (NCAR WRF physics report 2000)
+
+! Key:
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte
+
+    INTEGER, INTENT( IN )  &
+    :: is_ext,ie_ext,js_ext,je_ext  
+
+    REAL, DIMENSION( kms:kme ), INTENT( IN )  &
+    :: fnm, fnp
+
+    REAL, DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1 ), INTENT( INOUT )  &  
+    :: titau 
+ 
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: defor, xkx
+  
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    ::  mu
+
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k, ktf, i_start, i_end, j_start, j_end
+
+    REAL, DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1 )  &
+    :: xkxavg 
+                                                                   
+    REAL, DIMENSION( its-1:ite+1, jts-1:jte+1 )  &
+    :: muavg
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+     ktf = MIN( kte, kde-1 )
+
+! Find ide-1 and jde-1 for averaging to p point.
+
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = jte
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_xe .OR. config_flags%specified .OR. &
+         config_flags%nested) i_end   = MIN( ide-2, ite )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested) j_start = MAX( jds+1, jts )
+    IF ( config_flags%open_ye .OR. config_flags%specified .OR. &
+         config_flags%nested) j_end   = MIN( jde-1, jte )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+
+    i_start = i_start - is_ext
+    i_end   = i_end   + ie_ext   
+    j_start = j_start - js_ext
+    j_end   = j_end   + je_ext   
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      xkxavg(i,k,j) = 0.5 * ( fnm(k) * ( xkx(i,k  ,j) + xkx(i,k  ,j-1) ) +  &
+                              fnp(k) * ( xkx(i,k-1,j) + xkx(i,k-1,j-1) ) )
+    END DO
+    END DO
+    END DO
+ 
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      muavg(i,j) = 0.5 * ( mu(i,j) + mu(i,j-1) )
+    END DO
+    END DO
+ 
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+       titau(i,k,j) = - muavg(i,j) * xkxavg(i,k,j) * defor(i,k,j)
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+      titau(i,kts  ,j) = 0.0
+      titau(i,ktf+1,j) = 0.0
+    END DO
+    END DO
+
+    END SUBROUTINE cal_titau_23_32
+
+!=======================================================================
+!=======================================================================
+
+SUBROUTINE phy_bc ( config_flags,div,defor11,defor22,defor33,              &
+                    defor12,defor13,defor23,xkmh,xkmv,xkhh,xkhv,tke,       &
+                    RUBLTEN, RVBLTEN,                                      &
+                    ids, ide, jds, jde, kds, kde,                          &
+                    ims, ime, jms, jme, kms, kme,                          &
+                    ips, ipe, jps, jpe, kps, kpe,                          &
+                    its, ite, jts, jte, kts, kte                           )
+
+!------------------------------------------------------------------------------
+! Begin declarations.
+
+   IMPLICIT NONE
+
+   TYPE(grid_config_rec_type), INTENT(IN   ) :: config_flags
+
+   INTEGER ,        INTENT(IN   ) ::        ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            ips, ipe, jps, jpe, kps, kpe, &
+                                            its, ite, jts, jte, kts, kte
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::RUBLTEN, &
+                                                                 RVBLTEN, &
+                                                                 defor11, &
+                                                                 defor22, &
+                                                                 defor33, &
+                                                                 defor12, &
+                                                                 defor13, &
+                                                                 defor23, &
+                                                                    xkmh, &
+                                                                    xkmv, &
+                                                                    xkhh, &
+                                                                    xkhv, &
+                                                                     tke, &
+                                                                     div
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+   IF( (config_flags%bl_pbl_physics .GT. 0) &
+        .OR. (config_flags%modif_wrf) ) THEN
+!****MARS: Always do that ?? > yes, for periodic simu -- grep in share
+
+        CALL set_physical_bc3d( RUBLTEN , 't', config_flags,              &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+        CALL set_physical_bc3d( RVBLTEN , 't', config_flags,              &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   ENDIF
+
+   ! move out of the conditional, below; horiz coeffs needed for 
+   ! all diff_opt cases.  JM
+
+   CALL set_physical_bc3d( xkmh    , 't', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   CALL set_physical_bc3d( xkhh    , 't', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   IF(config_flags%diff_opt .eq. 2) THEN
+
+   CALL set_physical_bc3d( xkmv    , 't', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   CALL set_physical_bc3d( xkhv    , 't', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   CALL set_physical_bc3d( tke     , 't', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   CALL set_physical_bc3d( div     , 't', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   CALL set_physical_bc3d( defor11 , 't', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   CALL set_physical_bc3d( defor22 , 't', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   CALL set_physical_bc3d( defor33 , 't', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   CALL set_physical_bc3d( defor12 , 'd', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   CALL set_physical_bc3d( defor13 , 'e', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   CALL set_physical_bc3d( defor23 , 'f', config_flags,                   &
+                                ids, ide, jds, jde, kds, kde,             &
+                                ims, ime, jms, jme, kms, kme,             &
+                                ips, ipe, jps, jpe, kps, kpe,             &
+                                its, ite, jts, jte, kts, kte              )
+
+   ENDIF
+
+END SUBROUTINE phy_bc 
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE tke_rhs( tendency, BN2, config_flags,            &
+                        defor11, defor22, defor33,              &
+                        defor12, defor13, defor23,              &
+                        u, v, w, div, tke, mu,                  &
+                        theta, p, p8w, t8w, z, fnm, fnp,        &
+                        cf1, cf2, cf3, msftx, msfty,            &
+                        xkmh, xkmv, xkhv,                       &
+                        rdx, rdy, dx, dy, dt, zx, zy,           &
+                        rdz, rdzw, dn, dnw, isotropic,          &
+                        hfx, qfx, qv, ust, rho,                 &
+                        ids, ide, jds, jde, kds, kde,           &
+                        ims, ime, jms, jme, kms, kme,           &
+                        its, ite, jts, jte, kts, kte            )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte
+
+    INTEGER, INTENT( IN )  :: isotropic
+    REAL, INTENT( IN )  &
+    :: cf1, cf2, cf3, dt, rdx, rdy, dx, dy
+
+    REAL, DIMENSION( kms:kme ), INTENT( IN )  &
+    :: fnm, fnp, dnw, dn
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: msftx, msfty
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( INOUT )  &
+    :: tendency
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: defor11, defor22, defor33, defor12, defor13, defor23,  &
+       div, BN2, tke, xkmh, xkmv, xkhv, zx, zy, u, v, w, theta,  &
+       p, p8w, t8w, z, rdz, rdzw
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: mu
+
+    REAL, DIMENSION ( ims:ime, jms:jme ), INTENT( IN )   &
+    :: hfx, ust, qfx
+    REAL, DIMENSION ( ims:ime, kms:kme, jms:jme ), INTENT ( IN ) &
+    :: qv, rho
+
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k, ktf, i_start, i_end, j_start, j_end
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    CALL tke_shear(    tendency, config_flags,                &
+                       defor11, defor22, defor33,             &
+                       defor12, defor13, defor23,             &
+                       u, v, w, tke, ust, mu, fnm, fnp,       &
+                       cf1, cf2, cf3, msftx, msfty,           &
+                       xkmh, xkmv,                            &
+                       rdx, rdy, zx, zy, rdz, rdzw, dnw, dn,  &
+                       ids, ide, jds, jde, kds, kde,          &
+                       ims, ime, jms, jme, kms, kme,          &
+                       its, ite, jts, jte, kts, kte           )
+
+    CALL tke_buoyancy( tendency, config_flags, mu,            &
+                       tke, xkhv, BN2, theta, dt,             &
+                       hfx, qfx, qv,  rho,                    &
+                       ids, ide, jds, jde, kds, kde,          &
+                       ims, ime, jms, jme, kms, kme,          &
+                       its, ite, jts, jte, kts, kte           ) 
+
+    CALL tke_dissip(   tendency, config_flags,                &
+                       mu, tke, bn2, theta, p8w, t8w, z,      &
+                       dx, dy,rdz, rdzw, isotropic,           &
+                       msftx, msfty,                          &
+                       ids, ide, jds, jde, kds, kde,          &
+                       ims, ime, jms, jme, kms, kme,          &
+                       its, ite, jts, jte, kts, kte           )
+
+! Set a lower limit on TKE.
+
+    ktf     = MIN( kte, kde-1 )
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+    IF ( config_flags%open_xs .or. config_flags%specified .or. &
+         config_flags%nested) i_start = MAX(ids+1,its)
+    IF ( config_flags%open_xe .or. config_flags%specified .or. &
+         config_flags%nested) i_end   = MIN(ide-2,ite)
+    IF ( config_flags%open_ys .or. config_flags%specified .or. &
+         config_flags%nested) j_start = MAX(jds+1,jts)
+    IF ( config_flags%open_ye .or. config_flags%specified .or. &
+         config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+ 
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tendency(i,k,j) = max( tendency(i,k,j), -mu(i,j) * max( 0.0 , tke(i,k,j) ) / dt )
+    END DO
+    END DO
+    END DO
+
+    END SUBROUTINE tke_rhs
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE tke_buoyancy( tendency, config_flags, mu,    &
+                             tke, xkhv, BN2, theta, dt,     &
+                             hfx, qfx, qv,  rho,            &
+                             ids, ide, jds, jde, kds, kde,  &
+                             ims, ime, jms, jme, kms, kme,  &
+                             its, ite, jts, jte, kts, kte   )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte
+
+    REAL, INTENT( IN )  &
+    :: dt
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( INOUT )  &
+    :: tendency
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: xkhv, tke, BN2, theta 
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: mu
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT ( IN ) &
+    :: qv, rho
+
+    REAL, DIMENSION(ims:ime, jms:jme ), INTENT ( IN ) :: hfx, qfx
+ 
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k, ktf
+
+    INTEGER  &
+    :: i_start, i_end, j_start, j_end
+
+    REAL :: heat_flux, heat_flux0
+
+    REAL :: cpm
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+!-----------------------------------------------------------------------
+! Add to the TKE tendency the term that accounts for production of TKE
+! due to buoyant motions.
+
+    ktf     = MIN( kte, kde-1 )
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested ) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_xe .OR. config_flags%specified .OR. &
+         config_flags%nested ) i_end   = MIN( ide-2, ite )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested ) j_start = MAX( jds+1, jts )
+    IF ( config_flags%open_ye .OR. config_flags%specified .OR. &
+         config_flags%nested ) j_end   = MIN( jde-2, jte )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+ 
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      tendency(i,k,j) = tendency(i,k,j) - mu(i,j) * xkhv(i,k,j) * BN2(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! MARTA: change in the computation of the tke's tendency  at the surface.
+!  the buoyancy flux is the average of the surface heat flux (0.06) and the
+!   flux at the first w level
+!
+! WCS 040331
+
+  hflux: SELECT CASE( config_flags%isfflx )
+  CASE (0,2) ! with fixed surface heat flux given in the namelist
+   heat_flux0 = config_flags%tke_heat_flux  ! constant heat flux value
+                                            ! set in namelist.input
+! LES mods
+   K=KTS
+   PRINT *, 'USE constant H/rho/cp : e.g. value of Hs ', heat_flux0*cp*rho(i_start,k,j_start)
+   DO j = j_start, j_end
+   DO i = i_start, i_end 
+      heat_flux = heat_flux0 
+      tendency(i,k,j)= tendency(i,k,j) - &
+                   mu(i,j)*((xkhv(i,k,j)*BN2(i,k,j))- (g/theta(i,k,j))*heat_flux)/2.
+
+   ENDDO
+   ENDDO   
+
+  CASE (1) ! use surface heat flux computed from surface routine
+   PRINT *, 'USE surface heat flux from PHYSICS', hfx(i_start,j_start)
+   K=KTS
+   DO j = j_start, j_end
+   DO i = i_start, i_end 
+      cpm = cp * (1. + 0.8*qv(i,k,j))
+      heat_flux = (hfx(i,j)/cpm)/rho(i,k,j)
+
+      tendency(i,k,j)= tendency(i,k,j) - &
+                   mu(i,j)*((xkhv(i,k,j)*BN2(i,k,j))- (g/theta(i,k,j))*heat_flux)/2.
+
+   ENDDO
+   ENDDO   
+
+  CASE DEFAULT
+    CALL wrf_error_fatal( 'isfflx value invalid for diff_opt=2' )
+  END SELECT hflux
+
+! end of MARTA/WCS change
+
+! The tendency array now includes production of TKE from buoyant
+! motions.
+!-----------------------------------------------------------------------
+
+    END SUBROUTINE tke_buoyancy
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE tke_dissip( tendency, config_flags,            &
+                           mu, tke, bn2, theta, p8w, t8w, z,  &
+                           dx, dy, rdz, rdzw, isotropic,      &
+                           msftx, msfty,                      &
+                           ids, ide, jds, jde, kds, kde,      &
+                           ims, ime, jms, jme, kms, kme,      &
+                           its, ite, jts, jte, kts, kte       )
+
+! History:     Sep 2003  Changes by George Bryan and Jason Knievel, NCAR
+!              Oct 2001  Converted to mass core by Bill Skamarock, NCAR
+!              Aug 2000  Original code by Shu-Hua Chen, UC-Davis
+
+! Purpose:     This routine calculates dissipation of turbulent kinetic
+!              energy.
+
+! References:  Klemp and Wilhelmson (JAS 1978)
+!              Deardorff (B-L Meteor 1980)
+!              Chen and Dudhia (NCAR WRF physics report 2000)
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    ::  ids, ide, jds, jde, kds, kde,  &
+        ims, ime, jms, jme, kms, kme,  &
+        its, ite, jts, jte, kts, kte
+
+    INTEGER, INTENT( IN )  :: isotropic
+    REAL, INTENT( IN )  &
+    :: dx, dy
+ 
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( INOUT )  &
+    :: tendency
+ 
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: tke, bn2, theta, p8w, t8w, z, rdz, rdzw
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: mu
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: msftx, msfty
+! Local variables.
+
+    REAL, DIMENSION( its:ite, kts:kte, jts:jte )  &
+    :: dthrdn
+
+    REAL, DIMENSION( its:ite, kts:kte, jts:jte )  &
+    :: l_scale
+
+    REAL, DIMENSION( its:ite )  & 
+    :: sumtke,  sumtkez
+
+    INTEGER  &
+    :: i, j, k, ktf, i_start, i_end, j_start, j_end
+
+    REAL  &
+    :: disp_len, deltas, coefc, tmpdz, len_s, thetasfc,  &
+       thetatop, len_0, tketmp, tmp, ce1, ce2, c_k
+
+! End declarations.
+!-----------------------------------------------------------------------
+    c_k = config_flags%c_k
+
+    ce1 = ( c_k / 0.10 ) * 0.19
+    ce2 = max( 0.0 , 0.93 - ce1 )
+
+    ktf     = MIN( kte, kde-1 )
+    i_start = its
+    i_end   = MIN(ite,ide-1)
+    j_start = jts
+    j_end   = MIN(jte,jde-1)
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_xe .OR. config_flags%specified .OR. &
+         config_flags%nested) i_end   = MIN( ide-2, ite )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested) j_start = MAX( jds+1, jts )
+    IF ( config_flags%open_ye .OR. config_flags%specified .OR. &
+         config_flags%nested) j_end   = MIN( jde-2, jte )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+
+      CALL calc_l_scale( config_flags, tke, BN2, l_scale,      &
+                         i_start, i_end, ktf, j_start, j_end,  &
+                         dx, dy, rdzw, msftx, msfty,           &
+                         ids, ide, jds, jde, kds, kde,         &
+                         ims, ime, jms, jme, kms, kme,         &
+                         its, ite, jts, jte, kts, kte          )
+      DO j = j_start, j_end
+      DO k = kts, ktf
+      DO i = i_start, i_end
+        deltas  = ( dx/msftx(i,j) * dy/msfty(i,j) / rdzw(i,k,j) )**0.33333333
+        tketmp  = MAX( tke(i,k,j), 1.0e-6 )
+
+! Apply Deardorff's (1980) "wall effect" at the bottom of the domain. 
+! For LES with fine grid, no need for this wall effect!
+
+        IF ( k .eq. kts .or. k .eq. ktf ) then
+          coefc = 3.9
+        ELSE
+          coefc = ce1 + ce2 * l_scale(i,k,j) / deltas
+        END IF
+
+        tendency(i,k,j) = tendency(i,k,j) - &
+                          mu(i,j) * coefc * tketmp**1.5 / l_scale(i,k,j)
+      END DO
+      END DO
+      END DO
+
+    END SUBROUTINE tke_dissip
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE tke_shear( tendency, config_flags,                &
+                          defor11, defor22, defor33,             &
+                          defor12, defor13, defor23,             &
+                          u, v, w, tke, ust, mu, fnm, fnp,       &
+                          cf1, cf2, cf3, msftx, msfty,           &
+                          xkmh, xkmv,                            &
+                          rdx, rdy, zx, zy, rdz, rdzw, dn, dnw,  &
+                          ids, ide, jds, jde, kds, kde,          &
+                          ims, ime, jms, jme, kms, kme,          &
+                          its, ite, jts, jte, kts, kte           )
+
+! History:     Sep 2003   Rewritten by George Bryan and Jason Knievel,
+!                         NCAR
+!              Oct 2001   Converted to mass core by Bill Skamarock, NCAR
+!              Aug 2000   Original code by Shu-Hua Chen, UC-Davis
+
+! Purpose:     This routine calculates the production of turbulent
+!              kinetic energy by stresses due to sheared wind.
+
+! References:  Klemp and Wilhelmson (JAS 1978)
+!              Deardorff (B-L Meteor 1980) 
+!              Chen and Dudhia (NCAR WRF physics report 2000)
+
+! Key:
+
+! avg          temporary working array
+! cf1          
+! cf2         
+! cf3
+! defor11      deformation term ( du/dx + du/dx )
+! defor12      deformation term ( dv/dx + du/dy ); same as defor21
+! defor13      deformation term ( dw/dx + du/dz ); same as defor31
+! defor22      deformation term ( dv/dy + dv/dy )
+! defor23      deformation term ( dw/dy + dv/dz ); same as defor32
+! defor33      deformation term ( dw/dz + dw/dz )
+! div          3-d divergence
+! dn
+! dnw
+! fnm
+! fnp
+! msftx
+! msfty
+! rdx
+! rdy
+! tendency
+! titau        tau (stress tensor) with a tilde, indicating division by
+!              a map-scale factor and the fraction of the total modeled
+!              atmosphere beneath a given altitude (titau = tau/m/zeta)
+! tke          turbulent kinetic energy
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte
+
+    REAL, INTENT( IN )  &
+    :: cf1, cf2, cf3, rdx, rdy
+
+    REAL, DIMENSION( kms:kme ), INTENT( IN )  &
+    :: fnm, fnp, dn, dnw
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: msftx, msfty
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( INOUT )  &
+    :: tendency
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &  
+    :: defor11, defor22, defor33, defor12, defor13, defor23,    &
+       tke, xkmh, xkmv, zx, zy, u, v, w, rdz, rdzw
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: mu
+
+    REAL, DIMENSION( ims:ime, jms:jme ), INTENT( IN )  &
+    :: ust
+
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k, ktf, ktes1, ktes2,      &
+       i_start, i_end, j_start, j_end,  &
+       is_ext, ie_ext, js_ext, je_ext   
+
+    REAL  &
+    :: mtau
+
+    REAL, DIMENSION( its-1:ite+1, kts:kte, jts-1:jte+1 )  &
+    :: avg, titau, tmp2
+
+    REAL, DIMENSION( its:ite, kts:kte, jts:jte )  &
+    :: titau12, tmp1, zxavg, zyavg
+
+    REAL :: absU, cd0, Cd
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    ktf    = MIN( kte, kde-1 )
+    ktes1  = kte-1
+    ktes2  = kte-2
+   
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+    IF ( config_flags%open_xs .OR. config_flags%specified .OR. &
+         config_flags%nested ) i_start = MAX( ids+1, its )
+    IF ( config_flags%open_xe .OR. config_flags%specified .OR. &
+         config_flags%nested ) i_end   = MIN( ide-2, ite )
+    IF ( config_flags%open_ys .OR. config_flags%specified .OR. &
+         config_flags%nested ) j_start = MAX( jds+1, jts )
+    IF ( config_flags%open_ye .OR. config_flags%specified .OR. &
+         config_flags%nested ) j_end   = MIN( jde-2, jte )
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      zxavg(i,k,j) = 0.25 * ( zx(i,k  ,j) + zx(i+1,k  ,j) + &
+                              zx(i,k+1,j) + zx(i+1,k+1,j)  )
+      zyavg(i,k,j) = 0.25 * ( zy(i,k  ,j) + zy(i,k  ,j+1) + &
+                              zy(i,k+1,j) + zy(i,k+1,j+1)  )
+    END DO
+    END DO
+    END DO
+
+! Begin calculating production of turbulence due to shear.  The approach
+! is to add together contributions from six terms, each of which is the
+! square of a deformation that is then multiplied by an exchange
+! coefficiant.  The same exchange coefficient is assumed for horizontal
+! and vertical coefficients for some of the terms (the vertical value is
+! the one used). 
+
+! For defor11.
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tendency(i,k,j) = tendency(i,k,j) + 0.5 *  &
+                        mu(i,j) * xkmh(i,k,j) * ( ( defor11(i,k,j) )**2 )
+    END DO
+    END DO
+    END DO
+
+! For defor22.
+
+    DO j = j_start, j_end 
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tendency(i,k,j) = tendency(i,k,j) + 0.5 *  &
+                        mu(i,j) * xkmh(i,k,j) * ( ( defor22(i,k,j) )**2 )
+    END DO
+    END DO
+    END DO
+
+! For defor33.
+
+    DO j = j_start, j_end 
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tendency(i,k,j) = tendency(i,k,j) + 0.5 *  &
+                        mu(i,j) * xkmv(i,k,j) * ( ( defor33(i,k,j) )**2 )
+    END DO
+    END DO
+    END DO
+
+! For defor12.
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      avg(i,k,j) = 0.25 *  &
+                   ( ( defor12(i  ,k,j)**2 ) + ( defor12(i  ,k,j+1)**2 ) +  &
+                     ( defor12(i+1,k,j)**2 ) + ( defor12(i+1,k,j+1)**2 ) )
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tendency(i,k,j) = tendency(i,k,j) + mu(i,j) * xkmh(i,k,j) * avg(i,k,j)
+    END DO
+    END DO
+    END DO
+
+! For defor13.
+
+    DO j = j_start, j_end
+    DO k = kts+1, ktf
+    DO i = i_start, i_end+1
+      tmp2(i,k,j) = defor13(i,k,j)
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO i = i_start, i_end+1
+      tmp2(i,kts  ,j) = 0.0
+      tmp2(i,ktf+1,j) = 0.0
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      avg(i,k,j) = 0.25 *  &
+                   ( ( tmp2(i  ,k+1,j)**2 ) + ( tmp2(i  ,k,j)**2 ) +  &
+                     ( tmp2(i+1,k+1,j)**2 ) + ( tmp2(i+1,k,j)**2 ) )
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tendency(i,k,j) = tendency(i,k,j) + mu(i,j) * xkmv(i,k,j) * avg(i,k,j)
+    END DO
+    END DO
+    END DO
+
+!MARTA: add the drag at the surface; WCS 040331
+    K=KTS
+
+  uflux: SELECT CASE( config_flags%isfflx )
+  CASE (0) ! Assume cd a constant, specified in namelist
+
+    cd0 = config_flags%tke_drag_coefficient  ! drag coefficient set 
+                                             ! in namelist.input
+    DO j = j_start, j_end   
+    DO i = i_start, i_end
+
+      absU=0.5*sqrt((u(i,k,j)+u(i+1,k,j))**2+(v(i,k,j)+v(i,k,j+1))**2)
+      Cd = cd0
+      tendency(i,k,j) = tendency(i,k,j) +       &
+           mu(i,j)*( (u(i,k,j)+u(i+1,k,j))*0.5* &
+                     Cd*absU*(defor13(i,kts+1,j)+defor13(i+1,kts+1,j))*0.5 )
+
+    END DO
+    END DO
+
+  CASE (1,2) ! ustar computed from surface routine
+
+    PRINT *, 'USE u star (surf drag) from PHYSICS', ust(i_start,j_start)
+    DO j = j_start, j_end
+    DO i = i_start, i_end
+
+      absU=0.5*sqrt((u(i,k,j)+u(i+1,k,j))**2+(v(i,k,j)+v(i,k,j+1))**2)+epsilon
+      Cd = (ust(i,j)**2)/(absU**2)
+      tendency(i,k,j) = tendency(i,k,j) +       &
+           mu(i,j)*( (u(i,k,j)+u(i+1,k,j))*0.5* &
+                     Cd*absU*(defor13(i,kts+1,j)+defor13(i+1,kts+1,j))*0.5 )
+
+    END DO
+    END DO
+
+  CASE DEFAULT
+    CALL wrf_error_fatal( 'isfflx value invalid for diff_opt=2' )
+  END SELECT uflux
+! end of MARTA/WCS change
+
+! For defor23.
+
+    DO j = j_start, j_end+1
+    DO k = kts+1, ktf
+    DO i = i_start, i_end
+      tmp2(i,k,j) = defor23(i,k,j)
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end+1
+    DO i = i_start, i_end
+      tmp2(i,kts,  j) = 0.0
+      tmp2(i,ktf+1,j) = 0.0
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      avg(i,k,j) = 0.25 *  &
+                   ( ( tmp2(i,k+1,j  )**2 ) + ( tmp2(i,k,j  )**2) +  &
+                     ( tmp2(i,k+1,j+1)**2 ) + ( tmp2(i,k,j+1)**2) )
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO k = kts, ktf
+    DO i = i_start, i_end
+      tendency(i,k,j) = tendency(i,k,j) + mu(i,j) * xkmv(i,k,j) * avg(i,k,j)
+    END DO
+    END DO
+    END DO
+
+!MARTA: add the drag at the surface; WCS 040331
+    K=KTS
+
+  vflux: SELECT CASE( config_flags%isfflx )
+  CASE (0) ! Assume cd a constant, specified in namelist
+
+    cd0 = config_flags%tke_drag_coefficient   ! constant drag coefficient 
+                                              ! set in namelist.input
+    DO j = j_start, j_end   
+    DO i = i_start, i_end
+
+      absU=0.5*sqrt((u(i,k,j)+u(i+1,k,j))**2+(v(i,k,j)+v(i,k,j+1))**2)
+      Cd = cd0
+      tendency(i,k,j) = tendency(i,k,j) +       &
+           mu(i,j)*( (v(i,k,j)+v(i,k,j+1))*0.5* &
+                     Cd*absU*(defor23(i,kts+1,j)+defor23(i,kts+1,j+1))*0.5 )
+
+    END DO
+    END DO
+
+  CASE (1,2) ! ustar computed from surface routine
+
+    DO j = j_start, j_end   
+    DO i = i_start, i_end
+
+      absU=0.5*sqrt((u(i,k,j)+u(i+1,k,j))**2+(v(i,k,j)+v(i,k,j+1))**2)+epsilon
+      Cd = (ust(i,j)**2)/(absU**2)
+      tendency(i,k,j) = tendency(i,k,j) +       &
+           mu(i,j)*( (v(i,k,j)+v(i,k,j+1))*0.5* &
+                     Cd*absU*(defor23(i,kts+1,j)+defor23(i,kts+1,j+1))*0.5 )
+
+    END DO
+    END DO
+
+  CASE DEFAULT
+    CALL wrf_error_fatal( 'isfflx value invalid for diff_opt=2' )
+  END SELECT vflux
+! end of MARTA/WCS change
+
+    END SUBROUTINE tke_shear
+
+!=======================================================================
+!=======================================================================
+
+    SUBROUTINE compute_diff_metrics( config_flags, ph, phb, z, rdz, rdzw,  &
+                                     zx, zy, rdx, rdy,                     &
+                                     ids, ide, jds, jde, kds, kde,         &
+                                     ims, ime, jms, jme, kms, kme,         &
+                                     its, ite, jts, jte, kts, kte         )
+
+!-----------------------------------------------------------------------
+! Begin declarations.
+
+    IMPLICIT NONE
+
+    TYPE( grid_config_rec_type ), INTENT( IN )  &
+    :: config_flags
+
+    INTEGER, INTENT( IN )  &
+    :: ids, ide, jds, jde, kds, kde,  &
+       ims, ime, jms, jme, kms, kme,  &
+       its, ite, jts, jte, kts, kte
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( IN )  &
+    :: ph, phb
+
+    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT( OUT )  &
+    :: rdz, rdzw, zx, zy, z
+
+    REAL, INTENT( IN )  &
+    :: rdx, rdy
+
+! Local variables.
+
+    INTEGER  &
+    :: i, j, k, i_start, i_end, j_start, j_end, ktf
+
+! End declarations.
+!-----------------------------------------------------------------------
+
+    ktf = MIN( kte, kde-1 )
+
+! Bug fix, WCS, 22 april 2002.
+
+! We need rdzw in halo for average to u and v points.
+
+    j_start = jts-1
+    j_end   = jte
+
+! Begin with dz computations.
+
+    DO j = j_start, j_end
+
+      IF ( ( j_start >= jts ) .AND. ( j_end <= MIN( jte, jde-1 ) ) ) THEN
+        i_start = its-1
+        i_end   = ite
+      ELSE
+        i_start = its
+        i_end   = MIN( ite, ide-1 )
+      END IF
+
+! Compute z at w points for rdz and rdzw computations.  We'll switch z
+! to z at p points before returning
+
+      DO k = 1, kte
+
+! Bug fix, WCS, 22 april 2002
+
+      DO i = i_start, i_end
+        z(i,k,j) = ( ph(i,k,j) + phb(i,k,j) ) / g
+      END DO
+      END DO
+
+      DO k = 1, ktf
+      DO i = i_start, i_end
+        rdzw(i,k,j) = 1.0 / ( z(i,k+1,j) - z(i,k,j) )
+      END DO
+      END DO
+
+      DO k = 2, ktf
+      DO i = i_start, i_end
+        rdz(i,k,j) = 2.0 / ( z(i,k+1,j) - z(i,k-1,j) )
+      END DO
+      END DO
+
+! Bug fix, WCS, 22 april 2002; added the following code
+
+      DO i = i_start, i_end
+        rdz(i,1,j) = 2./(z(i,2,j)-z(i,1,j))
+      END DO
+
+    END DO
+
+! End bug fix.
+
+! Now compute zx and zy; we'll assume that the halo for ph and phb is
+! properly filled.
+
+    i_start = its
+    i_end   = MIN( ite, ide-1 )
+    j_start = jts
+    j_end   = MIN( jte, jde-1 )
+
+    DO j = j_start, j_end
+    DO k = 1, kte
+    DO i = MAX( ids+1, its ), i_end
+      zx(i,k,j) = rdx * ( phb(i,k,j) - phb(i-1,k,j) ) / g
+    END DO
+    END DO
+    END DO
+
+    DO j = j_start, j_end
+    DO k = 1, kte
+    DO i = MAX( ids+1, its ), i_end
+      zx(i,k,j) = zx(i,k,j) + rdx * ( ph(i,k,j) - ph(i-1,k,j) ) / g
+    END DO
+    END DO
+    END DO
+
+    DO j = MAX( jds+1, jts ), j_end
+    DO k = 1, kte
+    DO i = i_start, i_end
+      zy(i,k,j) = rdy * ( phb(i,k,j) - phb(i,k,j-1) ) / g
+    END DO
+    END DO
+    END DO
+
+    DO j = MAX( jds+1, jts ), j_end
+    DO k = 1, kte
+    DO i = i_start, i_end
+      zy(i,k,j) = zy(i,k,j) + rdy * ( ph(i,k,j) - ph(i,k,j-1) ) / g
+    END DO
+    END DO
+    END DO
+
+! Some b.c. on zx and zy.
+
+    IF ( .NOT. config_flags%periodic_x ) THEN
+
+      IF ( ite == ide ) THEN
+        DO j = j_start, j_end
+        DO k = 1, ktf
+          zx(ide,k,j) = 0.0
+        END DO
+        END DO
+      END IF
+
+      IF ( its == ids ) THEN
+        DO j = j_start, j_end
+        DO k = 1, ktf
+          zx(ids,k,j) = 0.0
+        END DO
+        END DO
+      END IF
+
+    ELSE
+
+      IF ( ite == ide ) THEN
+        DO j=j_start,j_end
+        DO k=1,ktf
+         zx(ide,k,j) = rdx * ( phb(ide,k,j) - phb(ide-1,k,j) ) / g
+        END DO
+        END DO
+
+        DO j = j_start, j_end
+        DO k = 1, ktf
+          zx(ide,k,j) = zx(ide,k,j) + rdx * ( ph(ide,k,j) - ph(ide-1,k,j) ) / g
+        END DO
+        END DO
+      END IF
+
+      IF ( its == ids ) THEN
+        DO j = j_start, j_end
+        DO k = 1, ktf
+          zx(ids,k,j) = rdx * ( phb(ids,k,j) - phb(ids-1,k,j) ) / g
+        END DO
+        END DO
+
+        DO j =j_start,j_end
+        DO k =1,ktf
+          zx(ids,k,j) = zx(ids,k,j) + rdx * ( ph(ids,k,j) - ph(ids-1,k,j) ) / g
+        END DO
+        END DO
+      END IF
+
+    END IF
+
+    IF ( .NOT. config_flags%periodic_y ) THEN
+
+      IF ( jte == jde ) THEN
+        DO k =1, ktf
+        DO i =i_start, i_end
+          zy(i,k,jde) = 0.0
+        END DO
+        END DO
+      END IF
+
+      IF ( jts == jds ) THEN
+        DO k =1, ktf
+        DO i =i_start, i_end
+          zy(i,k,jds) = 0.0
+        END DO
+        END DO
+      END IF
+
+    ELSE
+
+      IF ( jte == jde ) THEN
+        DO j=j_start, j_end
+        DO k=1, ktf
+          zy(i,k,jde) = rdy * ( phb(i,k,jde) - phb(i,k,jde-1) ) / g
+        END DO
+        END DO
+
+        DO j = j_start, j_end
+        DO k = 1, ktf
+          zy(i,k,jde) = zy(i,k,jde) + rdy * ( ph(i,k,jde) - ph(i,k,jde-1) ) / g
+        END DO
+        END DO
+      END IF
+
+      IF ( jts == jds ) THEN
+        DO j = j_start, j_end
+        DO k = 1, ktf
+          zy(i,k,jds) = rdy * ( phb(i,k,jds) - phb(i,k,jds-1) ) / g
+        END DO
+        END DO
+
+        DO j = j_start, j_end
+        DO k = 1, ktf
+          zy(i,k,jds) = zy(i,k,jds) + rdy * ( ph(i,k,jds) - ph(i,k,jds-1) ) / g
+        END DO
+        END DO
+      END IF
+
+    END IF
+      
+! Calculate z at p points.
+
+    DO j = j_start, j_end
+      DO k = 1, ktf
+      DO i = i_start, i_end
+        z(i,k,j) = 0.5 *  &
+                   ( ph(i,k,j) + phb(i,k,j) + ph(i,k+1,j) + phb(i,k+1,j) ) / g
+      END DO
+      END DO
+    END DO
+
+    END SUBROUTINE compute_diff_metrics
+
+!=======================================================================
+!=======================================================================
+
+    END MODULE module_diffusion_em
+
+!=======================================================================
+!=======================================================================
+
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_driver_constants.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_driver_constants.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_driver_constants.F	(revision 142)
@@ -0,0 +1,108 @@
+!WRF:DRIVER_LAYER:CONSTANTS
+!
+!  This MODULE contains all of the constants used in the model.  These
+!  are separated by uage within the code.
+
+MODULE module_driver_constants
+
+   !  0. The following tells the rest of the model what data ordering we are
+   !     using
+
+   INTEGER , PARAMETER :: DATA_ORDER_XYZ = 1
+   INTEGER , PARAMETER :: DATA_ORDER_YXZ = 2
+   INTEGER , PARAMETER :: DATA_ORDER_ZXY = 3
+   INTEGER , PARAMETER :: DATA_ORDER_ZYX = 4
+   INTEGER , PARAMETER :: DATA_ORDER_XZY = 5
+   INTEGER , PARAMETER :: DATA_ORDER_YZX = 6
+   INTEGER , PARAMETER :: DATA_ORDER_XY = DATA_ORDER_XYZ
+   INTEGER , PARAMETER :: DATA_ORDER_YX = DATA_ORDER_YXZ
+
+
+#include <model_data_order.inc>
+
+   !  1. Following are constants for use in defining maximal values for array
+   !     definitions.  
+   !
+
+   !  The maximum number of levels in the model is how deeply the domains may
+   !  be nested.
+
+   INTEGER , PARAMETER :: max_levels      =  20
+
+   !  The maximum number of nests that can depend on a single parent and other way round
+
+   INTEGER , PARAMETER :: max_nests        =  20
+
+   !  The maximum number of parents that a nest can have (simplified assumption -> one only)
+
+   INTEGER , PARAMETER :: max_parents      =  1
+
+   !  The maximum number of domains is how many grids the model will be running.
+
+   INTEGER , PARAMETER :: max_domains     =   ( MAX_DOMAINS_F - 1 ) / 2 + 1
+
+   !  The maximum number of nest move specifications allowed in a namelist
+
+   INTEGER , PARAMETER :: max_moves       =   50
+
+   !  The maximum number of eta levels
+
+   INTEGER , PARAMETER :: max_eta         =   501
+
+   !  The maximum number of outer iterations (for DA minimisation)
+
+   INTEGER , PARAMETER :: max_outer_iterations = 10
+
+   !  The maximum number of instruments (for radiance DA)
+
+   INTEGER , PARAMETER :: max_instruments =   30
+
+   !  2. Following related to driver leve data structures for DM_PARALLEL communications
+
+#ifdef DM_PARALLEL
+   INTEGER , PARAMETER :: max_comms       =   1024
+#else
+   INTEGER , PARAMETER :: max_comms       =   1
+#endif
+
+   !  3. Following is information related to the file I/O.
+
+   !  These are the bounds of the available FORTRAN logical unit numbers for the file I/O.
+   !  Only logical unti numbers within these bounds will be chosen for I/O unit numbers.
+
+   INTEGER , PARAMETER :: min_file_unit = 10
+   INTEGER , PARAMETER :: max_file_unit = 99
+
+   !  4. Unfortunately, the following definition is needed here (rather
+   !     than the more logical place in share/module_model_constants.F)
+   !     for the namelist reads in frame/module_configure.F, and for some
+   !     conversions in share/set_timekeeping.F
+   !     Actually, using it here will mean that we don't need to set it
+   !     in share/module_model_constants.F, since this file will be
+   !     included (USEd) in:
+   !        frame/module_configure.F
+   !     which will be USEd in:
+   !        share/module_bc.F
+   !     which will be USEd in:
+   !        phys/module_radiation_driver.F
+   !     which is the other important place for it to be, and where
+   !     it is passed as a subroutine parameter to any physics subroutine.
+   !
+   !     P2SI is the number of SI seconds in an planetary solar day
+   !     divided by the number of SI seconds in an earth solar day
+!#if defined MARS
+!   !     For Mars, P2SI = 88775.2/86400.
+!   REAL , PARAMETER :: P2SI = 1.0274907
+!#elif defined TITAN
+!   !     For Titan, P2SI = 1378080.0/86400.
+!   REAL , PARAMETER :: P2SI = 15.95
+!#else
+   !     Default for Earth
+   REAL , PARAMETER :: P2SI = 1.0
+!!!!MARS
+!   REAL , PARAMETER :: P2SI = 1.0274907
+!#endif
+ CONTAINS
+   SUBROUTINE init_module_driver_constants
+   END SUBROUTINE init_module_driver_constants
+ END MODULE module_driver_constants
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_em.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_em.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_em.F	(revision 142)
@@ -0,0 +1,1781 @@
+!WRF:MODEL_LAYER:DYNAMICS
+!
+
+MODULE module_em
+
+   USE module_model_constants
+   USE module_advect_em
+   USE module_big_step_utilities_em
+   USE module_state_description
+   USE module_damping_em
+
+CONTAINS
+
+!------------------------------------------------------------------------
+
+SUBROUTINE rk_step_prep  ( config_flags, rk_step,           &
+                           u, v, w, t, ph, mu,              &
+                           moist,                           &
+                           ru, rv, rw, ww, php, alt,        &
+                           muu, muv,                        &
+                           mub, mut, phb, pb, p, al, alb,   &
+                           cqu, cqv, cqw,                   &
+                           msfux, msfuy,                    &
+                           msfvx, msfvx_inv, msfvy,         &
+                           msftx, msfty,                    &
+                           fnm, fnp, dnw, rdx, rdy,         &
+                           n_moist,                         &
+                           ids, ide, jds, jde, kds, kde,    &
+                           ims, ime, jms, jme, kms, kme,    &
+                           its, ite, jts, jte, kts, kte    )
+
+   IMPLICIT NONE
+
+
+   !  Input data.
+
+   TYPE(grid_config_rec_type   ) ,   INTENT(IN   ) :: config_flags
+
+   INTEGER ,       INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                    ims, ime, jms, jme, kms, kme, &
+                                    its, ite, jts, jte, kts, kte
+
+   INTEGER ,       INTENT(IN   ) :: n_moist, rk_step
+
+   REAL ,          INTENT(IN   ) :: rdx, rdy
+
+   REAL , DIMENSION(  ims:ime , kms:kme, jms:jme ) ,                      &
+                                               INTENT(IN   ) ::  u,       &
+                                                                 v,       &
+                                                                 w,       &
+                                                                 t,       &
+                                                                 ph,      &
+                                                                 phb,     &
+                                                                 pb,      &
+                                                                 al,      &
+                                                                 alb
+
+   REAL , DIMENSION( ims:ime , kms:kme , jms:jme  ) ,                     &
+                                               INTENT(  OUT) ::  ru,      &
+                                                                 rv,      &
+                                                                 rw,      &
+                                                                 ww,      &
+                                                                 php,     &
+                                                                 cqu,     &
+                                                                 cqv,     &
+                                                                 cqw,     &
+                                                                 alt
+
+   REAL , DIMENSION(  ims:ime , kms:kme, jms:jme ) ,                      &
+                                               INTENT(IN   ) ::  p
+                                                                 
+
+
+
+   REAL , DIMENSION( ims:ime, kms:kme, jms:jme, n_moist ), INTENT(   IN) :: &
+                                                           moist
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,    INTENT(IN   ) :: msftx,     &
+                                                               msfty,     &
+                                                               msfux,     &
+                                                               msfuy,     &
+                                                               msfvx,     &
+                                                               msfvx_inv, &
+                                                               msfvy,     &
+                                                               mu,        &
+                                                               mub
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,    INTENT(  OUT) :: muu,    &
+                                                               muv,    &
+                                                               mut
+
+   REAL , DIMENSION( kms:kme ) ,    INTENT(IN   ) :: fnm, fnp, dnw
+
+   integer :: k
+
+
+!<DESCRIPTION>
+!
+!  rk_step_prep prepares a number of diagnostic quantities 
+!  in preperation for a Runge-Kutta timestep.  subroutines called
+!  by rk_step_prep calculate
+!
+!  (1) total column dry air mass (mut, call to calculate_full)
+!
+!  (2) total column dry air mass at u and v points 
+!      (muu, muv, call to calculate_mu_uv)
+!
+!  (3) mass-coupled velocities for advection
+!      (ru, rv, and rw, call to couple_momentum)
+!
+!  (4) omega (call to calc_ww_cp)
+!
+!  (5) moisture coefficients (cqu, cqv, cqw, call to calc_cq)
+!
+!  (6) inverse density (alt, call to calc_alt)
+!
+!  (7) geopotential at pressure points (php, call to calc_php)
+!
+!</DESCRIPTION>
+
+   CALL calculate_full( mut, mub, mu,             &
+                        ids, ide, jds, jde, 1, 2, &
+                        ims, ime, jms, jme, 1, 1, &
+                        its, ite, jts, jte, 1, 1 )
+
+   CALL calc_mu_uv ( config_flags,                  &
+                     mu, mub, muu, muv,             &
+                     ids, ide, jds, jde, kds, kde,  &
+                     ims, ime, jms, jme, kms, kme,  &
+                     its, ite, jts, jte, kts, kte  )
+
+   CALL couple_momentum( muu, ru, u, msfuy,             &
+                         muv, rv, v, msfvx, msfvx_inv,  &
+                         mut, rw, w, msfty,             &
+                         ids, ide, jds, jde, kds, kde,  &
+                         ims, ime, jms, jme, kms, kme,  &
+                         its, ite, jts, jte, kts, kte  )
+
+!  new call, couples V with mu, also has correct map factors.  WCS, 3 june 2001
+   CALL calc_ww_cp ( u, v, mu, mub, ww,               &
+                     rdx, rdy, msftx, msfty,          &
+                     msfux, msfuy, msfvx, msfvx_inv,  &
+                     msfvy, dnw,                      &
+                     ids, ide, jds, jde, kds, kde,    &
+                     ims, ime, jms, jme, kms, kme,    &
+                     its, ite, jts, jte, kts, kte    )
+
+   CALL calc_cq ( moist, cqu, cqv, cqw, n_moist, &
+                  ids, ide, jds, jde, kds, kde,  &
+                  ims, ime, jms, jme, kms, kme,  &
+                  its, ite, jts, jte, kts, kte  )
+
+   CALL calc_alt ( alt, al, alb,                 &
+                   ids, ide, jds, jde, kds, kde, &
+                   ims, ime, jms, jme, kms, kme, &
+                   its, ite, jts, jte, kts, kte )
+
+   CALL calc_php ( php, ph, phb,                 &
+                   ids, ide, jds, jde, kds, kde, &
+                   ims, ime, jms, jme, kms, kme, &
+                   its, ite, jts, jte, kts, kte )
+
+END SUBROUTINE rk_step_prep
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE rk_tendency ( config_flags, rk_step,                           &
+                         ru_tend, rv_tend, rw_tend, ph_tend, t_tend,      &
+                         ru_tendf, rv_tendf, rw_tendf, ph_tendf, t_tendf, &
+                         mu_tend, u_save, v_save, w_save, ph_save,        &
+                         t_save, mu_save, RTHFTEN,                        &
+                         ru, rv, rw, ww,                                  &
+                         u, v, w, t, ph,                                  &
+                         u_old, v_old, w_old, t_old, ph_old,              &
+                         h_diabatic, phb,t_init,                          &
+                         mu, mut, muu, muv, mub,                          &
+                         al, alt, p, pb, php, cqu, cqv, cqw,              &
+                         u_base, v_base, t_base, qv_base, z_base,         &
+                         msfux, msfuy, msfvx, msfvx_inv,                  &
+                         msfvy, msftx, msfty,                             &
+                         xlat, f, e, sina, cosa,                          &
+                         fnm, fnp, rdn, rdnw,                             &
+                         dt, rdx, rdy, khdif, kvdif, xkmhd, xkhh,         &
+                         diff_6th_opt, diff_6th_factor,                   &
+                         dampcoef,zdamp,damp_opt,                         &
+                         cf1, cf2, cf3, cfn, cfn1, n_moist,               &
+                         non_hydrostatic, top_lid,                        &
+                         u_frame, v_frame,                                &
+                         ids, ide, jds, jde, kds, kde,                    &
+                         ims, ime, jms, jme, kms, kme,                    &
+                         its, ite, jts, jte, kts, kte,                    &
+                         max_vert_cfl, max_horiz_cfl)
+
+   IMPLICIT NONE
+
+   !  Input data.
+
+   TYPE(grid_config_rec_type)    ,           INTENT(IN   ) :: config_flags
+
+   INTEGER ,               INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte
+
+   LOGICAL ,               INTENT(IN   ) :: non_hydrostatic, top_lid
+
+   INTEGER ,               INTENT(IN   ) :: n_moist, rk_step
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme  ) ,              &
+                                        INTENT(IN   ) :: ru,      &
+                                                         rv,      &
+                                                         rw,      &
+                                                         ww,      & 
+                                                         u,       &
+                                                         v,       &
+                                                         w,       &
+                                                         t,       &
+                                                         ph,      &
+                                                         u_old,   &
+                                                         v_old,   &
+                                                         w_old,   &
+                                                         t_old,   &
+                                                         ph_old,  &
+                                                         phb,     &
+                                                         al,      &
+                                                         alt,     &
+                                                         p,       &
+                                                         pb,      &
+                                                         php,     &
+                                                         cqu,     &
+                                                         cqv,     &
+                                                         t_init,  &
+                                                         xkmhd,   &
+                                                         xkhh,    &
+                                                         h_diabatic
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme  ) ,              &
+                                        INTENT(OUT  ) :: ru_tend, &
+                                                         rv_tend, &
+                                                         rw_tend, &
+                                                         t_tend,  &
+                                                         ph_tend, &
+                                                         RTHFTEN, &
+                                                          u_save, &
+                                                          v_save, &
+                                                          w_save, &
+                                                         ph_save, &
+                                                          t_save
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme  ) ,               &
+                                        INTENT(INOUT) :: ru_tendf, &
+                                                         rv_tendf, &
+                                                         rw_tendf, &
+                                                         t_tendf,  &
+                                                         ph_tendf, &
+                                                         cqw
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(  OUT) :: mu_tend, &
+                                                                    mu_save
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: msfux,   &
+                                                                    msfuy,   &
+                                                                    msfvx,   &
+                                                                    msfvx_inv,   &
+                                                                    msfvy,   &
+                                                                    msftx,   &
+                                                                    msfty,   &
+                                                                    xlat,    & 
+                                                                    f,       &
+                                                                    e,       &
+                                                                    sina,    &
+                                                                    cosa,    &
+                                                                    mu,      &
+                                                                    mut,     &
+                                                                    mub,     &
+                                                                    muu,     &
+                                                                    muv
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: fnm,     &
+                                                                  fnp,     &
+                                                                  rdn,     &
+                                                                  rdnw,    &
+                                                                  u_base,  &
+                                                                  v_base,  &
+                                                                  t_base,  &
+                                                                  qv_base, &
+                                                                  z_base
+
+   REAL ,                                      INTENT(IN   ) :: rdx,     &
+                                                                rdy,     &
+                                                                dt,      &
+                                                                u_frame, &
+                                                                v_frame, &
+                                                                khdif,   &
+                                                                kvdif
+   INTEGER, INTENT( IN ) :: diff_6th_opt
+   REAL,    INTENT( IN ) :: diff_6th_factor
+
+   INTEGER, INTENT( IN ) :: damp_opt
+
+   REAL, INTENT( IN ) :: zdamp, dampcoef
+
+   REAL, INTENT( OUT ) :: max_horiz_cfl
+   REAL, INTENT( OUT ) :: max_vert_cfl
+
+   REAL    :: kdift, khdq, kvdq, cfn, cfn1, cf1, cf2, cf3
+   INTEGER :: i,j,k
+   INTEGER :: time_step
+
+!<DESCRIPTION>
+!
+!  rk_tendency computes the large-timestep tendency terms in the 
+!  momentum, thermodynamic (theta), and geopotential equations.  
+!  These terms include:
+!
+!  (1) advection (for u, v, w, theta - calls to advect_u, advect_v,
+!                 advect_w, and advact_scalar).
+!
+!  (2) geopotential equation terms (advection and "gw" - call to rhs_ph).
+!
+!  (3) buoyancy term in vertical momentum equation (call to pg_buoy_w).
+!
+!  (4) Coriolis and curvature terms in u,v,w momentum equations
+!      (calls to subroutines coriolis, curvature)
+!
+!  (5) 3D diffusion on coordinate surfaces.
+!
+!</DESCRIPTION>
+
+   CALL zero_tend ( ru_tend,                      &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   CALL zero_tend ( rv_tend,                      &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   CALL zero_tend ( rw_tend,                      &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   CALL zero_tend ( t_tend,                       &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   CALL zero_tend ( ph_tend,                      &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   CALL zero_tend ( u_save,                       &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   CALL zero_tend ( v_save,                       &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   CALL zero_tend ( w_save,                       &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   CALL zero_tend ( ph_save,                       &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   CALL zero_tend ( t_save,                       &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+   CALL zero_tend ( mu_tend,                  &
+                    ids, ide, jds, jde, 1, 1, &
+                    ims, ime, jms, jme, 1, 1, &
+                    its, ite, jts, jte, 1, 1 )
+
+   CALL zero_tend ( mu_save,                  &
+                    ids, ide, jds, jde, 1, 1, &
+                    ims, ime, jms, jme, 1, 1, &
+                    its, ite, jts, jte, 1, 1 )
+
+     !  advection tendencies
+     CALL nl_get_time_step ( 1, time_step )
+
+     CALL advect_u ( u, u , ru_tend, ru, rv, ww,   &
+                     mut, time_step, config_flags, &
+                     msfux, msfuy, msfvx, msfvy,   &
+                     msftx, msfty,                 &
+                     fnm, fnp, rdx, rdy, rdnw,     &
+                     ids, ide, jds, jde, kds, kde, &
+                     ims, ime, jms, jme, kms, kme, &
+                     its, ite, jts, jte, kts, kte )
+
+     CALL advect_v ( v, v , rv_tend, ru, rv, ww,   &
+                     mut, time_step, config_flags, &
+                     msfux, msfuy, msfvx, msfvy,   &
+                     msftx, msfty,                 &
+                     fnm, fnp, rdx, rdy, rdnw,     &
+                     ids, ide, jds, jde, kds, kde, &
+                     ims, ime, jms, jme, kms, kme, &
+                     its, ite, jts, jte, kts, kte )
+
+     IF (non_hydrostatic)                          &
+     CALL advect_w ( w, w, rw_tend, ru, rv, ww,    &
+                     mut, time_step, config_flags, &
+                     msfux, msfuy, msfvx, msfvy,   &
+                     msftx, msfty,                 &
+                     fnm, fnp, rdx, rdy, rdn,      &
+                     ids, ide, jds, jde, kds, kde, &
+                     ims, ime, jms, jme, kms, kme, &
+                     its, ite, jts, jte, kts, kte )
+
+!  theta flux divergence
+
+     CALL advect_scalar ( t, t, t_tend, ru, rv, ww,     &
+                          mut, time_step, config_flags, &
+                          msfux, msfuy, msfvx, msfvy,   &
+                          msftx, msfty, fnm, fnp,       &
+                          rdx, rdy, rdnw,               &
+                          ids, ide, jds, jde, kds, kde, &
+                          ims, ime, jms, jme, kms, kme, &
+                          its, ite, jts, jte, kts, kte ) 
+
+     IF ( config_flags%cu_physics == GDSCHEME  .OR.     &
+          config_flags%cu_physics == G3SCHEME ) THEN
+
+     ! theta advection only:
+
+         CALL set_tend( RTHFTEN, t_tend, msfty,          &
+                        ids, ide, jds, jde, kds, kde,    &
+                        ims, ime, jms, jme, kms, kme,    &
+                        its, ite, jts, jte, kts, kte     )
+
+     END IF
+
+     CALL rhs_ph( ph_tend, u, v, ww, ph, ph, phb, w, &
+                  mut, muu, muv,                     &
+                  fnm, fnp,                          &
+                  rdnw, cfn, cfn1, rdx, rdy,         &
+                  msfux, msfuy, msfvx,               &
+                  msfvx_inv, msfvy,                  &
+                  msftx, msfty,                      &
+                  non_hydrostatic,                   &
+                  config_flags,                      &
+                  ids, ide, jds, jde, kds, kde,      &
+                  ims, ime, jms, jme, kms, kme,      &
+                  its, ite, jts, jte, kts, kte      )
+
+  CALL horizontal_pressure_gradient( ru_tend,rv_tend,                &
+                                     ph,alt,p,pb,al,php,cqu,cqv,     &
+                                     muu,muv,mu,fnm,fnp,rdnw,        &
+                                     cf1,cf2,cf3,rdx,rdy,msfux,msfuy,&
+                                     msfvx,msfvy,msftx,msfty,        &
+                                     config_flags, non_hydrostatic,  &
+                                     top_lid,                        &
+                                     ids, ide, jds, jde, kds, kde,   &
+                                     ims, ime, jms, jme, kms, kme,   &
+                                     its, ite, jts, jte, kts, kte   )
+
+  IF (non_hydrostatic)                            &
+  CALL pg_buoy_w( rw_tend, p, cqw, mu, mub,       &
+                  rdnw, rdn, g, msftx, msfty,     &
+                  ids, ide, jds, jde, kds, kde,   &
+                  ims, ime, jms, jme, kms, kme,   &
+                  its, ite, jts, jte, kts, kte   )
+
+  CALL w_damp   ( rw_tend, max_vert_cfl,            &
+                    max_horiz_cfl,                  &
+                    u, v, ww, w, mut, rdnw,         &
+                    rdx, rdy, msfux, msfuy, msfvx,  &
+                    msfvy, dt, config_flags,        &
+                    ids, ide, jds, jde, kds, kde,   &
+                    ims, ime, jms, jme, kms, kme,   &
+                    its, ite, jts, jte, kts, kte   )
+
+  IF(config_flags%pert_coriolis) THEN
+
+    CALL perturbation_coriolis ( ru, rv, rw,                   &
+                                 ru_tend,  rv_tend,  rw_tend,  &
+                                 config_flags,                 &
+                                 u_base, v_base, z_base,       &
+                                 muu, muv, phb, ph,            &
+                                 msftx, msfty, msfux, msfuy,   &
+                                 msfvx, msfvy,                 &
+                                 f, e, sina, cosa, fnm, fnp,   &
+                                 ids, ide, jds, jde, kds, kde, &
+                                 ims, ime, jms, jme, kms, kme, &
+                                 its, ite, jts, jte, kts, kte )
+  ELSE
+    CALL coriolis ( ru, rv, rw,                   &
+                    ru_tend,  rv_tend,  rw_tend,  &
+                    config_flags,                 &
+                    msftx, msfty, msfux, msfuy,   &
+                    msfvx, msfvy,                 &
+                    f, e, sina, cosa, fnm, fnp,   &
+                    ids, ide, jds, jde, kds, kde, &
+                    ims, ime, jms, jme, kms, kme, &
+                    its, ite, jts, jte, kts, kte )
+
+  END IF
+
+  CALL curvature ( ru, rv, rw, u, v, w,            &
+                   ru_tend,  rv_tend,  rw_tend,    &
+                   config_flags,                   &
+                   msfux, msfuy, msfvx, msfvy,     &
+                   msftx, msfty,                   &
+                   xlat, fnm, fnp, rdx, rdy,       &
+                   ids, ide, jds, jde, kds, kde,   &
+                   ims, ime, jms, jme, kms, kme,   &
+                   its, ite, jts, jte, kts, kte   )
+
+! Damping option added for Held-Suarez test (also uses lw option HELDSUAREZ)
+  IF (config_flags%ra_lw_physics == HELDSUAREZ) THEN
+     CALL held_suarez_damp ( ru_tend, rv_tend,               &   
+                             ru,rv,p,pb,                     &
+                             ids, ide, jds, jde, kds, kde,   &
+                             ims, ime, jms, jme, kms, kme,   &
+                             its, ite, jts, jte, kts, kte   )
+  END IF
+
+!**************************************************************
+!
+!  Next, the terms that we integrate only with forward-in-time
+!  (evaluate with time t variables).
+!
+!**************************************************************
+
+  forward_step: IF( rk_step == 1 ) THEN
+
+    diff_opt1 : IF (config_flags%diff_opt .eq. 1) THEN
+   
+        CALL horizontal_diffusion ('u', u, ru_tendf, mut, config_flags, &
+                                        msfux, msfuy, msfvx, msfvx_inv, &
+                                        msfvy,msftx, msfty,             &
+                                        khdif, xkmhd, rdx, rdy,         &
+                                        ids, ide, jds, jde, kds, kde,   &
+                                        ims, ime, jms, jme, kms, kme,   &
+                                        its, ite, jts, jte, kts, kte   )
+
+        CALL horizontal_diffusion ('v', v, rv_tendf, mut, config_flags, &
+                                        msfux, msfuy, msfvx, msfvx_inv, &
+                                        msfvy,msftx, msfty,             &
+                                        khdif, xkmhd, rdx, rdy,         &
+                                        ids, ide, jds, jde, kds, kde,   &
+                                        ims, ime, jms, jme, kms, kme,   &
+                                        its, ite, jts, jte, kts, kte   )
+
+        CALL horizontal_diffusion ('w', w, rw_tendf, mut, config_flags, &
+                                        msfux, msfuy, msfvx, msfvx_inv, &
+                                        msfvy,msftx, msfty,             &
+                                        khdif, xkmhd, rdx, rdy,         &
+                                        ids, ide, jds, jde, kds, kde,   &
+                                        ims, ime, jms, jme, kms, kme,   &
+                                        its, ite, jts, jte, kts, kte   )
+
+        khdq = 3.*khdif
+        CALL horizontal_diffusion_3dmp ( 'm', t, t_tendf, mut,            &
+                                         config_flags, t_init,            &
+                                         msfux, msfuy, msfvx, msfvx_inv,  &
+                                         msfvy, msftx, msfty,             &
+                                         khdq , xkhh, rdx, rdy,           &
+                                         ids, ide, jds, jde, kds, kde,    &
+                                         ims, ime, jms, jme, kms, kme,    &
+                                         its, ite, jts, jte, kts, kte    )
+
+!        pbl_test : IF (config_flags%bl_pbl_physics .eq. 0) THEN
+!!!****MARS: vertical diffusion is done in the physics (TODO: consider the nonhydrostatic case ?)
+        pbl_test : IF ( (config_flags%bl_pbl_physics .eq. 0) &
+                        .AND. (.not. config_flags%modif_wrf) ) THEN
+
+          CALL vertical_diffusion_u ( u, ru_tendf, config_flags,      &
+                                      u_base,                         &
+                                      alt, muu, rdn, rdnw, kvdif,     &
+                                      ids, ide, jds, jde, kds, kde,   &
+                                      ims, ime, jms, jme, kms, kme,   &
+                                      its, ite, jts, jte, kts, kte   )
+
+          CALL vertical_diffusion_v ( v, rv_tendf, config_flags,      &
+                                      v_base,                         &
+                                      alt, muv, rdn, rdnw, kvdif,     &
+                                      ids, ide, jds, jde, kds, kde,   &
+                                      ims, ime, jms, jme, kms, kme,   &
+                                      its, ite, jts, jte, kts, kte   )
+
+          IF (non_hydrostatic)                                           &
+          CALL vertical_diffusion ( 'w', w, rw_tendf, config_flags,      &
+                                    alt, mut, rdn, rdnw, kvdif,          &
+                                    ids, ide, jds, jde, kds, kde,        &
+                                    ims, ime, jms, jme, kms, kme,        &
+                                    its, ite, jts, jte, kts, kte        )
+
+          kvdq = 3.*kvdif
+          CALL vertical_diffusion_3dmp ( t, t_tendf, config_flags, t_init,     &
+                                         alt, mut, rdn, rdnw, kvdq ,           &
+                                         ids, ide, jds, jde, kds, kde,         &
+                                         ims, ime, jms, jme, kms, kme,         &
+                                         its, ite, jts, jte, kts, kte         )
+
+        ENDIF pbl_test
+
+   !  Theta tendency computations.
+
+    END IF diff_opt1
+
+    IF ( diff_6th_opt .NE. 0 ) THEN
+
+      CALL sixth_order_diffusion( 'u', u, ru_tendf, mut, dt,          &
+                                       config_flags,                  &
+                                       diff_6th_opt, diff_6th_factor, &
+                                       ids, ide, jds, jde, kds, kde,  &
+                                       ims, ime, jms, jme, kms, kme,  &
+                                       its, ite, jts, jte, kts, kte )
+
+      CALL sixth_order_diffusion( 'v', v, rv_tendf, mut, dt,          &
+                                       config_flags,                  &
+                                       diff_6th_opt, diff_6th_factor, &
+                                       ids, ide, jds, jde, kds, kde,  &
+                                       ims, ime, jms, jme, kms, kme,  &
+                                       its, ite, jts, jte, kts, kte )
+
+      IF (non_hydrostatic)                                            & 
+      CALL sixth_order_diffusion( 'w', w, rw_tendf, mut, dt,          &
+                                       config_flags,                  &
+                                       diff_6th_opt, diff_6th_factor, &
+                                       ids, ide, jds, jde, kds, kde,  &
+                                       ims, ime, jms, jme, kms, kme,  &
+                                       its, ite, jts, jte, kts, kte )
+
+      CALL sixth_order_diffusion( 'm', t,  t_tendf, mut, dt,          &
+                                       config_flags,                  &
+                                       diff_6th_opt, diff_6th_factor, &
+                                       ids, ide, jds, jde, kds, kde,  &
+                                       ims, ime, jms, jme, kms, kme,  &
+                                       its, ite, jts, jte, kts, kte )
+
+    ENDIF
+
+    IF( damp_opt .eq. 2 )                                      &
+       CALL rk_rayleigh_damp( ru_tendf, rv_tendf,              &
+                              rw_tendf, t_tendf,               &
+                              u, v, w, t, t_init,              &
+                              mut, muu, muv, ph, phb,          &
+                              u_base, v_base, t_base, z_base,  &
+                              dampcoef, zdamp,                 &
+                              ids, ide, jds, jde, kds, kde,    &
+                              ims, ime, jms, jme, kms, kme,    &
+                              its, ite, jts, jte, kts, kte   )
+
+  END IF forward_step
+
+END SUBROUTINE rk_tendency
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE rk_addtend_dry ( ru_tend, rv_tend, rw_tend, ph_tend, t_tend,      &
+                            ru_tendf, rv_tendf, rw_tendf, ph_tendf, t_tendf, &
+                            u_save, v_save, w_save, ph_save, t_save,         &
+                            mu_tend, mu_tendf, rk_step,                      &
+                            h_diabatic, mut, msftx, msfty, msfux, msfuy,     &
+                            msfvx, msfvx_inv, msfvy,                         &
+                            ids,ide, jds,jde, kds,kde,                       &
+                            ims,ime, jms,jme, kms,kme,                       &
+                            ips,ipe, jps,jpe, kps,kpe,                       &
+                            its,ite, jts,jte, kts,kte                       )
+
+   IMPLICIT NONE
+
+   !  Input data.
+
+   INTEGER ,               INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            ips, ipe, jps, jpe, kps, kpe, &
+                                            its, ite, jts, jte, kts, kte
+   INTEGER ,               INTENT(IN   ) :: rk_step
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme  ) , INTENT(INOUT) :: ru_tend, &
+                                                                      rv_tend, &
+                                                                      rw_tend, &
+                                                                      ph_tend, &
+                                                                      t_tend,  &
+                                                                      ru_tendf, &
+                                                                      rv_tendf, &
+                                                                      rw_tendf, &
+                                                                      ph_tendf, &
+                                                                      t_tendf
+
+   REAL , DIMENSION( ims:ime , jms:jme  ) , INTENT(INOUT) :: mu_tend, &
+                                                             mu_tendf
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme  ) , INTENT(IN   ) ::  u_save,  &
+                                                                       v_save,  &
+                                                                       w_save,  &
+                                                                      ph_save,  &
+                                                                       t_save,  &
+                                                                      h_diabatic
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,         INTENT(IN   ) :: mut,       &
+                                                                    msftx,     &
+                                                                    msfty,     &
+                                                                    msfux,     &
+                                                                    msfuy,     &
+                                                                    msfvx,     &
+                                                                    msfvx_inv, &
+                                                                    msfvy
+
+
+! Local
+   INTEGER :: i, j, k
+
+!<DESCRIPTION>
+!
+! rk_addtend_dry constructs the full large-timestep tendency terms for
+! momentum (u,v,w), theta and geopotential equations.   This is accomplished
+! by combining the physics tendencies (in *tendf; these are computed 
+! the first RK substep, held fixed thereafter) with the RK tendencies 
+! (in *tend, these include advection, pressure gradient, etc; 
+! these change each rk substep).  Output is in *tend.
+!
+!</DESCRIPTION>
+
+!  Finally, add the forward-step tendency to the rk_tendency
+
+! u/v/w/save contain bc tendency that needs to be multiplied by msf
+! (u by msfuy, v by msfvx)
+!  before adding it to physics tendency (*tendf)
+! For momentum we need the final tendency to include an inverse msf
+! physics/bc tendency needs to be divided, advection tendency already has it
+
+! For scalars we need the final tendency to include an inverse msf (msfty)
+! advection tendency is OK, physics/bc tendency needs to be divided by msf
+
+   DO j = jts,MIN(jte,jde-1)
+   DO k = kts,kte-1
+   DO i = its,ite
+     ! multiply by my to uncouple u
+     IF(rk_step == 1)ru_tendf(i,k,j) = ru_tendf(i,k,j) +  u_save(i,k,j)*msfuy(i,j)
+     ! divide by my to couple u
+     ru_tend(i,k,j) = ru_tend(i,k,j) + ru_tendf(i,k,j)/msfuy(i,j)
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = jts,jte
+   DO k = kts,kte-1
+   DO i = its,MIN(ite,ide-1)
+     ! multiply by mx to uncouple v
+     IF(rk_step == 1)rv_tendf(i,k,j) = rv_tendf(i,k,j) +  v_save(i,k,j)*msfvx(i,j)
+     ! divide by mx to couple v
+     rv_tend(i,k,j) = rv_tend(i,k,j) + rv_tendf(i,k,j)*msfvx_inv(i,j)
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = jts,MIN(jte,jde-1)
+   DO k = kts,kte
+   DO i = its,MIN(ite,ide-1)
+     ! multiply by my to uncouple w
+     IF(rk_step == 1)rw_tendf(i,k,j) = rw_tendf(i,k,j) +  w_save(i,k,j)*msfty(i,j)
+     ! divide by my to couple w
+     rw_tend(i,k,j) = rw_tend(i,k,j) + rw_tendf(i,k,j)/msfty(i,j)
+     IF(rk_step == 1)ph_tendf(i,k,j) = ph_tendf(i,k,j) +  ph_save(i,k,j)
+     ! divide by my to couple scalar
+     ph_tend(i,k,j) = ph_tend(i,k,j) + ph_tendf(i,k,j)/msfty(i,j)
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = jts,MIN(jte,jde-1)
+   DO k = kts,kte-1
+   DO i = its,MIN(ite,ide-1)
+     IF(rk_step == 1)t_tendf(i,k,j) = t_tendf(i,k,j) +  t_save(i,k,j)
+     ! divide by my to couple theta
+      t_tend(i,k,j) =  t_tend(i,k,j) +  t_tendf(i,k,j)/msfty(i,j)  &
+                                     +  mut(i,j)*h_diabatic(i,k,j)/msfty(i,j)
+     ! divide by my to couple heating
+   ENDDO
+   ENDDO
+   ENDDO
+
+   DO j = jts,MIN(jte,jde-1)
+   DO i = its,MIN(ite,ide-1)
+! mu tendencies not coupled with 1/msf
+      mu_tend(i,j) =  mu_tend(i,j) +  mu_tendf(i,j)
+   ENDDO
+   ENDDO
+
+END SUBROUTINE rk_addtend_dry
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE rk_scalar_tend ( scs, sce, config_flags,          &
+                            rk_step, dt,                     &
+                            ru, rv, ww, mut, mub, mu_old,    &
+                            alt,                             &
+                            scalar_old, scalar,              &
+                            scalar_tends, advect_tend,       &
+                            RQVFTEN,                         &
+                            base, moist_step, fnm, fnp,      &
+                            msfux, msfuy, msfvx, msfvx_inv,  &
+                            msfvy, msftx, msfty,             &
+                            rdx, rdy, rdn, rdnw,             &
+                            khdif, kvdif, xkmhd,             &
+                            diff_6th_opt, diff_6th_factor,   &
+                            pd_advection,                    &
+                            ids, ide, jds, jde, kds, kde,    &
+                            ims, ime, jms, jme, kms, kme,    &
+                            its, ite, jts, jte, kts, kte    )
+
+   IMPLICIT NONE
+
+   !  Input data.
+
+   TYPE(grid_config_rec_type   ) ,   INTENT(IN   ) :: config_flags
+
+   INTEGER ,                INTENT(IN   ) :: rk_step, scs, sce
+   INTEGER ,                INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                             ims, ime, jms, jme, kms, kme, &
+                                             its, ite, jts, jte, kts, kte
+
+   LOGICAL , INTENT(IN   ) :: moist_step
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme , scs:sce ),                &
+                                         INTENT(IN   )  :: scalar, scalar_old
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme , scs:sce ),                      &
+                                         INTENT(INOUT)  :: scalar_tends
+                                                    
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme  ), INTENT(INOUT) :: advect_tend
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme  ), INTENT(OUT  ) :: RQVFTEN
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme  ), INTENT(IN   ) ::     ru,  &
+                                                                      rv,  &
+                                                                      ww,  &
+                                                                      xkmhd,  &
+                                                                      alt
+
+
+   REAL , DIMENSION( kms:kme ) ,                 INTENT(IN   ) :: fnm,  &
+                                                                  fnp,  &
+                                                                  rdn,  &
+                                                                  rdnw, &
+                                                                  base
+
+   REAL , DIMENSION( ims:ime , jms:jme ) ,       INTENT(IN   ) :: msfux,    &
+                                                                  msfuy,    &
+                                                                  msfvx,    &
+                                                                  msfvx_inv,    &
+                                                                  msfvy,    &
+                                                                  msftx,    &
+                                                                  msfty,    &
+                                                                  mub,     &
+                                                                  mut,     &
+                                                                  mu_old
+
+   REAL ,                                        INTENT(IN   ) :: rdx,     &
+                                                                  rdy,     &
+                                                                  khdif,   &
+                                                                  kvdif
+
+   INTEGER, INTENT( IN ) :: diff_6th_opt
+   REAL,    INTENT( IN ) :: diff_6th_factor
+
+   REAL ,                                        INTENT(IN   ) :: dt
+
+   LOGICAL, INTENT(IN   ) :: pd_advection
+
+   ! Local data
+  
+   INTEGER :: im, i,j,k
+   INTEGER :: time_step
+
+   REAL    :: khdq, kvdq, tendency
+
+!<DESCRIPTION>
+!
+! rk_scalar_tend calls routines that computes scalar tendency from advection 
+! and 3D mixing (TKE or fixed eddy viscosities).
+!
+!</DESCRIPTION>
+
+
+   khdq = khdif/prandtl
+   kvdq = kvdif/prandtl
+
+   scalar_loop : DO im = scs, sce
+
+     CALL zero_tend ( advect_tend(ims,kms,jms),     &
+                      ids, ide, jds, jde, kds, kde, &
+                      ims, ime, jms, jme, kms, kme, &
+                      its, ite, jts, jte, kts, kte )
+
+     CALL nl_get_time_step ( 1, time_step )
+
+      IF( (rk_step == 3) .and. pd_advection ) THEN
+
+       CALL advect_scalar_pd       ( scalar(ims,kms,jms,im),             &
+                                     scalar_old(ims,kms,jms,im),         &
+                                     advect_tend(ims,kms,jms),           &
+                                     ru, rv, ww, mut, mub, mu_old,       &
+                                     config_flags,                       &
+                                     msfux, msfuy, msfvx, msfvy,         &
+                                     msftx, msfty, fnm, fnp,             &
+                                     rdx, rdy, rdnw,dt,                  &
+                                     ids, ide, jds, jde, kds, kde,       &
+                                     ims, ime, jms, jme, kms, kme,       &
+                                     its, ite, jts, jte, kts, kte     )
+
+      ELSE
+
+       CALL advect_scalar     ( scalar(ims,kms,jms,im),        &
+                                scalar(ims,kms,jms,im),        &
+                                advect_tend(ims,kms,jms),      &
+                                ru, rv, ww, mut, time_step,    &
+                                config_flags,                  &
+                                msfux, msfuy, msfvx, msfvy,    &
+                                msftx, msfty, fnm, fnp,        &
+                                rdx, rdy, rdnw,                &
+                                ids, ide, jds, jde, kds, kde,  &
+                                ims, ime, jms, jme, kms, kme,  &
+                                its, ite, jts, jte, kts, kte  )
+      END IF
+
+     IF((config_flags%cu_physics == GDSCHEME .OR. config_flags%cu_physics == G3SCHEME) & 
+                     .and. moist_step .and. ( im == P_QV) ) THEN
+
+        CALL set_tend( RQVFTEN, advect_tend, msfty,    &
+                       ids, ide, jds, jde, kds, kde,   &
+                       ims, ime, jms, jme, kms, kme,   &
+                       its, ite, jts, jte, kts, kte      )
+     ENDIF
+
+     rk_step_1: IF( rk_step == 1 ) THEN
+
+       diff_opt1 : IF (config_flags%diff_opt .eq. 1) THEN
+
+       CALL horizontal_diffusion ( 'm', scalar(ims,kms,jms,im),            &
+                                        scalar_tends(ims,kms,jms,im), mut, &
+                                        config_flags,                      &
+                                        msfux, msfuy, msfvx, msfvx_inv,    &
+                                        msfvy, msftx, msfty,               &
+                                        khdq , xkmhd, rdx, rdy,            &
+                                        ids, ide, jds, jde, kds, kde,      &
+                                        ims, ime, jms, jme, kms, kme,      &
+                                        its, ite, jts, jte, kts, kte      )
+
+!!!****MARS: done in the physics 
+       pbl_test : IF ( (config_flags%bl_pbl_physics .eq. 0) &
+                       .AND. (.not. config_flags%modif_wrf) ) THEN
+!       pbl_test : IF (config_flags%bl_pbl_physics .eq. 0) THEN
+
+         IF( (moist_step) .and. ( im == P_QV)) THEN
+
+            CALL vertical_diffusion_mp ( scalar(ims,kms,jms,im),       &
+                                         scalar_tends(ims,kms,jms,im), &
+                                         config_flags, base,           &
+                                         alt, mut, rdn, rdnw, kvdq ,   &
+                                         ids, ide, jds, jde, kds, kde, &
+                                         ims, ime, jms, jme, kms, kme, &
+                                         its, ite, jts, jte, kts, kte )
+
+         ELSE 
+
+            CALL vertical_diffusion (  'm', scalar(ims,kms,jms,im),       &
+                                            scalar_tends(ims,kms,jms,im), &
+                                            config_flags,                 &
+                                            alt, mut, rdn, rdnw, kvdq,    &
+                                            ids, ide, jds, jde, kds, kde, &
+                                            ims, ime, jms, jme, kms, kme, &
+                                            its, ite, jts, jte, kts, kte )
+
+         END IF
+
+      ENDIF pbl_test
+
+    ENDIF diff_opt1
+
+    IF ( diff_6th_opt .NE. 0 )                                        &
+      CALL sixth_order_diffusion( 'm', scalar(ims,kms,jms,im),        &
+                                       scalar_tends(ims,kms,jms,im),  &
+                                       mut, dt, config_flags,         &
+                                       diff_6th_opt, diff_6th_factor, &
+                                       ids, ide, jds, jde, kds, kde,  &
+                                       ims, ime, jms, jme, kms, kme,  &
+                                       its, ite, jts, jte, kts, kte )
+
+  ENDIF rk_step_1
+
+ END DO scalar_loop
+
+END SUBROUTINE rk_scalar_tend
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE rk_update_scalar( scs, sce,                      &
+                             scalar_1, scalar_2, sc_tend,   &
+                             advect_tend, msftx, msfty,     &
+                             mu_old, mu_new, mu_base,       &
+                             rk_step, dt, spec_zone,        &
+                             config_flags,                  &
+                             ids, ide, jds, jde, kds, kde,  &
+                             ims, ime, jms, jme, kms, kme,  &
+                             its, ite, jts, jte, kts, kte  )
+
+   IMPLICIT NONE
+
+   !  Input data.
+
+   TYPE(grid_config_rec_type   ) ,   INTENT(IN   ) :: config_flags
+
+   INTEGER ,                INTENT(IN   ) :: scs, sce, rk_step, spec_zone
+   INTEGER ,                INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                             ims, ime, jms, jme, kms, kme, &
+                                             its, ite, jts, jte, kts, kte
+
+   REAL,                    INTENT(IN   ) :: dt
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme , scs:sce),                &
+         INTENT(INOUT)                                  :: scalar_1,    &
+                                                           scalar_2,  &
+                                                           sc_tend
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme ),                &
+         INTENT(IN)                                  :: advect_tend
+
+   REAL, DIMENSION(ims:ime, jms:jme  ), INTENT(IN   ) ::  mu_old,  &
+                                                          mu_new,  &
+                                                          mu_base, &
+                                                          msftx,   &
+                                                          msfty
+
+   INTEGER :: i,j,k,im
+   REAL    :: sc_middle, msfsq
+   REAL, DIMENSION(its:ite) :: muold, r_munew
+
+   REAL, DIMENSION(its:ite, kts:kte, jts:jte  ) :: tendency
+
+   INTEGER :: i_start,i_end,j_start,j_end,k_start,k_end
+   INTEGER :: i_start_spc,i_end_spc,j_start_spc,j_end_spc,k_start_spc,k_end_spc
+
+!<DESCRIPTION>
+!
+!  rk_scalar_update advances the scalar equation given the time t value
+!  of the scalar and the scalar tendency.  
+!
+!</DESCRIPTION>
+
+
+!
+!  set loop limits.
+
+      i_start = its
+      i_end   = ite
+      j_start = jts
+      j_end   = jte
+      k_start = kts
+      k_end   = kte-1
+      IF(j_end == jde) j_end = j_end - 1
+      IF(i_end == ide) i_end = i_end - 1
+
+      i_start_spc = i_start
+      i_end_spc   = i_end
+      j_start_spc = j_start
+      j_end_spc   = j_end
+      k_start_spc = k_start
+      k_end_spc   = k_end
+
+    IF( config_flags%nested .or. config_flags%specified ) THEN
+      IF( .NOT. config_flags%periodic_x)i_start = max( its,ids+spec_zone )
+      IF( .NOT. config_flags%periodic_x)i_end   = min( ite,ide-spec_zone-1 )
+      j_start = max( jts,jds+spec_zone )
+      j_end   = min( jte,jde-spec_zone-1 )
+      k_start = kts
+      k_end   = min( kte, kde-1 )
+    ENDIF
+
+    IF ( rk_step == 1 ) THEN
+
+      !  replace t-dt values (in scalar_1) with t values scalar_2,
+      !  then compute new values by adding tendency to values at t
+
+      DO  im = scs,sce
+
+       DO  j = jts, min(jte,jde-1)
+       DO  k = kts, min(kte,kde-1)
+       DO  i = its, min(ite,ide-1)
+           tendency(i,k,j) = 0.
+       ENDDO
+       ENDDO
+       ENDDO
+   
+       DO  j = j_start,j_end
+       DO  k = k_start,k_end
+       DO  i = i_start,i_end
+          ! scalar was coupled with my
+           tendency(i,k,j) = advect_tend(i,k,j) * msfty(i,j)
+       ENDDO
+       ENDDO
+       ENDDO
+   
+       DO  j = j_start_spc,j_end_spc
+       DO  k = k_start_spc,k_end_spc
+       DO  i = i_start_spc,i_end_spc
+           tendency(i,k,j) = tendency(i,k,j) + sc_tend(i,k,j,im)
+       ENDDO
+       ENDDO
+       ENDDO
+   
+      DO  j = jts, min(jte,jde-1)
+
+      DO  i = its, min(ite,ide-1)
+        muold(i) = mu_old(i,j) + mu_base(i,j)
+        r_munew(i) = 1./(mu_new(i,j) + mu_base(i,j))
+      ENDDO
+
+      DO  k = kts, min(kte,kde-1)
+      DO  i = its, min(ite,ide-1)
+
+        scalar_1(i,k,j,im) = scalar_2(i,k,j,im)
+        scalar_2(i,k,j,im) = (muold(i)*scalar_1(i,k,j,im)   &
+                             + dt*tendency(i,k,j))*r_munew(i)
+
+      ENDDO
+      ENDDO
+      ENDDO
+
+      ENDDO
+
+    ELSE
+
+      !  just compute new values, scalar_1 already at time t.
+
+      DO  im = scs, sce
+
+       DO  j = jts, min(jte,jde-1)
+       DO  k = kts, min(kte,kde-1)
+       DO  i = its, min(ite,ide-1)
+           tendency(i,k,j) = 0.
+       ENDDO
+       ENDDO
+       ENDDO
+   
+       DO  j = j_start,j_end
+       DO  k = k_start,k_end
+       DO  i = i_start,i_end
+           ! scalar was coupled with my
+           tendency(i,k,j) = advect_tend(i,k,j) * msfty(i,j)
+       ENDDO
+       ENDDO
+       ENDDO
+   
+       DO  j = j_start_spc,j_end_spc
+       DO  k = k_start_spc,k_end_spc
+       DO  i = i_start_spc,i_end_spc
+           tendency(i,k,j) = tendency(i,k,j) + sc_tend(i,k,j,im)
+       ENDDO
+       ENDDO
+       ENDDO
+
+      DO  j = jts, min(jte,jde-1)
+
+      DO  i = its, min(ite,ide-1)
+        muold(i) = mu_old(i,j) + mu_base(i,j)
+        r_munew(i) = 1./(mu_new(i,j) + mu_base(i,j))
+      ENDDO
+
+      DO  k = kts, min(kte,kde-1)
+      DO  i = its, min(ite,ide-1)
+
+        scalar_2(i,k,j,im) = (muold(i)*scalar_1(i,k,j,im)   &
+                             + dt*tendency(i,k,j))*r_munew(i)
+
+      ENDDO
+      ENDDO
+      ENDDO
+
+      ENDDO
+
+    END IF
+
+END SUBROUTINE rk_update_scalar
+
+!-------------------------------------------------------------------------------
+
+SUBROUTINE rk_update_scalar_pd( scs, sce,                      &
+                                scalar, sc_tend,               &
+                                mu_old, mu_new, mu_base,       &
+                                rk_step, dt, spec_zone,        &
+                                config_flags,                  &
+                                ids, ide, jds, jde, kds, kde,  &
+                                ims, ime, jms, jme, kms, kme,  &
+                                its, ite, jts, jte, kts, kte  )
+
+   IMPLICIT NONE
+
+   !  Input data.
+
+   TYPE(grid_config_rec_type   ) ,   INTENT(IN   ) :: config_flags
+
+   INTEGER ,                INTENT(IN   ) :: scs, sce, rk_step, spec_zone
+   INTEGER ,                INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                             ims, ime, jms, jme, kms, kme, &
+                                             its, ite, jts, jte, kts, kte
+
+   REAL,                    INTENT(IN   ) :: dt
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme , scs:sce),                &
+         INTENT(INOUT)                                  :: scalar,      &
+                                                           sc_tend
+
+   REAL, DIMENSION(ims:ime, jms:jme  ), INTENT(IN   ) ::  mu_old,  &
+                                                          mu_new,  &
+                                                          mu_base
+
+   INTEGER :: i,j,k,im
+   REAL    :: sc_middle, msfsq
+   REAL, DIMENSION(its:ite) :: muold, r_munew
+
+   REAL, DIMENSION(its:ite, kts:kte, jts:jte  ) :: tendency
+
+   INTEGER :: i_start,i_end,j_start,j_end,k_start,k_end
+   INTEGER :: i_start_spc,i_end_spc,j_start_spc,j_end_spc,k_start_spc,k_end_spc
+
+!<DESCRIPTION>
+!
+!  rk_scalar_update advances the scalar equation given the time t value
+!  of the scalar and the scalar tendency.  
+!
+!</DESCRIPTION>
+
+
+!
+!  set loop limits.
+
+      i_start = its
+      i_end   = ite
+      j_start = jts
+      j_end   = jte
+      k_start = kts
+      k_end   = kte-1
+      IF(j_end == jde) j_end = j_end - 1
+      IF(i_end == ide) i_end = i_end - 1
+
+      i_start_spc = i_start
+      i_end_spc   = i_end
+      j_start_spc = j_start
+      j_end_spc   = j_end
+      k_start_spc = k_start
+      k_end_spc   = k_end
+
+    IF( config_flags%nested .or. config_flags%specified ) THEN
+      IF( .NOT. config_flags%periodic_x)i_start = max( its,ids+spec_zone )
+      IF( .NOT. config_flags%periodic_x)i_end   = min( ite,ide-spec_zone-1 )
+      j_start = max( jts,jds+spec_zone )
+      j_end   = min( jte,jde-spec_zone-1 )
+      k_start = kts
+      k_end   = min( kte, kde-1 )
+    ENDIF
+
+      DO  im = scs, sce
+
+       DO  j = jts, min(jte,jde-1)
+       DO  k = kts, min(kte,kde-1)
+       DO  i = its, min(ite,ide-1)
+           tendency(i,k,j) = 0.
+       ENDDO
+       ENDDO
+       ENDDO
+   
+       DO  j = j_start_spc,j_end_spc
+       DO  k = k_start_spc,k_end_spc
+       DO  i = i_start_spc,i_end_spc
+           tendency(i,k,j) = tendency(i,k,j) + sc_tend(i,k,j,im)
+           sc_tend(i,k,j,im) = 0.
+       ENDDO
+       ENDDO
+       ENDDO
+
+      DO  j = jts, min(jte,jde-1)
+
+      DO  i = its, min(ite,ide-1)
+        muold(i) = mu_old(i,j) + mu_base(i,j)
+        r_munew(i) = 1./(mu_new(i,j) + mu_base(i,j))
+      ENDDO
+
+      DO  k = kts, min(kte,kde-1)
+      DO  i = its, min(ite,ide-1)
+
+        scalar(i,k,j,im) = (muold(i)*scalar(i,k,j,im)   &
+                             + dt*tendency(i,k,j))*r_munew(i)
+      ENDDO
+      ENDDO
+      ENDDO
+
+      ENDDO
+
+END SUBROUTINE rk_update_scalar_pd
+
+!------------------------------------------------------------
+
+SUBROUTINE init_zero_tendency(ru_tendf, rv_tendf, rw_tendf, ph_tendf,  &
+                              t_tendf,  tke_tendf, mu_tendf,           &
+                              moist_tendf,chem_tendf,scalar_tendf,     &
+                              n_moist,n_chem,n_scalar,rk_step,         &
+                              ids, ide, jds, jde, kds, kde,            &
+                              ims, ime, jms, jme, kms, kme,            &
+                              its, ite, jts, jte, kts, kte             )
+!-----------------------------------------------------------------------
+   IMPLICIT NONE
+!-----------------------------------------------------------------------
+
+   INTEGER ,       INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                                    ims, ime, jms, jme, kms, kme, &
+                                    its, ite, jts, jte, kts, kte
+
+   INTEGER ,       INTENT(IN   ) :: n_moist,n_chem,n_scalar,rk_step
+
+   REAL , DIMENSION( ims:ime , kms:kme, jms:jme  ) , INTENT(INOUT) ::  &
+                                                             ru_tendf, &
+                                                             rv_tendf, &
+                                                             rw_tendf, &
+                                                             ph_tendf, &
+                                                              t_tendf, &
+                                                            tke_tendf
+
+   REAL , DIMENSION( ims:ime , jms:jme  ) , INTENT(INOUT) ::  mu_tendf
+
+   REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist),INTENT(INOUT)::&
+                                                          moist_tendf
+
+   REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_chem ),INTENT(INOUT)::&
+                                                          chem_tendf
+
+   REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_scalar ),INTENT(INOUT)::&
+                                                          scalar_tendf
+
+! LOCAL VARS
+
+   INTEGER :: im, ic, is
+
+!<DESCRIPTION>
+!
+! init_zero_tendency 
+! sets tendency arrays to zero for all prognostic variables.
+!
+!</DESCRIPTION>
+
+
+   CALL zero_tend ( ru_tendf,                        &
+                    ids, ide, jds, jde, kds, kde,    &
+                    ims, ime, jms, jme, kms, kme,    &
+                    its, ite, jts, jte, kts, kte     )
+
+   CALL zero_tend ( rv_tendf,                        &
+                    ids, ide, jds, jde, kds, kde,    &
+                    ims, ime, jms, jme, kms, kme,    &
+                    its, ite, jts, jte, kts, kte     )
+
+   CALL zero_tend ( rw_tendf,                        &
+                    ids, ide, jds, jde, kds, kde,    &
+                    ims, ime, jms, jme, kms, kme,    &
+                    its, ite, jts, jte, kts, kte     )
+
+   CALL zero_tend ( ph_tendf,                        &
+                    ids, ide, jds, jde, kds, kde,    &
+                    ims, ime, jms, jme, kms, kme,    &
+                    its, ite, jts, jte, kts, kte     )
+
+   CALL zero_tend ( t_tendf,                         &
+                    ids, ide, jds, jde, kds, kde,    &
+                    ims, ime, jms, jme, kms, kme,    &
+                    its, ite, jts, jte, kts, kte     )
+
+   CALL zero_tend ( tke_tendf,                       &
+                    ids, ide, jds, jde, kds, kde,    &
+                    ims, ime, jms, jme, kms, kme,    &
+                    its, ite, jts, jte, kts, kte     )
+
+   CALL zero_tend ( mu_tendf,                        &
+                    ids, ide, jds, jde, kds, kds,    &
+                    ims, ime, jms, jme, kms, kms,    &
+                    its, ite, jts, jte, kts, kts     )
+
+!   DO im=PARAM_FIRST_SCALAR,n_moist
+   DO im=1,n_moist                      ! make sure first one is zero too
+      CALL zero_tend ( moist_tendf(ims,kms,jms,im),  &
+                       ids, ide, jds, jde, kds, kde, &
+                       ims, ime, jms, jme, kms, kme, &
+                       its, ite, jts, jte, kts, kte  )
+   ENDDO
+
+!   DO ic=PARAM_FIRST_SCALAR,n_chem
+   DO ic=1,n_chem                       ! make sure first one is zero too
+      CALL zero_tend ( chem_tendf(ims,kms,jms,ic),   &
+                       ids, ide, jds, jde, kds, kde, &
+                       ims, ime, jms, jme, kms, kme, &
+                       its, ite, jts, jte, kts, kte  )
+   ENDDO
+
+!   DO ic=PARAM_FIRST_SCALAR,n_scalar
+   DO ic=1,n_scalar                       ! make sure first one is zero too
+      CALL zero_tend ( scalar_tendf(ims,kms,jms,ic),   &
+                       ids, ide, jds, jde, kds, kde, &
+                       ims, ime, jms, jme, kms, kme, &
+                       its, ite, jts, jte, kts, kte  )
+   ENDDO
+
+END SUBROUTINE init_zero_tendency
+
+!===================================================================
+
+
+SUBROUTINE dump_data( a, field, io_unit,            &
+                      ims, ime, jms, jme, kms, kme, &
+                      ids, ide, jds, jde, kds, kde )
+implicit none
+integer ::  ims, ime, jms, jme, kms, kme, &
+            ids, ide, jds, jde, kds, kde 
+real, dimension(ims:ime, kms:kme, jds:jde) :: a
+character :: field
+integer :: io_unit
+
+integer :: is,ie,js,je,ks,ke
+
+!<DESCRIPTION
+!
+! quick and dirty debug io utility
+!
+!</DESCRIPTION
+
+is = ids
+ie = ide-1
+js = jds
+je = jde-1
+ks = kds
+ke = kde-1
+
+if(field == 'u') ie = ide
+if(field == 'v') je = jde
+if(field == 'w') ke = kde
+
+write(io_unit) is,ie,ks,ke,js,je
+write(io_unit) a(is:ie, ks:ke, js:je)
+
+end subroutine dump_data
+
+!-----------------------------------------------------------------------
+
+SUBROUTINE calculate_phy_tend (config_flags,mu,muu,muv,pi3d,           &
+                     RTHRATEN,                                         &
+                     RUBLTEN,RVBLTEN,RTHBLTEN,                         &
+                     RQVBLTEN,RQCBLTEN,RQIBLTEN,                       &
+                     RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,              &
+                     RQICUTEN,RQSCUTEN,                                &
+                     RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN,RQVNDGDTEN,        &
+                     RMUNDGDTEN,                                       &
+                     ids,ide, jds,jde, kds,kde,                        &
+                     ims,ime, jms,jme, kms,kme,                        &
+                     its,ite, jts,jte, kts,kte                         )
+!-----------------------------------------------------------------------
+      IMPLICIT NONE
+
+      TYPE(grid_config_rec_type), INTENT(IN)     ::      config_flags
+
+      INTEGER,  INTENT(IN   )   ::          ids,ide, jds,jde, kds,kde, &
+                                            ims,ime, jms,jme, kms,kme, &
+                                            its,ite, jts,jte, kts,kte
+
+      REAL,     DIMENSION( ims:ime, kms:kme, jms:jme )               , &
+                INTENT(IN   )   ::                               pi3d
+                                                                 
+      REAL,     DIMENSION( ims:ime, jms:jme )                        , &
+                INTENT(IN   )   ::                                 mu, &
+                                                                  muu, &
+                                                                  muv
+      
+                                                           
+! radiation
+
+      REAL,     DIMENSION( ims:ime, kms:kme, jms:jme ),                &
+                INTENT(INOUT)   ::                           RTHRATEN
+
+! cumulus
+
+      REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ),              &
+                INTENT(INOUT)   ::                                     &
+                                                             RTHCUTEN, &
+                                                             RQVCUTEN, &
+                                                             RQCCUTEN, &
+                                                             RQRCUTEN, &
+                                                             RQICUTEN, &
+                                                             RQSCUTEN
+! pbl
+
+      REAL,     DIMENSION( ims:ime, kms:kme, jms:jme )               , &
+                INTENT(INOUT)   ::                            RUBLTEN, &
+                                                              RVBLTEN, &
+                                                             RTHBLTEN, &
+                                                             RQVBLTEN, &
+                                                             RQCBLTEN, &
+                                                             RQIBLTEN
+
+! fdda
+
+      REAL,     DIMENSION( ims:ime, kms:kme, jms:jme )               , &
+                INTENT(INOUT)   ::                            RUNDGDTEN, &
+                                                              RVNDGDTEN, &
+                                                             RTHNDGDTEN, &
+                                                             RQVNDGDTEN
+      REAL,     DIMENSION( ims:ime, jms:jme )               , &
+                INTENT(INOUT)   ::                           RMUNDGDTEN
+
+      INTEGER :: i,k,j
+      INTEGER :: itf,ktf,jtf,itsu,jtsv
+
+!-----------------------------------------------------------------------
+
+!<DESCRIPTION>
+!
+!  calculate_phy_tend couples the physics tendencies to the column mass (mu),
+!  because prognostic equations are in flux form, but physics tendencies are
+!  computed for uncoupled variables.
+!
+!</DESCRIPTION>
+
+      itf=MIN(ite,ide-1)
+      jtf=MIN(jte,jde-1)
+      ktf=MIN(kte,kde-1)
+      itsu=MAX(its,ids+1)
+      jtsv=MAX(jts,jds+1)
+
+! radiation
+
+   IF (config_flags%ra_lw_physics .gt. 0 .or. config_flags%ra_sw_physics .gt. 0) THEN
+
+      DO J=jts,jtf
+      DO K=kts,ktf
+      DO I=its,itf
+         RTHRATEN(I,K,J)=mu(I,J)*RTHRATEN(I,K,J)
+      ENDDO
+      ENDDO
+      ENDDO
+
+   ENDIF
+
+! cumulus
+
+   IF (config_flags%cu_physics .gt. 0) THEN
+
+      DO J=jts,jtf
+      DO I=its,itf
+      DO K=kts,ktf
+         RTHCUTEN(I,K,J)=mu(I,J)*RTHCUTEN(I,K,J)
+         RQVCUTEN(I,K,J)=mu(I,J)*RQVCUTEN(I,K,J)
+      ENDDO
+      ENDDO
+      ENDDO
+
+      IF (P_QC .ge. PARAM_FIRST_SCALAR)THEN
+         DO J=jts,jtf
+         DO I=its,itf
+         DO K=kts,ktf
+            RQCCUTEN(I,K,J)=mu(I,J)*RQCCUTEN(I,K,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF (P_QR .ge. PARAM_FIRST_SCALAR)THEN
+         DO J=jts,jtf
+         DO I=its,itf
+         DO K=kts,ktf
+            RQRCUTEN(I,K,J)=mu(I,J)*RQRCUTEN(I,K,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF (P_QI .ge. PARAM_FIRST_SCALAR)THEN
+         DO J=jts,jtf
+         DO I=its,itf
+         DO K=kts,ktf
+            RQICUTEN(I,K,J)=mu(I,J)*RQICUTEN(I,K,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF(P_QS .ge. PARAM_FIRST_SCALAR)THEN
+         DO J=jts,jtf
+         DO I=its,itf
+         DO K=kts,ktf
+            RQSCUTEN(I,K,J)=mu(I,J)*RQSCUTEN(I,K,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+   ENDIF
+
+! pbl
+
+!   IF (config_flags%bl_pbl_physics .gt. 0) THEN
+!!****MARS
+   IF ( (config_flags%bl_pbl_physics .gt. 0) .OR. (config_flags%modif_wrf) ) THEN
+
+      DO J=jts,jtf
+      DO K=kts,ktf
+      DO I=its,itf
+         RUBLTEN(I,K,J) =mu(I,J)*RUBLTEN(I,K,J)
+         RVBLTEN(I,K,J) =mu(I,J)*RVBLTEN(I,K,J)
+         RTHBLTEN(I,K,J)=mu(I,J)*RTHBLTEN(I,K,J)
+      ENDDO
+      ENDDO
+      ENDDO
+
+      IF (P_QV .ge. PARAM_FIRST_SCALAR) THEN
+         DO J=jts,jtf
+         DO K=kts,ktf
+         DO I=its,itf
+            RQVBLTEN(I,K,J)=mu(I,J)*RQVBLTEN(I,K,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF (P_QC .ge. PARAM_FIRST_SCALAR) THEN
+         DO J=jts,jtf
+         DO K=kts,ktf
+         DO I=its,itf
+           RQCBLTEN(I,K,J)=mu(I,J)*RQCBLTEN(I,K,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+      IF (P_QI .ge. PARAM_FIRST_SCALAR) THEN
+         DO J=jts,jtf
+         DO K=kts,ktf
+         DO I=its,itf
+            RQIBLTEN(I,K,J)=mu(I,J)*RQIBLTEN(I,K,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+    ENDIF
+
+! fdda
+! note fdda u and v tendencies are staggered, also only interior points have muu/muv,
+!   so only couple those
+
+   IF (config_flags%grid_fdda .gt. 0) THEN
+
+      DO J=jts,jtf
+      DO K=kts,ktf
+      DO I=itsu,itf
+!     if( i == itf/2 .AND. j == jtf/2 .AND. k == ktf/2 ) &
+!     write(*,'(a,3i6,e15.5)') 'u_ten before=',i,k,j, RUNDGDTEN(i,k,j)
+         RUNDGDTEN(I,K,J) =muu(I,J)*RUNDGDTEN(I,K,J)
+!        if( i == itf/2 .AND. j == jtf/2 .AND. k==ktf/2 ) &
+!          write(*,'(a,2f15.5)') 'mu, muu=',mu(i,j), muu(i,j)
+!     if( i == itf/2 .AND. j == jtf/2 .AND. k == ktf/2 ) &
+!     write(*,'(a,3i6,e15.5)') 'u_ten after=',i,k,j, RUNDGDTEN(i,k,j)
+!     if( RUNDGDTEN(i,k,j) > 30.0 ) write(*,*) 'IKJ=',i,k,j
+      ENDDO
+      ENDDO
+      ENDDO
+!     write(*,'(a,e15.5)') 'u_ten MAXIMUM after=', maxval(RUNDGDTEN)
+      DO J=jtsv,jtf
+      DO K=kts,ktf
+      DO I=its,itf
+         RVNDGDTEN(I,K,J) =muv(I,J)*RVNDGDTEN(I,K,J)
+      ENDDO
+      ENDDO
+      ENDDO
+      DO J=jts,jtf
+      DO K=kts,ktf
+      DO I=its,itf
+!     if( i == itf/2 .AND. j == jtf/2 .AND. k == ktf/2 ) &
+!     write(*,'(a,3i6,e15.5)') 'th before=',i,k,j, RTHNDGDTEN(I,K,J)
+         RTHNDGDTEN(I,K,J)=mu(I,J)*RTHNDGDTEN(I,K,J)
+!        RMUNDGDTEN(I,J) - no coupling
+!     if( i == itf/2 .AND. j == jtf/2 .AND. k == ktf/2 ) &
+!     write(*,'(a,3i6,e15.5)') 'th after=',i,k,j, RTHNDGDTEN(I,K,J)
+      ENDDO
+      ENDDO
+      ENDDO
+
+      IF (P_QV .ge. PARAM_FIRST_SCALAR) THEN
+         DO J=jts,jtf
+         DO K=kts,ktf
+         DO I=its,itf
+            RQVNDGDTEN(I,K,J)=mu(I,J)*RQVNDGDTEN(I,K,J)
+         ENDDO
+         ENDDO
+         ENDDO
+      ENDIF
+
+    ENDIF
+
+END SUBROUTINE calculate_phy_tend
+
+!-----------------------------------------------------------------------
+
+SUBROUTINE positive_definite_filter ( a,                          &
+                                      ids,ide, jds,jde, kds,kde,  &
+                                      ims,ime, jms,jme, kms,kme,  &
+                                      its,ite, jts,jte, kts,kte  )
+
+  IMPLICIT NONE
+
+  INTEGER,  INTENT(IN   )   ::          ids,ide, jds,jde, kds,kde, &
+                                        ims,ime, jms,jme, kms,kme, &
+                                        its,ite, jts,jte, kts,kte
+
+  REAL, DIMENSION( ims:ime , kms:kme , jms:jme  ), INTENT(INOUT) :: a
+
+  INTEGER :: i,k,j
+
+!<DESCRIPTION>
+!
+! debug and testing code for bounding a variable
+!
+!</DESCRIPTION>
+
+  DO j=jts,min(jte,jde-1)
+  DO k=kts,kte-1
+  DO i=its,min(ite,ide-1)
+!    a(i,k,j) = max(a(i,k,j),0.)
+    a(i,k,j) = min(1000.,max(a(i,k,j),0.))
+  ENDDO
+  ENDDO
+  ENDDO
+
+  END SUBROUTINE positive_definite_filter
+
+!-----------------------------------------------------------------------
+
+SUBROUTINE bound_tke ( tke, tke_upper_bound,       &
+                       ids,ide, jds,jde, kds,kde,  &
+                       ims,ime, jms,jme, kms,kme,  &
+                       its,ite, jts,jte, kts,kte  )
+
+  IMPLICIT NONE
+
+  INTEGER,  INTENT(IN   )   ::          ids,ide, jds,jde, kds,kde, &
+                                        ims,ime, jms,jme, kms,kme, &
+                                        its,ite, jts,jte, kts,kte
+
+  REAL, DIMENSION( ims:ime , kms:kme , jms:jme  ), INTENT(INOUT) :: tke
+  REAL, INTENT(   IN) :: tke_upper_bound
+
+  INTEGER :: i,k,j
+
+!<DESCRIPTION>
+!
+! bounds tke between zero and tke_upper_bound.
+!
+!</DESCRIPTION>
+
+  DO j=jts,min(jte,jde-1)
+  DO k=kts,kte-1
+  DO i=its,min(ite,ide-1)
+    tke(i,k,j) = min(tke_upper_bound,max(tke(i,k,j),0.))
+  ENDDO
+  ENDDO
+  ENDDO
+
+  END SUBROUTINE bound_tke
+
+
+
+END MODULE module_em
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_first_rk_step_part1.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_first_rk_step_part1.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_first_rk_step_part1.F	(revision 142)
@@ -0,0 +1,660 @@
+!WRF:MEDIATION_LAYER:SOLVER
+
+#define BENCH_START(A)
+#define BENCH_END(A)
+
+MODULE module_first_rk_step_part1
+
+CONTAINS
+
+  SUBROUTINE first_rk_step_part1 (   grid , config_flags              &
+                             , moist , moist_tend               &
+                             , chem  , chem_tend                &
+                             , scalar , scalar_tend             &
+                             , fdda3d, fdda2d                   &
+                             , ru_tendf, rv_tendf               &
+                             , rw_tendf, t_tendf                &
+                             , ph_tendf, mu_tendf               &
+                             , tke_tend                         &
+                             , adapt_step_flag , curr_secs      &
+                             , psim , psih , wspd , gz1oz0 , br , chklowq &
+                             , cu_act_flag , hol , th_phy        &
+                             , pi_phy , p_phy , t_phy , u_phy , v_phy     &
+                             , dz8w , p8w , t8w , rho_phy , rho           &
+                             , z_at_w , mu_3d                   &
+                             , ids, ide, jds, jde, kds, kde     &
+                             , ims, ime, jms, jme, kms, kme     &
+                             , ips, ipe, jps, jpe, kps, kpe     &
+                             , k_start , k_end                  &
+                            )
+    USE module_state_description
+    USE module_model_constants
+    USE module_domain, ONLY : domain
+    USE module_configure, ONLY : grid_config_rec_type, model_config_rec
+!!!!****MARS MARS
+!!!!****MARS MARS
+!    USE module_radiation_driver, ONLY : pre_radiation_driver, radiation_driver
+!    USE module_surface_driver, ONLY : surface_driver
+!    USE module_cumulus_driver, ONLY : cumulus_driver
+!    USE module_pbl_driver, ONLY : pbl_driver
+!    USE module_fddagd_driver, ONLY : fddagd_driver
+    USE module_em, ONLY : init_zero_tendency
+!!MARS
+    USE module_lmd_driver
+!!MARS
+    USE module_big_step_utilities_em, ONLY : phy_prep
+    USE module_dm
+    IMPLICIT NONE
+
+    TYPE ( domain ), INTENT(INOUT) :: grid
+    TYPE ( grid_config_rec_type ), INTENT(IN) :: config_flags
+
+    INTEGER, INTENT(IN) :: ids, ide, jds, jde, kds, kde,     &
+                           ims, ime, jms, jme, kms, kme,     &
+                           ips, ipe, jps, jpe, kps, kpe
+
+    LOGICAL ,INTENT(IN)                        :: adapt_step_flag
+    REAL, INTENT(IN)                           :: curr_secs
+
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: moist
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: moist_tend
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: chem
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: chem_tend
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: scalar
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: scalar_tend
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_fdda3d),INTENT(INOUT)  :: fdda3d
+    REAL    ,DIMENSION(ims:ime,1:1,jms:jme,num_fdda2d),INTENT(INOUT)      :: fdda2d
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: psim
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: psih
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: wspd
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: gz1oz0
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: br
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: chklowq
+    LOGICAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: cu_act_flag
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: hol
+
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: th_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: pi_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: u_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: v_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme) :: w_phy  !!MARS aymeric var loc
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: dz8w
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p8w
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t8w
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: z_at_w
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: mu_3d
+
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ru_tendf
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rv_tendf
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rw_tendf
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ph_tendf
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_tendf
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: tke_tend
+
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: mu_tendf
+
+    INTEGER , INTENT(IN)                          ::  k_start, k_end
+
+! Local
+
+    REAL, DIMENSION( ims:ime, jms:jme ) :: ht_loc
+    INTEGER, DIMENSION( ims:ime, jms:jme ) :: shadowmask 
+    INTEGER                             :: ij
+    INTEGER  num_roof_layers
+    INTEGER  num_wall_layers
+    INTEGER  num_road_layers
+    INTEGER  iswater
+    INTEGER  rk_step 
+
+ ! initialize all tendencies to zero in order to update physics
+ ! tendencies first (separate from dry dynamics).
+
+    rk_step = 1
+
+BENCH_START(init_zero_tend_tim)
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+
+       DO ij = 1 , grid%num_tiles
+
+         CALL wrf_debug ( 200 , ' call init_zero_tendency' )
+         CALL init_zero_tendency ( ru_tendf, rv_tendf, rw_tendf,     &
+                                   ph_tendf, t_tendf, tke_tend,      &
+                                   mu_tendf,                         &
+                                   moist_tend,chem_tend,scalar_tend, &
+                                   num_moist,num_chem,num_scalar,       &
+                                   rk_step,                          &
+                                   ids, ide, jds, jde, kds, kde,     &
+                                   ims, ime, jms, jme, kms, kme,     &
+                                   grid%i_start(ij), grid%i_end(ij), &
+                                   grid%j_start(ij), grid%j_end(ij), &
+                                   k_start, k_end                   )
+
+       END DO
+       !$OMP END PARALLEL DO
+BENCH_END(init_zero_tend_tim)
+
+#ifdef DM_PARALLEL
+#     include "HALO_EM_PHYS_A.inc"
+#endif
+
+      !$OMP PARALLEL DO   &
+      !$OMP PRIVATE ( ij )
+      DO ij = 1 , grid%num_tiles
+
+        CALL wrf_debug ( 200 , ' call phy_prep' )
+        CALL phy_prep ( config_flags,                           &
+                        grid%mut, grid%muu, grid%muv, grid%u_2, &
+                        grid%v_2, grid%w_2, grid%p, grid%pb, grid%alt,              &
+                        grid%ph_2, grid%phb, grid%t_2, grid%tsk, moist, num_moist,   &
+                        mu_3d, rho,                             &
+                        th_phy, p_phy, pi_phy, u_phy, v_phy, w_phy,   &
+                        p8w, t_phy, t8w, grid%z, z_at_w,             &
+                        dz8w, grid%fnm, grid%fnp,                         &    
+                        grid%rthraten,                               &
+                        grid%rthblten, grid%rublten, grid%rvblten,             &
+                        grid%rqvblten, grid%rqcblten, grid%rqiblten,           &
+                        grid%rthcuten, grid%rqvcuten, grid%rqccuten,           &
+                        grid%rqrcuten, grid%rqicuten, grid%rqscuten,           &
+                        grid%rthften,  grid%rqvften,                      &
+                        grid%RUNDGDTEN, grid%RVNDGDTEN, grid%RTHNDGDTEN,       &
+                        grid%RQVNDGDTEN, grid%RMUNDGDTEN,                 &
+                        ids, ide, jds, jde, kds, kde,           &
+                        ims, ime, jms, jme, kms, kme,           &
+                        grid%i_start(ij), grid%i_end(ij),       &
+                        grid%j_start(ij), grid%j_end(ij),       &
+                        k_start, k_end                         )
+      ENDDO
+      !$OMP END PARALLEL DO
+
+BENCH_END(phy_prep_tim)
+
+!!!!****MARS MARS
+!!!!****MARS MARS
+
+!! radiation
+!
+!! this driver is only needed to handle non-local shadowing effects
+!      CALL pre_radiation_driver ( grid, config_flags                        & 
+!     &        ,itimestep=grid%itimestep, ra_call_offset=grid%ra_call_offset    & 
+!     &        ,XLAT=grid%xlat, XLONG=grid%xlong, GMT=grid%gmt                  &
+!     &        ,julian=grid%julian, xtime=grid%xtime, RADT=grid%radt            &
+!     &        ,STEPRA=grid%stepra                                              & 
+!     &        ,ht=grid%ht,dx=grid%dx,dy=grid%dy,sina=grid%sina,cosa=grid%cosa  &
+!     &        ,shadowmask=shadowmask,slope_rad=config_flags%slope_rad          &
+!     &        ,topo_shading=config_flags%topo_shading                          & 
+!     &        ,shadlen=config_flags%shadlen,ht_shad=grid%ht_shad,ht_loc=ht_loc & 
+!     &        ,ht_shad_bxs=grid%ht_shad_bxs, ht_shad_bxe=grid%ht_shad_bxe      &
+!     &        ,ht_shad_bys=grid%ht_shad_bys, ht_shad_bye=grid%ht_shad_bye      &
+!     &        ,nested=config_flags%nested, min_ptchsz=grid%min_ptchsz          & 
+!     &        ,spec_bdy_width=config_flags%spec_bdy_width                      &
+!            ! indexes
+!     &        ,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                                   )
+!
+!      CALL wrf_debug ( 200 , ' call radiation_driver' )
+!BENCH_START(rad_driver_tim)
+!
+!      CALL radiation_driver(                                                  &
+!     &         ACFRCV=grid%acfrcv      ,ACFRST=grid%acfrst      ,ALBEDO=grid%albedo  &
+!     &        ,CFRACH=grid%cfrach      ,CFRACL=grid%cfracl      ,CFRACM=grid%cfracm  &
+!     &        ,CUPPT=grid%cuppt        ,CZMEAN=grid%czmean      ,DT=grid%dt          &
+!     &        ,DZ8W=dz8w               ,EMISS=grid%emiss        ,GLW=grid%glw        &
+!     &        ,GMT=grid%gmt            ,GSW=grid%gsw            ,HBOT=grid%hbot      &
+!     &        ,HTOP=grid%htop          ,HBOTR=grid%hbotr        ,HTOPR=grid%htopr    &
+!     &        ,ICLOUD=config_flags%icloud                                            &
+!     &        ,ITIMESTEP=grid%itimestep,JULDAY=grid%julday      , JULIAN=grid%julian &
+!     &        ,JULYR=grid%julyr        ,LW_PHYSICS=config_flags%ra_lw_physics        &
+!     &        ,NCFRCV=grid%ncfrcv      ,NCFRST=grid%ncfrst      ,NPHS=1              &
+!     &        ,P8W=p8w                 ,P=p_phy                 ,PI=pi_phy           &
+!     &        ,RADT=grid%radt          ,RA_CALL_OFFSET=grid%ra_call_offset           &
+!     &        ,RHO=rho                 ,RLWTOA=grid%rlwtoa                           &
+!     &        ,RSWTOA=grid%rswtoa      ,RTHRATEN=grid%rthraten                       &
+!     &        ,RTHRATENLW=grid%rthratenlw       ,RTHRATENSW=grid%rthratensw          &
+!     &        ,SNOW=grid%snow          ,STEPRA=grid%stepra      ,SWDOWN=grid%swdown  &
+!     &        ,SWDOWNC=grid%swdownc    ,SW_PHYSICS=config_flags%ra_sw_physics        &
+!     &        ,T8W=t8w                 ,T=t_phy                 ,TAUCLDC=grid%taucldc &
+!     &        ,TAUCLDI=grid%taucldi    ,TSK=grid%tsk            ,VEGFRA=grid%vegfra  &
+!     &        ,WARM_RAIN=grid%warm_rain ,XICE=grid%xice         ,XLAND=grid%xland    &
+!     &        ,XLAT=grid%xlat          ,XLONG=grid%xlong        &
+!!Optional urban
+!     &        ,DECLIN_URB=grid%declin_urb        ,COSZ_URB2D=grid%cosz_urb2d   &
+!     &        ,OMG_URB2D=grid%omg_urb2d                                        &
+!!
+!     &        ,Z=grid%z                                                   &
+!     &        ,LEVSIZ=grid%levsiz, N_OZMIXM=num_ozmixm                    &
+!     &        ,N_AEROSOLC=num_aerosolc                                    &
+!     &        ,PAERLEV=grid%paerlev                                       &
+!     &        ,CAM_ABS_DIM1=grid%cam_abs_dim1, CAM_ABS_DIM2=grid%cam_abs_dim2 &
+!     &        ,CAM_ABS_FREQ_S=grid%cam_abs_freq_s                         &
+!     &        ,XTIME=grid%xtime                                                &
+!              ,CURR_SECS=curr_secs, ADAPT_STEP_FLAG=adapt_step_flag       &
+!            ! indexes
+!     &        ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde          &
+!     &        ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme          &
+!     &        ,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                                   &
+!            ! Optional                          
+!     &        , CLDFRA=grid%cldfra                                        &
+!     &        , PB=grid%pb                                                     &
+!     &        , F_ICE_PHY=grid%f_ice_phy,F_RAIN_PHY=grid%f_rain_phy                 &
+!     &        , QV=moist(ims,kms,jms,P_QV), F_QV=F_QV                     &
+!     &        , QC=moist(ims,kms,jms,P_QC), F_QC=F_QC                     &
+!     &        , QR=moist(ims,kms,jms,P_QR), F_QR=F_QR                     &
+!     &        , QI=moist(ims,kms,jms,P_QI), F_QI=F_QI                     &
+!     &        , QS=moist(ims,kms,jms,P_QS), F_QS=F_QS                     &
+!     &        , QG=moist(ims,kms,jms,P_QG), F_QG=F_QG                     &
+!     &        , QNDROP=scalar(ims,kms,jms,P_QNDROP), F_QNDROP=F_QNDROP    &
+!#ifdef ACFLUX
+!     &        ,ACSWUPT=acswupt    ,ACSWUPTC=acswuptc                      &
+!     &        ,ACSWDNT=acswdnt    ,ACSWDNTC=acswdntc                      &
+!     &        ,ACSWUPB=acswupb    ,ACSWUPBC=acswupbc                      &
+!     &        ,ACSWDNB=acswdnb    ,ACSWDNBC=acswdnbc                      &
+!     &        ,ACLWUPT=aclwupt    ,ACLWUPTC=aclwuptc                      &
+!     &        ,ACLWDNT=aclwdnt    ,ACLWDNTC=aclwdntc                      &
+!     &        ,ACLWUPB=aclwupb    ,ACLWUPBC=aclwupbc                      &
+!     &        ,ACLWDNB=aclwdnb    ,ACLWDNBC=aclwdnbc                      &
+!     &        ,SWUPT=swupt    ,SWUPTC=swuptc                              &
+!     &        ,SWDNT=swdnt    ,SWDNTC=swdntc                              &
+!     &        ,SWUPB=swupb    ,SWUPBC=swupbc                              &
+!     &        ,SWDNB=swdnb    ,SWDNBC=swdnbc                              &
+!     &        ,LWUPT=lwupt    ,LWUPTC=lwuptc                              &
+!     &        ,LWDNT=lwdnt    ,LWDNTC=lwdntc                              &
+!     &        ,LWUPB=lwupb    ,LWUPBC=lwupbc                              &
+!     &        ,LWDNB=lwdnb    ,LWDNBC=lwdnbc                              &
+!#endif
+!     &        ,LWCF=grid%lwcf                                                  &
+!     &        ,SWCF=grid%swcf                                                  &
+!     &        ,OLR=grid%olr                                                    &
+!     &        ,OZMIXM=grid%ozmixm, PIN=grid%pin                                     &
+!     &        ,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                &
+!#ifdef WRF_CHEM
+!     &        ,CU_RAD_FEEDBACK=config_flags%cu_rad_feedback                &
+!     &        ,AER_RA_FEEDBACK=config_flags%aer_ra_feedback                &
+!     &        ,QC_ADJUST=grid%GD_CLOUD_B , QI_ADJUST=grid%GD_CLOUD2_B         &
+!     &        ,PM2_5_DRY=grid%pm2_5_dry, PM2_5_WATER=grid%pm2_5_water               &
+!     &        ,PM2_5_DRY_EC=grid%pm2_5_dry_ec                                  &
+!     &        ,TAUAER300=grid%tauaer1, TAUAER400=grid%tauaer2 & ! jcb
+!     &        ,TAUAER600=grid%tauaer3, TAUAER999=grid%tauaer4 & ! jcb
+!     &        ,GAER300=grid%gaer1, GAER400=grid%gaer2, GAER600=grid%gaer3, GAER999=grid%gaer4 & ! jcb
+!     &        ,WAER300=grid%waer1, WAER400=grid%waer2, WAER600=grid%waer3, WAER999=grid%waer4 & ! jcb
+!#endif
+!     &         ,slope_rad=config_flags%slope_rad,topo_shading=config_flags%topo_shading     &
+!     &         ,shadowmask=shadowmask,ht=grid%ht,dx=grid%dx,dy=grid%dy,sina=grid%sina,cosa=grid%cosa    )
+!
+!BENCH_END(rad_driver_tim)
+!
+!!********* Surface driver
+!! surface
+!
+!BENCH_START(surf_driver_tim)
+!
+!!-----------------------------------------------------------------
+!! urban related variable are added to arguments of surface_driver
+!!-----------------------------------------------------------------
+!      num_roof_layers = grid%num_soil_layers !urban
+!      num_wall_layers = grid%num_soil_layers !urban
+!      num_road_layers = grid%num_soil_layers !urban
+!      CALL nl_get_iswater(grid%id, iswater)
+!
+!      CALL wrf_debug ( 200 , ' call surface_driver' )
+!
+!      CALL surface_driver(                                                &
+!     &         ACSNOM=grid%acsnom      ,ACSNOW=grid%acsnow      ,AKHS=grid%akhs          &
+!     &        ,AKMS=grid%akms          ,ALBBCK=grid%albbck      ,ALBEDO=grid%albedo      &
+!     &        ,EMBCK=grid%embck                                                          &
+!     &        ,BR=br              ,CANWAT=grid%canwat      ,CHKLOWQ=chklowq    &
+!     &        ,CT=grid%ct              ,DT=grid%dt         ,DX=grid%dx         &
+!     &        ,DZ8W=dz8w          ,DZS=grid%dzs            ,FLHC=grid%flhc          &
+!     &        ,FLQC=grid%flqc          ,GLW=grid%glw            ,GRDFLX=grid%grdflx      &
+!     &        ,GSW=grid%gsw    ,SWDOWN=grid%swdown        ,GZ1OZ0=gz1oz0      ,HFX=grid%hfx              &
+!     &        ,HT=grid%ht              ,IFSNOW=config_flags%ifsnow      ,ISFFLX=config_flags%isfflx      &
+!     &        ,ISLTYP=grid%isltyp      ,ITIMESTEP=grid%itimestep                    &
+!     &        ,IVGTYP=grid%ivgtyp      ,LH=grid%lh              ,LOWLYR=grid%lowlyr      &
+!     &        ,MAVAIL=grid%mavail      ,NUM_SOIL_LAYERS=config_flags%num_soil_layers        &
+!     &        ,P8W=p8w            ,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  &
+!     &        ,PSIM=psim          ,P_PHY=p_phy        ,Q10=grid%q10            &
+!     &        ,Q2=grid%q2              ,QFX=grid%qfx            ,QSFC=grid%qsfc          &
+!     &        ,QSHLTR=grid%qshltr      ,QZ0=grid%qz0            ,RAINCV=grid%raincv      &
+!     &        ,RA_LW_PHYSICS=config_flags%ra_lw_physics            ,RHO=rho            &
+!     &        ,RMOL=grid%rmol          ,SFCEVP=grid%sfcevp      ,SFCEXC=grid%sfcexc      &
+!     &        ,SFCRUNOFF=grid%sfcrunoff                                        &
+!     &        ,SF_SFCLAY_PHYSICS=config_flags%sf_sfclay_physics                        &
+!     &        ,SF_SURFACE_PHYSICS=config_flags%sf_surface_physics  ,SH2O=grid%sh2o          &
+!     &        ,SHDMAX=grid%shdmax      ,SHDMIN=grid%shdmin      ,SMOIS=grid%smois        &
+!     &        ,SMSTAV=grid%smstav      ,SMSTOT=grid%smstot      ,SNOALB=grid%snoalb      &
+!     &        ,SNOW=grid%snow          ,SNOWC=grid%snowc        ,SNOWH=grid%snowh        &
+!     &        ,SST=grid%sst            ,SST_UPDATE=grid%sst_update                  &
+!     &        ,STEPBL=grid%stepbl      ,TH10=grid%th10          ,TH2=grid%th2            &
+!     &        ,THZ0=grid%thz0          ,TH_PHY=th_phy      ,TKE_MYJ=grid%tke_myj    &
+!     &        ,TMN=grid%tmn            ,TSHLTR=grid%tshltr      ,TSK=grid%tsk            &
+!     &        ,TSLB=grid%tslb          ,T_PHY=t_phy        ,U10=grid%u10            &
+!     &        ,URATX=grid%uratx        ,VRATX=grid%vratx   ,TRATX=grid%tratx        &
+!     &        ,UDRUNOFF=grid%udrunoff  ,UST=grid%ust       ,UZ0=grid%uz0            &
+!     &        ,U_FRAME=grid%u_frame    ,U_PHY=u_phy        ,V10=grid%v10            &
+!     &        ,VEGFRA=grid%vegfra      ,VZ0=grid%vz0       ,V_FRAME=grid%v_frame    &
+!     &        ,V_PHY=v_phy             ,WARM_RAIN=grid%warm_rain                    &
+!     &        ,WSPD=wspd               ,XICE=grid%xice     ,XLAND=grid%xland        &
+!     &        ,Z0=grid%z0              ,Z=grid%z        ,ZNT=grid%znt            &
+!     &        ,ZS=grid%zs              ,XICEM=grid%xicem   ,ISICE=grid%landuse_isice&
+!     &        ,USTM=grid%ustm          ,CK=grid%ck         ,CKA=grid%cka            &
+!     &                                 ,CD=grid%cd         ,CDA=grid%cda            &
+!     &        ,ISFTCFLX=config_flags%isftcflx                                       &
+!     &        ,OMLCALL=config_flags%omlcall ,OML_HML0=config_flags%oml_hml0 ,OML_GAMMA=config_flags%oml_gamma &
+!     &        ,TML=grid%tml, T0ML=grid%t0ml, HML=grid%hml, H0ML=grid%h0ml, HUML=grid%huml, HVML=grid%hvml, F=grid%f &
+!     &        ,ISWATER=iswater &
+!     &        ,DECLIN_URB=grid%declin_urb  ,COSZ_URB2D=grid%cosz_urb2d    & !I urban
+!     &        ,OMG_URB2D=grid%omg_urb2d    ,xlat_urb2d=grid%XLAT          & !I urban
+!     &        ,NUM_ROOF_LAYERS=num_roof_layers                            & !I urban
+!     &        ,NUM_WALL_LAYERS=num_wall_layers                            & !I urban
+!     &        ,NUM_ROAD_LAYERS=num_road_layers                            &
+!     &        ,DZR=grid%dzr ,DZB=grid%dzb ,DZG=grid%dzg                   & !I urban
+!     &        ,TR_URB2D=grid%tr_urb2d ,TB_URB2D=grid%tb_urb2d             &
+!     &        ,TG_URB2D=grid%tg_urb2d                                     & !H urban
+!     &        ,TC_URB2D=grid%tc_urb2d ,QC_URB2D=grid%qc_urb2d             & !H urban
+!     &        ,UC_URB2D=grid%uc_urb2d                                     & !H urban
+!     &        ,XXXR_URB2D=grid%xxxr_urb2d                                 &
+!     &        ,XXXB_URB2D=grid%xxxb_urb2d                                 & !H urban
+!     &        ,XXXG_URB2D=grid%xxxg_urb2d                                 &
+!     &        ,XXXC_URB2D=grid%xxxc_urb2d                                 & !H urban
+!     &        ,TRL_URB3D=grid%trl_urb3d   ,TBL_URB3D=grid%tbl_urb3d       & !H urban
+!     &        ,TGL_URB3D=grid%tgl_urb3d                                   & !H urban
+!     &        ,SH_URB2D=grid%sh_urb2d     ,LH_URB2D=grid%lh_urb2d         &
+!     &        ,G_URB2D=grid%g_urb2d                                       & !H urban
+!     &        ,RN_URB2D=grid%rn_urb2d     , TS_URB2D=grid%ts_urb2d        & !H urban 
+!     &        ,FRC_URB2D=grid%frc_urb2d                                   & !H urban
+!     &        ,UTYPE_URB2D=grid%utype_urb2d                               & !H urban
+!     &        ,ucmcall=grid%ucmcall                                       & !H urban
+!           ! P-X LSM Variables
+!     &        ,LANDUSEF=grid%landusef, SOILCTOP=grid%soilctop             &   ! P-X LSM
+!     &        ,SOILCBOT=grid%soilcbot                                     &   ! P-X LSM
+!     &        ,RA=grid%ra, RS=grid%rs, LAI=grid%lai                       &   ! P-X LSM
+!     &        ,NLCAT=grid%num_land_cat,  NSCAT=grid%num_soil_cat          &   ! P-X LSM
+!     &        ,VEGF_PX=grid%vegf_px, SNOWNCV=grid%snowncv                 &   ! P-X LSM
+!     &        ,ANAL_INTERVAL=config_flags%interval_seconds                &   ! P-X LSM
+!     &        ,PXLSM_SMOIS_INIT=config_flags%pxlsm_smois_init             &   ! P-X LSM
+!     &        ,PXLSM_SOIL_NUDGE=config_flags%grid_fdda                    &   ! P-X LSM
+!           ! Optional PX LSM nudging
+!     &        ,t2_ndg_old=fdda2d(ims,1,jms,P_t2_ndg_old)                  &
+!     &        ,q2_ndg_old=fdda2d(ims,1,jms,P_q2_ndg_old)                  &
+!     &        ,t2_ndg_new=fdda2d(ims,1,jms,P_t2_ndg_new)                  &
+!     &        ,q2_ndg_new=fdda2d(ims,1,jms,P_q2_ndg_new)                  &
+!     &        ,sn_ndg_old=fdda2d(ims,1,jms,P_sn_ndg_old)                  &
+!     &        ,sn_ndg_new=fdda2d(ims,1,jms,P_sn_ndg_new)                  &
+!           ! Indexes
+!     &        ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde          &
+!     &        ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme          &
+!     &        , 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                                  &
+!           ! Optional
+!     &        ,QV_CURR=moist(ims,kms,jms,P_QV), F_QV=F_QV                 &
+!     &        ,QC_CURR=moist(ims,kms,jms,P_QC), F_QC=F_QC                 &
+!     &        ,QR_CURR=moist(ims,kms,jms,P_QR), F_QR=F_QR                 &
+!     &        ,QI_CURR=moist(ims,kms,jms,P_QI), F_QI=F_QI                 &
+!     &        ,QS_CURR=moist(ims,kms,jms,P_QS), F_QS=F_QS                 &
+!     &        ,QG_CURR=moist(ims,kms,jms,P_QG), F_QG=F_QG                 &
+!     &        ,CAPG=grid%capg, EMISS=grid%emiss, HOL=hol,MOL=grid%mol                    &
+!     &        ,T2OBS=grid%t2obs, Q2OBS=grid%q2obs                         &
+!     &        ,RAINBL=grid%rainbl,SR=grid%sr                                              &
+!     &        ,RAINNCV=grid%rainncv,REGIME=grid%regime,T2=grid%t2,THC=grid%thc                &
+!     &        ,QSG=grid%qsg,QVG=grid%qvg,QCG=grid%qcg,SOILT1=grid%soilt1,TSNAV=grid%tsnav          & ! ruc lsm
+!     &        ,SMFR3D=grid%smfr3d,KEEPFR3DFLAG=grid%keepfr3dflag                    & ! ruc lsm
+!     &        ,POTEVP=grid%POTEVP, SNOPCX=grid%SNOPCX, SOILTB=grid%SOILTB                & ! ruc lsm
+!     &                                                              )
+!BENCH_END(surf_driver_tim)
+!
+!!*********
+!! pbl
+!
+!      CALL wrf_debug ( 200 , ' call pbl_driver' )
+!BENCH_START(pbl_driver_tim)
+!      CALL pbl_driver(                                                    &
+!     &         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 &
+!     &        ,BR=br              ,CHKLOWQ=chklowq    ,CT=grid%ct         &
+!     &        ,DT=grid%dt              ,DX=grid%dx              ,DZ8W=dz8w          &
+!     &        ,EL_MYJ=grid%el_myj      ,EXCH_H=grid%exch_h      ,GRDFLX=grid%grdflx      &
+!     &        ,GZ1OZ0=gz1oz0      ,HFX=grid%hfx            ,HT=grid%ht              &
+!     &        ,ITIMESTEP=grid%itimestep                    ,KPBL=grid%kpbl          &
+!     &        ,LH=grid%lh              ,LOWLYR=grid%lowlyr      ,P8W=p8w            &
+!     &        ,PBLH=grid%pblh          ,PI_PHY=pi_phy      ,PSIH=psih          &
+!     &        ,PSIM=psim          ,P_PHY=p_phy        ,QFX=grid%qfx            &
+!     &        ,QSFC=grid%qsfc          ,QZ0=grid%qz0                                &
+!     &        ,RA_LW_PHYSICS=config_flags%ra_lw_physics                   &
+!     &        ,RHO=rho            ,RQCBLTEN=grid%rqcblten  ,RQIBLTEN=grid%rqiblten  &
+!     &        ,RQVBLTEN=grid%rqvblten  ,RTHBLTEN=grid%rthblten  ,RUBLTEN=grid%rublten    &
+!     &        ,RVBLTEN=grid%rvblten    ,SNOW=grid%snow          ,STEPBL=grid%stepbl      &
+!     &        ,THZ0=grid%thz0          ,TH_PHY=th_phy      ,TKE_MYJ=grid%tke_myj    &
+!     &        ,TSK=grid%tsk            ,T_PHY=t_phy        ,UST=grid%ust            &
+!     &        ,U10=grid%u10 ,UZ0=grid%uz0      ,U_FRAME=grid%u_frame    ,U_PHY=u_phy        &
+!     &        ,V10=grid%v10 ,VZ0=grid%vz0      ,V_FRAME=grid%v_frame    ,V_PHY=v_phy        &
+!     &        ,WARM_RAIN=grid%warm_rain                    ,WSPD=wspd          &
+!     &        ,XICE=grid%xice          ,XLAND=grid%xland        ,Z=grid%z                &
+!     &        ,ZNT=grid%znt                                                    &
+!     &        ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde          &
+!     &        ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme          &
+!     &        ,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                                   &
+!          ! Variables Required by ACM PBL  - jp
+!     &        ,ZNU=grid%znu,ZNW=grid%znw,MUT=grid%mut,P_TOP=grid%p_top    &
+!          ! optional
+!     &        ,QV_CURR=moist(ims,kms,jms,P_QV), F_QV=F_QV                 &
+!     &        ,QC_CURR=moist(ims,kms,jms,P_QC), F_QC=F_QC                 &
+!     &        ,QR_CURR=moist(ims,kms,jms,P_QR), F_QR=F_QR                 &
+!     &        ,QI_CURR=moist(ims,kms,jms,P_QI), F_QI=F_QI                 &
+!     &        ,QS_CURR=moist(ims,kms,jms,P_QS), F_QS=F_QS                 &
+!     &        ,QG_CURR=moist(ims,kms,jms,P_QG), F_QG=F_QG                 &
+!     &        ,HOL=HOL, MOL=grid%mol, REGIME=grid%REGIME                  &
+!     &                                                          )
+!
+!BENCH_END(pbl_driver_tim)
+!
+!! cumulus para.
+!
+!      CALL wrf_debug ( 200 , ' call cumulus_driver' )
+!
+!
+!BENCH_START(cu_driver_tim)
+!      CALL cumulus_driver(grid                                             &
+!                 ! Prognostic variables
+!     &             ,U=u_phy   ,V=v_phy   ,TH=th_phy  ,T=t_phy             &
+!     &             ,W=grid%w_2     ,P=p_phy   ,PI=pi_phy  ,RHO=rho             &
+!                 ! Other arguments
+!     &             ,ITIMESTEP=grid%itimestep ,DT=grid%dt      ,DX=grid%dx                &
+!     &             ,CUDT=grid%cudt,CURR_SECS=curr_secs,ADAPT_STEP_FLAG=adapt_step_flag &
+!     &             ,RAINC=grid%rainc   ,RAINCV=grid%raincv   ,PRATEC=grid%pratec         &
+!     &             , NCA=grid%nca                                         &
+!     &             ,HTOP=grid%cutop     ,HBOT=grid%cubot       ,KPBL=grid%kpbl             &
+!     &             ,DZ8W=dz8w     ,P8W=p8w                                &
+!     &             ,W0AVG=grid%w0avg   ,STEPCU=grid%stepcu                          &
+!     &             ,CLDEFI=grid%cldefi ,LOWLYR=grid%lowlyr ,XLAND=grid%xland             &
+!     &             ,APR_GR=grid%apr_gr ,APR_W=grid%apr_w   ,APR_MC=grid%apr_mc           &
+!     &             ,APR_ST=grid%apr_st ,APR_AS=grid%apr_as ,APR_CAPMA=grid%apr_capma     &
+!     &             ,APR_CAPME=grid%apr_capme          ,APR_CAPMI=grid%apr_capmi     &
+!     &             ,MASS_FLUX=grid%mass_flux          ,XF_ENS=grid%xf_ens           &
+!     &             ,PR_ENS=grid%pr_ens ,HT=grid%ht,EDT_OUT=grid%edt_out             &
+!     &             ,imomentum=grid%imomentum,clos_choice=grid%clos_choice       &
+!     &             ,cugd_tten=grid%cugd_tten,cugd_qvten=grid%cugd_qvten,cugd_qcten=grid%cugd_qcten   &
+!     &             ,cugd_ttens=grid%cugd_ttens,cugd_qvtens=grid%cugd_qvtens   &
+!     &             ,ENSDIM=config_flags%ensdim ,MAXIENS=config_flags%maxiens ,MAXENS=config_flags%maxens         &
+!     &             ,MAXENS2=config_flags%maxens2                ,MAXENS3=config_flags%maxens3       &
+!     &             ,CU_ACT_FLAG=cu_act_flag   ,WARM_RAIN=grid%warm_rain        &
+!     &             ,GSW=grid%gsw,cugd_avedx=config_flags%cugd_avedx &
+!     &             ,PERIODIC_X=(config_flags%polar .OR. config_flags%periodic_x)  &
+!     &             ,PERIODIC_Y=config_flags%periodic_y  &
+!                 ! Selection flag
+!     &             ,CU_PHYSICS=config_flags%cu_physics                    &
+!                 ! 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                              &
+!                 ! Moisture tendency arguments
+!     &             ,RQVCUTEN=grid%rqvcuten , RQCCUTEN=grid%rqccuten                 &
+!     &             ,RQSCUTEN=grid%rqscuten , RQICUTEN=grid%rqicuten                 &
+!     &             ,RQRCUTEN=grid%rqrcuten , RQVBLTEN=grid%rqvblten                 &
+!     &             ,RQVFTEN=grid%rqvften                                       &
+!                 ! Other tendency arguments
+!     &             ,RTHRATEN=grid%rthraten , RTHBLTEN=grid%rthblten                 &
+!     &             ,RTHCUTEN=grid%rthcuten , RTHFTEN=grid%rthften                   &
+!                 ! Moisture tracer arguments
+!     &             ,QV_CURR=moist(ims,kms,jms,P_QV), F_QV=F_QV            &
+!     &             ,QC_CURR=moist(ims,kms,jms,P_QC), F_QC=F_QC            &
+!     &             ,QR_CURR=moist(ims,kms,jms,P_QR), F_QR=F_QR            &
+!     &             ,QI_CURR=moist(ims,kms,jms,P_QI), F_QI=F_QI            &
+!     &             ,QS_CURR=moist(ims,kms,jms,P_QS), F_QS=F_QS            &
+!     &             ,QG_CURR=moist(ims,kms,jms,P_QG), F_QG=F_QG            &
+!#ifdef WRF_CHEM
+!     &             ,GD_CLOUD=grid%GD_CLOUD,GD_CLOUD2=grid%GD_CLOUD2                          &
+!#endif
+!     &                                                          )
+!BENCH_END(cu_driver_tim)
+!
+!      CALL wrf_debug ( 200 , ' call fddagd_driver' )
+!
+!BENCH_START(fdda_driver_tim)
+!      CALL fddagd_driver(itimestep=grid%itimestep,dt=grid%dt,xtime=grid%XTIME,   &
+!                  id=grid%id,      &
+!                  RUNDGDTEN=grid%rundgdten,RVNDGDTEN=grid%rvndgdten,             &
+!                  RTHNDGDTEN=grid%rthndgdten,RQVNDGDTEN=grid%rqvndgdten,         &
+!                  RMUNDGDTEN=grid%rmundgdten,                                    &
+!                  u_ndg_old=fdda3d(ims,kms,jms,P_u_ndg_old),              &
+!                  v_ndg_old=fdda3d(ims,kms,jms,P_v_ndg_old),              &
+!                  t_ndg_old=fdda3d(ims,kms,jms,P_t_ndg_old),              &
+!                  q_ndg_old=fdda3d(ims,kms,jms,P_q_ndg_old),              &
+!                  mu_ndg_old=fdda2d(ims,1,jms,P_mu_ndg_old),              &
+!                  u_ndg_new=fdda3d(ims,kms,jms,P_u_ndg_new),              &
+!                  v_ndg_new=fdda3d(ims,kms,jms,P_v_ndg_new),              &
+!                  t_ndg_new=fdda3d(ims,kms,jms,P_t_ndg_new),              &
+!                  q_ndg_new=fdda3d(ims,kms,jms,P_q_ndg_new),              &
+!                  mu_ndg_new=fdda2d(ims,1,jms,P_mu_ndg_new),              &
+!                  u3d=grid%u_2,v3d=grid%v_2,th_phy=th_phy,rho=rho,moist=moist,      &
+!                  p_phy=p_phy,pi_phy=pi_phy,p8w=p8w,t_phy=t_phy,          &
+!                  dz8w=dz8w,z=grid%z,z_at_w=z_at_w,                            &
+!                  config_flags=config_flags,dx=grid%DX,n_moist=num_moist,  &
+!                  STEPFG=grid%STEPFG,                                          &
+!                  pblh=grid%pblh,ht=grid%ht,                                        &
+!                    IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde     &
+!                   ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme     &
+!                   ,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                             )
+!BENCH_END(fdda_driver_tim)
+
+!!****MARS
+IF (config_flags%modif_wrf) THEN
+!!!!!!!!!!!!!!!!!!!!!!!
+! call to LMD physics !
+!!!!!!!!!!!!!!!!!!!!!!!
+         CALL wrf_debug ( 200 , ' call lmd_driver' )
+         CALL lmd_driver(                                                 &
+           ! structure
+     &         id=grid%id,max_dom=grid%max_dom                            &
+     &        ,DT=grid%dt                                                 &
+     &        ,ITIMESTEP=grid%itimestep                                   &
+           ! position
+     &        ,XLAT=grid%xlat,XLONG=grid%xlong                            &
+     &        ,DX=grid%dx         ,DY=grid%dy                             &
+     &        ,MSFT=grid%msftx,MSFU=grid%msfux,MSFV=grid%msfvx            &
+!     &        ,MSFT=grid%msft,MSFU=grid%msfu,MSFV=grid%msfv               &
+           ! indexes
+     &        ,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                                   &
+           ! time variables
+     &        ,GMT=grid%gmt       ,JULYR=grid%julyr   ,JULDAY=grid%julday &
+           ! output from phy_prep
+     &        ,P8W=p8w            ,DZ8W=dz8w          ,T8W=t8w            &
+           ! Prognostic variables at p points
+!     &        ,Z=grid%em_z                                                &
+     &        ,Z=grid%z                                                   &
+                        ! z is the geopotential height at p points 
+                        ! ... (cf phy_prep in module_big_step_utilities_em)
+     &        ,HT=grid%ht                                                 &
+     &        ,U=u_phy            ,V=v_phy,         W=w_phy               &
+     &        ,TH=th_phy          ,T=t_phy                                &
+     &        ,P=p_phy            ,EXNER=pi_phy               ,RHO=rho    &
+!!!!!ADDITION CAS IDEALISES
+     &        ,PTOP=grid%p_top                                            &
+           ! physics calls
+     &        ,RADT=grid%radt                                             &
+     &        ,CUDT=grid%cudt                                             &
+           ! surface temperature and surface pressure
+     &        ,TSK=grid%tsk,PSFC=grid%psfc                                &
+           ! tendencies for the dynamics
+     &        ,RTHBLTEN=grid%rthblten,RUBLTEN=grid%rublten,RVBLTEN=grid%rvblten    &
+           ! scalars
+!     &        ,NUM_3D_S=num_3d_s,SCALAR=grid%scalar                       &
+     &        ,NUM_3D_S=num_scalar,SCALAR=grid%scalar                      &
+           ! mode
+     &        ,MARS_MODE=config_flags%mars                                &
+           ! added variables
+     &        ,MARS_ALB=grid%albedo_gcm,MARS_TI=grid%therm_inert          &
+     &        ,MARS_CICE=grid%mars_cice,MARS_EMISS=grid%mars_emiss        &
+     &        ,MARS_WICE=grid%mars_wice         &
+     &        ,MARS_TSOIL=grid%mars_tsoil                                 &
+#ifdef NEWPHYS
+     &        ,MARS_ISOIL=grid%mars_isoil       &
+     &        ,MARS_DSOIL=grid%mars_dsoil       &
+#endif
+     &        ,MARS_GW=grid%mars_gw                                       &
+     &        ,NUM_SOIL_LAYERS=config_flags%num_soil_layers               &
+           ! cst fields
+     &        ,CST_AL=config_flags%init_AL                                &
+     &        ,CST_TI=config_flags%init_TI                                &
+     &        ,ISFFLX=config_flags%isfflx                                 &
+     &        ,DIFF_OPT=config_flags%diff_opt                             &
+     &        ,KM_OPT=config_flags%km_opt                                 &
+           ! additional diagnostics
+!     &        ,UAVE=grid%em_uave, USTD=grid%em_ustd &
+!     &        ,VAVE=grid%em_vave, VSTD=grid%em_vstd &
+!     &        ,WAVE=grid%em_wave, WSTD=grid%em_wstd &
+!     &        ,TAVE=grid%em_tave, TSTD=grid%em_tstd &
+     &        ,UAVE=grid%uave, USTD=grid%ustd &
+     &        ,VAVE=grid%vave, VSTD=grid%vstd &
+     &        ,WAVE=grid%wave, WSTD=grid%wstd &
+     &        ,TAVE=grid%tave, TSTD=grid%tstd &
+     &        ,HISTORY_INTERVAL=model_config_rec%history_interval(1)  &
+          !------------------!
+          ! OUTPUT VARIABLES !
+          !------------------!
+#include "module_lmd_driver_output4.inc"
+     &        ,SLPX=grid%slpx,SLPY=grid%slpy)
+ENDIF
+!!!!!!!!!!!!!!!!!!!!!!!
+! call to LMD physics !
+!!!!!!!!!!!!!!!!!!!!!!!
+!****MARS
+
+  END SUBROUTINE first_rk_step_part1
+
+END MODULE module_first_rk_step_part1
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_first_rk_step_part2.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_first_rk_step_part2.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_first_rk_step_part2.F	(revision 142)
@@ -0,0 +1,618 @@
+!WRF:MEDIATION_LAYER:SOLVER
+
+#define BENCH_START(A)
+#define BENCH_END(A)
+
+MODULE module_first_rk_step_part2
+
+CONTAINS
+
+  SUBROUTINE first_rk_step_part2 (   grid , config_flags              &
+                             , moist , moist_tend               &
+                             , chem  , chem_tend                &
+                             , scalar , scalar_tend             &
+                             , fdda3d, fdda2d                   &
+                             , ru_tendf, rv_tendf               &
+                             , rw_tendf, t_tendf                &
+                             , ph_tendf, mu_tendf               &
+                             , tke_tend                         &
+                             , adapt_step_flag , curr_secs      &
+                             , psim , psih , wspd , gz1oz0 , br , chklowq &
+                             , cu_act_flag , hol , th_phy        &
+                             , pi_phy , p_phy , t_phy , u_phy , v_phy     &
+                             , dz8w , p8w , t8w , rho_phy , rho           &
+                             , z_at_w , mu_3d                   &
+                             , ids, ide, jds, jde, kds, kde     &
+                             , ims, ime, jms, jme, kms, kme     &
+                             , ips, ipe, jps, jpe, kps, kpe     &
+                             , k_start , k_end                  &
+                            )
+    USE module_state_description
+    USE module_model_constants
+    USE module_domain, ONLY : domain
+    USE module_configure, ONLY : grid_config_rec_type, model_config_rec
+    USE module_dm
+    USE module_diffusion_em, ONLY : phy_bc, cal_deform_and_div, compute_diff_metrics, &
+                                    vertical_diffusion_2, horizontal_diffusion_2, calculate_km_kh, &
+                                    tke_rhs
+    USE module_em, ONLY : calculate_phy_tend
+!!!!****MARS MARS
+!    USE module_fddaobs_driver, ONLY : fddaobs_driver
+    USE module_bc, ONLY : set_physical_bc3d, set_physical_bc2d
+    USE module_physics_addtendc, ONLY : update_phy_ten
+
+    IMPLICIT NONE
+
+    TYPE ( domain ), INTENT(INOUT) :: grid
+    TYPE ( grid_config_rec_type ), INTENT(IN) :: config_flags
+
+    INTEGER, INTENT(IN) :: ids, ide, jds, jde, kds, kde,     &
+                           ims, ime, jms, jme, kms, kme,     &
+                           ips, ipe, jps, jpe, kps, kpe
+
+    LOGICAL ,INTENT(IN)                        :: adapt_step_flag
+    REAL, INTENT(IN)                           :: curr_secs
+
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: moist
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: moist_tend
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: chem
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: chem_tend
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: scalar
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: scalar_tend
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_fdda3d),INTENT(INOUT)  :: fdda3d
+    REAL    ,DIMENSION(ims:ime,1:1,jms:jme,num_fdda2d),INTENT(INOUT)      :: fdda2d
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: psim
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: psih
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: wspd
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: gz1oz0
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: br
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: chklowq
+    LOGICAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: cu_act_flag
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: hol
+
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: th_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: pi_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: u_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: v_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: dz8w
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p8w
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t8w
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho_phy
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: z_at_w
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: mu_3d
+
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ru_tendf
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rv_tendf
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rw_tendf
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ph_tendf
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_tendf
+    REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: tke_tend
+
+    REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: mu_tendf
+
+    INTEGER , INTENT(IN)                          ::  k_start, k_end
+
+! Local
+
+    REAL, DIMENSION( ims:ime, jms:jme ) :: ht_loc
+    INTEGER, DIMENSION( ims:ime, jms:jme ) :: shadowmask 
+    INTEGER                             :: ij
+    INTEGER  num_roof_layers
+    INTEGER  num_wall_layers
+    INTEGER  num_road_layers
+    INTEGER  iswater
+    INTEGER  rk_step 
+
+ ! initialize all tendencies to zero in order to update physics
+ ! tendencies first (separate from dry dynamics).
+
+    rk_step = 1
+
+! calculate_phy_tend
+
+BENCH_START(cal_phy_tend)
+      !$OMP PARALLEL DO   &
+      !$OMP PRIVATE ( ij )
+
+      DO ij = 1 , grid%num_tiles
+
+        CALL wrf_debug ( 200 , ' call calculate_phy_tend' )
+        CALL calculate_phy_tend (config_flags,grid%mut,grid%muu,grid%muv,pi_phy,            &
+                     grid%rthraten,                                         &
+                     grid%rublten,grid%rvblten,grid%rthblten,                         &
+                     grid%rqvblten,grid%rqcblten,grid%rqiblten,                       &
+                     grid%rthcuten,grid%rqvcuten,grid%rqccuten,grid%rqrcuten,              &
+                     grid%rqicuten,grid%rqscuten,                                &
+                     grid%RUNDGDTEN,grid%RVNDGDTEN,grid%RTHNDGDTEN,grid%RQVNDGDTEN,        &
+                     grid%RMUNDGDTEN,                                       &
+                     ids,ide, jds,jde, kds,kde,                        &
+                     ims,ime, jms,jme, kms,kme,                        &
+                     grid%i_start(ij), min(grid%i_end(ij),ide-1),      &
+                     grid%j_start(ij), min(grid%j_end(ij),jde-1),      &
+                     k_start    , min(k_end,kde-1)                     )
+
+      ENDDO
+      !$OMP END PARALLEL DO
+BENCH_END(cal_phy_tend)
+
+! tke diffusion
+
+       IF(config_flags%diff_opt .eq. 2 .OR. config_flags%diff_opt .eq. 1) THEN
+
+BENCH_START(comp_diff_metrics_tim)
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         DO ij = 1 , grid%num_tiles
+           CALL wrf_debug ( 200 , ' call compute_diff_metrics ' )
+           CALL compute_diff_metrics ( config_flags, grid%ph_2, grid%phb, grid%z, grid%rdz, grid%rdzw, &
+                                       grid%zx, grid%zy, grid%rdx, grid%rdy,                      &
+                                       ids, ide, jds, jde, kds, kde,          &
+                                       ims, ime, jms, jme, kms, kme,          &
+                                       grid%i_start(ij), grid%i_end(ij),      &
+                                       grid%j_start(ij), grid%j_end(ij),      &
+                                       k_start    , k_end                    )
+         ENDDO
+         !$OMP END PARALLEL DO
+BENCH_END(comp_diff_metrics_tim)
+
+#ifdef DM_PARALLEL
+#  include "HALO_EM_TKE_C.inc"
+#  include "PERIOD_BDY_EM_A1.inc"
+#endif
+
+BENCH_START(tke_diff_bc_tim)
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+
+         DO ij = 1 , grid%num_tiles
+
+           CALL wrf_debug ( 200 , ' call bc for diffusion_metrics ' )
+           CALL set_physical_bc3d( grid%rdzw , 'w', config_flags,           &
+                                   ids, ide, jds, jde, kds, kde,       &
+                                   ims, ime, jms, jme, kms, kme,       &
+                                   ips, ipe, jps, jpe, kps, kpe,       &
+                                   grid%i_start(ij), grid%i_end(ij),   &
+                                   grid%j_start(ij), grid%j_end(ij),   &
+                                   k_start    , k_end                 )
+           CALL set_physical_bc3d( grid%rdz , 'w', config_flags,            &
+                                   ids, ide, jds, jde, kds, kde,       &
+                                   ims, ime, jms, jme, kms, kme,       &
+                                   ips, ipe, jps, jpe, kps, kpe,       &
+                                   grid%i_start(ij), grid%i_end(ij),   &
+                                   grid%j_start(ij), grid%j_end(ij),   &
+                                   k_start    , k_end                 )
+           CALL set_physical_bc3d( grid%z , 'w', config_flags,              &
+                                   ids, ide, jds, jde, kds, kde,       &
+                                   ims, ime, jms, jme, kms, kme,       &
+                                   ips, ipe, jps, jpe, kps, kpe,       &
+                                   grid%i_start(ij), grid%i_end(ij),   &
+                                   grid%j_start(ij), grid%j_end(ij),   &
+                                   k_start    , k_end                 )
+           CALL set_physical_bc3d( grid%zx , 'w', config_flags,             &
+                                   ids, ide, jds, jde, kds, kde,       &
+                                   ims, ime, jms, jme, kms, kme,       &
+                                   ips, ipe, jps, jpe, kps, kpe,       &
+                                   grid%i_start(ij), grid%i_end(ij),   &
+                                   grid%j_start(ij), grid%j_end(ij),   &
+                                   k_start    , k_end                 )
+           CALL set_physical_bc3d( grid%zy , 'w', config_flags,             &
+                                   ids, ide, jds, jde, kds, kde,       &
+                                   ims, ime, jms, jme, kms, kme,       &
+                                   ips, ipe, jps, jpe, kps, kpe,       &
+                                   grid%i_start(ij), grid%i_end(ij),   &
+                                   grid%j_start(ij), grid%j_end(ij),   &
+                                   k_start    , k_end                 )
+           CALL set_physical_bc2d( grid%ustm, 't', config_flags,            &
+                                   ids, ide, jds, jde,                 &
+                                   ims, ime, jms, jme,                 &
+                                   ips, ipe, jps, jpe,                 &
+                                   grid%i_start(ij), grid%i_end(ij),   &
+                                   grid%j_start(ij), grid%j_end(ij)   )
+
+         ENDDO
+         !$OMP END PARALLEL DO
+BENCH_END(tke_diff_bc_tim)
+
+BENCH_START(deform_div_tim)
+
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+
+         DO ij = 1 , grid%num_tiles
+
+           CALL wrf_debug ( 200 , ' call cal_deform_and_div' )
+           CALL cal_deform_and_div ( config_flags,grid%u_2,grid%v_2,grid%w_2,grid%div,  &
+                                     grid%defor11,grid%defor22,grid%defor33,            &
+                                     grid%defor12,grid%defor13,grid%defor23,            &
+                                     grid%u_base, grid%v_base,grid%msfux,grid%msfuy,    &
+                                     grid%msfvx,grid%msfvy,grid%msftx,grid%msfty,       &
+                                     grid%rdx, grid%rdy, grid%dn, grid%dnw, grid%rdz,   &
+                                     grid%rdzw,grid%fnm,grid%fnp,grid%cf1,grid%cf2,     &
+                                     grid%cf3,grid%zx,grid%zy,            &
+                                     ids, ide, jds, jde, kds, kde,        &
+                                     ims, ime, jms, jme, kms, kme,        &
+                                     grid%i_start(ij), grid%i_end(ij),    &
+                                     grid%j_start(ij), grid%j_end(ij),    &
+                                     k_start    , k_end                  )
+         ENDDO
+         !$OMP END PARALLEL DO
+BENCH_END(deform_div_tim)
+
+#ifdef DM_PARALLEL
+#     include "HALO_EM_TKE_D.inc"
+#endif
+
+! calculate tke, kmh, and kmv
+
+BENCH_START(calc_tke_tim)
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         DO ij = 1 , grid%num_tiles
+
+           CALL wrf_debug ( 200 , ' call calculate_km_kh' )
+           CALL calculate_km_kh( config_flags,grid%dt,grid%dampcoef,grid%zdamp,         &
+                                 config_flags%damp_opt,                                 &
+                                 grid%xkmh,grid%xkmv,grid%xkhh,grid%xkhv,grid%bn2,      &
+                                 grid%khdif,grid%kvdif,grid%div,                        &
+                                 grid%defor11,grid%defor22,grid%defor33,grid%defor12,   &
+                                 grid%defor13,grid%defor23,                             &
+                                 grid%tke_2,p8w,t8w,th_phy,                             &
+                                 t_phy,p_phy,moist,grid%dn,grid%dnw,                    &
+                                 grid%dx,grid%dy,grid%rdz,grid%rdzw,                    &
+                                 config_flags%mix_isotropic,num_moist,                  &
+                                 grid%cf1, grid%cf2, grid%cf3, grid%warm_rain,          &
+                                 grid%mix_upper_bound,                                  &
+                                 grid%msftx, grid%msfty,                                &
+                                 ids,ide, jds,jde, kds,kde,                             &
+                                 ims,ime, jms,jme, kms,kme,                             &
+                                 grid%i_start(ij), grid%i_end(ij),                      &
+                                 grid%j_start(ij), grid%j_end(ij),                      &
+                                 k_start    , k_end                          )
+         ENDDO
+       !$OMP END PARALLEL DO
+BENCH_END(calc_tke_tim)
+
+#ifdef DM_PARALLEL
+#     include "HALO_EM_TKE_E.inc"
+#endif
+
+       ENDIF
+
+#ifdef DM_PARALLEL
+#      include "PERIOD_BDY_EM_PHY_BC.inc"
+       IF ( config_flags%grid_fdda .eq. 1) THEN
+#      include "PERIOD_BDY_EM_FDDA_BC.inc"
+       ENDIF
+#      include "PERIOD_BDY_EM_CHEM.inc"
+#endif
+
+BENCH_START(phy_bc_tim)
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+
+       DO ij = 1 , grid%num_tiles
+
+         CALL wrf_debug ( 200 , ' call phy_bc' )
+         CALL phy_bc (config_flags,grid%div,grid%defor11,grid%defor22,grid%defor33,            &
+                      grid%defor12,grid%defor13,grid%defor23,      &
+                      grid%xkmh,grid%xkmv,grid%xkhh,grid%xkhv,     &
+                      grid%tke_2,                                  &
+                      grid%rublten, grid%rvblten,                  &
+                      ids, ide, jds, jde, kds, kde,                &
+                      ims, ime, jms, jme, kms, kme,                &
+                      ips, ipe, jps, jpe, kps, kpe,                &
+                      grid%i_start(ij), grid%i_end(ij),            &
+                      grid%j_start(ij), grid%j_end(ij),            &
+                      k_start    , k_end                           )
+       ENDDO
+       !$OMP END PARALLEL DO
+BENCH_END(phy_bc_tim)
+
+#ifdef DM_PARALLEL
+!-----------------------------------------------------------------------
+!
+! MPP for some physics tendency, km, kh, deformation, and divergence
+!
+!                                                         * * * * * * *
+!                                            * * * * *    * * * * * * *
+!               *                     *      * * * * *    * * * * * * *
+!             * + *      * + *        +      * * + * *    * * * + * * *
+!               *                     *      * * * * *    * * * * * * *
+!                                            * * * * *    * * * * * * *
+!                                                         * * * * * * *
+!
+! (for PBL)
+! rublten                  x
+! rvblten                             x
+!
+! (for FDDA)
+! rundgdten     x
+! rvndgdten     x
+!
+! (for TKE3)
+! tke_2                                          x               
+! (for TKE5)
+! tke_2                                                         x
+!
+! (for diff_opt >= 1)
+! defor11                  x
+! defor22                             x
+! defor12       x
+! defor13                  x
+! defor23                             x
+! div           x
+! xkmv          x
+! xkmh          x
+! xkhv          x
+! xkhh          x
+! tke           x
+!
+!-----------------------------------------------------------------------
+
+!!****MARS: always include this HALO for Mars version ...
+      IF ( ( config_flags%bl_pbl_physics .ge. 1 ) &
+            .OR. ( config_flags%modif_wrf ) ) THEN
+!       IF ( config_flags%bl_pbl_physics .ge. 1 ) THEN
+#      include "HALO_EM_PHYS_PBL.inc"
+       ENDIF
+       IF ( config_flags%grid_fdda .eq. 1) THEN
+#      include "HALO_EM_FDDA.inc"
+       ENDIF
+       IF ( config_flags%diff_opt .ge. 1 ) THEN
+#      include "HALO_EM_PHYS_DIFFUSION.inc"
+       ENDIF
+
+       IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
+#       include "HALO_EM_TKE_3.inc"
+       ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
+#       include "HALO_EM_TKE_5.inc"
+       ELSE
+         WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
+         CALL wrf_error_fatal(TRIM(wrf_err_message))
+       ENDIF
+#endif
+
+BENCH_START(update_phy_ten_tim)
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+
+       DO ij = 1 , grid%num_tiles
+
+         CALL wrf_debug ( 200 , ' call update_phy_ten' )
+         CALL update_phy_ten(t_tendf, ru_tendf, rv_tendf,moist_tend,        &
+                           scalar_tend, mu_tendf,                           &
+                           grid%rthraten,grid%rthblten,grid%rthcuten,       &
+                           grid%rublten,grid%rvblten,                       &
+                           grid%rqvblten,grid%rqcblten,grid%rqiblten,       &
+                           grid%rqvcuten,grid%rqccuten,grid%rqrcuten,       &
+                           grid%rqicuten,grid%rqscuten,grid%RUNDGDTEN,      &
+                           grid%RVNDGDTEN,grid%RTHNDGDTEN,grid%RQVNDGDTEN,  &
+                           grid%RMUNDGDTEN,                                 &
+                           num_moist,num_scalar,config_flags,rk_step,          &
+                           grid%adv_moist_cond,                             &
+                           ids, ide, jds, jde, kds, kde,                    &
+                           ims, ime, jms, jme, kms, kme,                    &
+                           grid%i_start(ij), grid%i_end(ij),                &
+                           grid%j_start(ij), grid%j_end(ij),                &
+                           k_start, k_end                               )
+
+       END DO
+       !$OMP END PARALLEL DO
+BENCH_END(update_phy_ten_tim)
+
+#ifdef PLANET
+       ! do rayleigh (and zonal-average newtonian) damping during
+       ! first iteration of RK loop only
+
+       IF ( (config_flags%damp_opt == 101) .OR. &
+            (config_flags%damp_opt == 103)      ) THEN
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         DO ij = 1 , grid%num_tiles
+           CALL damptop( grid%u_2, grid%v_2, grid%t_2, &
+                         grid%mut, grid%muu, grid%muv, &
+                         pi_phy,                                &
+                         t_tendf, ru_tendf, rv_tendf, P2SI,     &
+                         ids, ide, jds, jde, kds, kde,          &
+                         ims, ime, jms, jme, kms, kme,          &
+                         grid%i_start(ij), grid%i_end(ij),      &
+                         grid%j_start(ij), grid%j_end(ij),      &
+                         k_start, k_end                         )
+         END DO
+         !$OMP END PARALLEL DO
+       END IF
+#endif
+
+       IF( config_flags%diff_opt .eq. 2 .and. config_flags%km_opt .eq. 2 ) THEN
+
+BENCH_START(tke_rhs_tim)
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         DO ij = 1 , grid%num_tiles
+
+           CALL tke_rhs  ( tke_tend,grid%bn2,                           &
+                         config_flags,grid%defor11,grid%defor22,      &
+                         grid%defor33,                                &
+                         grid%defor12,grid%defor13,grid%defor23,      &
+                         grid%u_2,grid%v_2,grid%w_2,grid%div,         &
+                         grid%tke_2,grid%mut,                         &
+                         th_phy,p_phy,p8w,t8w,grid%z,grid%fnm,        & 
+                         grid%fnp,grid%cf1,grid%cf2,grid%cf3,         &     
+                         grid%msftx,grid%msfty,grid%xkmh,             &
+                         grid%xkmv,grid%xkhv,grid%rdx,grid%rdy,       &
+                         grid%dx,grid%dy,grid%dt,grid%zx,grid%zy,     &
+                         grid%rdz,grid%rdzw,grid%dn,                  &
+                         grid%dnw,config_flags%mix_isotropic,         &
+                         grid%hfx, grid%qfx, moist(ims,kms,jms,P_QV), &
+                         grid%ustm, rho,                              &
+                         ids, ide, jds, jde, kds, kde,                &
+                         ims, ime, jms, jme, kms, kme,                &
+                         grid%i_start(ij), grid%i_end(ij),            &
+                         grid%j_start(ij), grid%j_end(ij),            &
+                         k_start    , k_end                           )
+
+         ENDDO
+         !$OMP END PARALLEL DO
+BENCH_END(tke_rhs_tim)
+
+       ENDIF
+
+! calculate vertical diffusion first and then horizontal
+! (keep this order)
+
+       IF(config_flags%diff_opt .eq. 2) THEN
+
+!!!!****MARS: vertical diffusion is done by the physics
+!!!!****MARS: a part si isfflx=1 (SGS completement fait par WRF)
+!!!!****MARS: ou si TKE_heat precisee dans la namelist
+!       IF ( (config_flags%bl_pbl_physics .eq. 0) &
+!             .AND. (.not. config_flags%modif_wrf ) ) THEN
+!!         IF (config_flags%bl_pbl_physics .eq. 0) THEN
+!!
+!!
+       IF ( ( config_flags%bl_pbl_physics .eq. 0 ) &
+             .AND. ( ( config_flags%isfflx .ge. 1 ) &
+             .OR. ( config_flags%tke_heat_flux .ne. 0.) ) ) THEN
+!!
+!!
+BENCH_START(vert_diff_tim)
+           !$OMP PARALLEL DO   &
+           !$OMP PRIVATE ( ij )
+           DO ij = 1 , grid%num_tiles
+
+             CALL wrf_debug ( 200 , ' call vertical_diffusion_2 ' )
+             CALL vertical_diffusion_2( ru_tendf, rv_tendf, rw_tendf,            &
+                                      t_tendf, tke_tend,                         &
+                                      moist_tend, num_moist,                      &
+                                      chem_tend, num_chem,                       &
+                                      scalar_tend, num_scalar,                     &
+                                      grid%u_2, grid%v_2,                                  &
+                                      grid%t_2,grid%u_base,grid%v_base,grid%t_base,grid%qv_base,          &
+                                      grid%mut,grid%tke_2,config_flags, &
+                                      grid%defor13,grid%defor23,grid%defor33,                   &
+                                      grid%div, moist, chem, scalar,                  &
+                                      grid%xkmv, grid%xkhv, config_flags%km_opt,                        &
+                                      grid%fnm, grid%fnp, grid%dn, grid%dnw, grid%rdz, grid%rdzw, &
+                                      grid%hfx, grid%qfx, grid%ustm, rho,        &
+                                      ids, ide, jds, jde, kds, kde,              &
+                                      ims, ime, jms, jme, kms, kme,              &
+                                      grid%i_start(ij), grid%i_end(ij),          &
+                                      grid%j_start(ij), grid%j_end(ij),          &
+                                      k_start, k_end                             )
+
+           ENDDO
+           !$OMP END PARALLEL DO
+BENCH_END(vert_diff_tim)
+
+         ENDIF
+!
+BENCH_START(hor_diff_tim)
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         DO ij = 1 , grid%num_tiles
+
+           CALL wrf_debug ( 200 , ' call horizontal_diffusion_2' )
+           CALL horizontal_diffusion_2( t_tendf, ru_tendf, rv_tendf, rw_tendf, &
+                                      tke_tend,                              &
+                                      moist_tend, num_moist,                  &
+                                      chem_tend, num_chem,                   &
+                                      scalar_tend, num_scalar,                 &
+                                      grid%t_2, th_phy,                           &
+                                      grid%mut, grid%tke_2, config_flags,              &
+                                      grid%defor11, grid%defor22, grid%defor12,             &
+                                      grid%defor13, grid%defor23, grid%div,                 &
+                                      moist, chem, scalar,                   &
+                                      grid%msfux,grid%msfuy, grid%msfvx,grid%msfvy, grid%msftx,  &
+                                      grid%msfty, grid%xkmh, grid%xkhh, config_flags%km_opt,     &
+                                      grid%rdx, grid%rdy, grid%rdz, grid%rdzw,                   &
+                                      grid%fnm, grid%fnp, grid%cf1, grid%cf2, grid%cf3,          &
+                                      grid%zx, grid%zy, grid%dn, grid%dnw,                       &
+                                      ids, ide, jds, jde, kds, kde,          &
+                                      ims, ime, jms, jme, kms, kme,          &
+                                      grid%i_start(ij), grid%i_end(ij),      &
+                                      grid%j_start(ij), grid%j_end(ij),      &
+                                      k_start    , k_end                    )
+         ENDDO
+         !$OMP END PARALLEL DO
+BENCH_END(hor_diff_tim)
+       ENDIF
+
+!!!!****MARS MARS
+!!!!****MARS MARS
+
+!       IF ( grid%obs_nudge_opt .EQ. 1 ) THEN
+!# ifdef DM_PARALLEL
+!#       include "HALO_OBS_NUDGE.inc"
+!#endif
+!!***********************************************************************
+!! This section for obs nudging
+!         !$OMP PARALLEL DO   &
+!         !$OMP PRIVATE ( ij )
+!
+!         DO ij = 1 , grid%num_tiles
+!
+!           CALL fddaobs_driver (grid%grid_id, model_config_rec%grid_id, &
+!                   model_config_rec%parent_id, config_flags%restart,    &
+!                   grid%obs_nudge_opt,                                  &
+!                   grid%obs_ipf_errob,                                  &
+!                   grid%obs_ipf_nudob,                                  &
+!                   grid%fdda_start,                                     &
+!                   grid%fdda_end,                                       &
+!                   grid%obs_nudge_wind,                                 &
+!                   grid%obs_nudge_temp,                                 &
+!                   grid%obs_nudge_mois,                                 &
+!                   grid%obs_nudge_pstr,                                 &
+!                   grid%obs_coef_wind,                                  &
+!                   grid%obs_coef_temp,                                  &
+!                   grid%obs_coef_mois,                                  &
+!                   grid%obs_coef_pstr,                                  &             
+!                   grid%obs_rinxy,                                      &
+!                   grid%obs_rinsig,                                     &
+!                   grid%obs_npfi,                                       &
+!                   grid%obs_ionf,                                       &
+!                   grid%obs_nobs_prt,                                   &
+!                   grid%obs_idynin,                                     &
+!                   grid%obs_dtramp,                                     &
+!                   model_config_rec%cen_lat(1),                         &
+!                   model_config_rec%cen_lon(1),                         &
+!                   config_flags%truelat1,                               &
+!                   config_flags%truelat2,                               &
+!                   config_flags%map_proj,                               &
+!                   model_config_rec%i_parent_start,                     &
+!                   model_config_rec%j_parent_start,                     &
+!                   grid%parent_grid_ratio,                              &
+!                   grid%max_dom, grid%itimestep,                        &
+!                   grid%dt, grid%gmt, grid%julday, grid%fdob,           &
+!                   grid%max_obs,                                        &
+!                   model_config_rec%nobs_ndg_vars,                      &
+!                   model_config_rec%nobs_err_flds,                      &
+!                   grid%fdob%nstat, grid%fdob%varobs, grid%fdob%errf,   &
+!                   grid%dx, grid%KPBL,grid%HT,                          &
+!                   grid%mut, grid%muu, grid%muv,               &
+!                   grid%msftx, grid%msfty, grid%msfux, grid%msfuy, grid%msfvx, grid%msfvy, &
+!                   p_phy, t_tendf, t0,                                  &
+!                   grid%u_2, grid%v_2, grid%t_2,               &
+!                   moist(ims,kms,jms,P_QV),                                   &
+!                   grid%pb, grid%p_top, grid%p,                   &
+!                   grid%uratx, grid%vratx, grid%tratx,                  &
+!                   ru_tendf, rv_tendf,                                  &
+!                   moist_tend(ims,kms,jms,P_QV), grid%obs_savwt,           &
+!                   ids,ide, jds,jde, kds,kde,                           &
+!                   ims,ime, jms,jme, kms,kme,                           &
+!                   grid%i_start(ij), min(grid%i_end(ij),ide-1),         &
+!                   grid%j_start(ij), min(grid%j_end(ij),jde-1),         &
+!                   k_start    , min(k_end,kde-1)                     )
+! 
+!         ENDDO
+!         !$OMP END PARALLEL DO
+!       ENDIF  ! obs_nudge_opt .eq. 1
+!! 
+!!***********************************************************************
+
+  END SUBROUTINE first_rk_step_part2
+
+END MODULE module_first_rk_step_part2
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_initialize_les.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_initialize_les.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_initialize_les.F	(revision 142)
@@ -0,0 +1,1004 @@
+!IDEAL:MODEL_LAYER:INITIALIZATION
+!
+
+!  This MODULE holds the routines which are used to perform various initializations
+!  for the individual domains.  
+
+!  This MODULE CONTAINS the following routines:
+
+!  initialize_field_test - 1. Set different fields to different constant
+!                             values.  This is only a test.  If the correct
+!                             domain is not found (based upon the "id")
+!                             then a fatal error is issued.               
+
+!-----------------------------------------------------------------------
+
+MODULE module_initialize_ideal
+
+   USE module_domain
+   USE module_io_domain
+   USE module_state_description
+   USE module_model_constants
+   USE module_bc
+   USE module_timing
+   USE module_configure
+   USE module_init_utilities
+#ifdef DM_PARALLEL
+   USE module_dm
+#endif
+
+
+CONTAINS
+
+
+!-------------------------------------------------------------------
+! this is a wrapper for the solver-specific init_domain routines.
+! Also dereferences the grid variables and passes them down as arguments.
+! This is crucial, since the lower level routines may do message passing
+! and this will get fouled up on machines that insist on passing down
+! copies of assumed-shape arrays (by passing down as arguments, the 
+! data are treated as assumed-size -- ie. f77 -- arrays and the copying
+! business is avoided).  Fie on the F90 designers.  Fie and a pox.
+
+   SUBROUTINE init_domain ( grid )
+
+   IMPLICIT NONE
+
+   !  Input data.
+   TYPE (domain), POINTER :: grid 
+   !  Local data.
+   INTEGER :: idum1, idum2
+
+   CALL set_scalar_indices_from_config ( head_grid%id , idum1, idum2 )
+
+     CALL init_domain_rk( grid &
+!
+#include <actual_new_args.inc>
+!
+                        )
+
+   END SUBROUTINE init_domain
+
+!-------------------------------------------------------------------
+
+   SUBROUTINE init_domain_rk ( grid &
+!
+# include <dummy_new_args.inc>
+!
+)
+   IMPLICIT NONE
+
+   !  Input data.
+   TYPE (domain), POINTER :: grid
+
+# include <dummy_new_decl.inc>
+
+   TYPE (grid_config_rec_type)              :: config_flags
+
+   !  Local data
+   INTEGER                             ::                       &
+                                  ids, ide, jds, jde, kds, kde, &
+                                  ims, ime, jms, jme, kms, kme, &
+                                  its, ite, jts, jte, kts, kte, &
+                                  i, j, k
+
+   ! Local data
+
+   INTEGER, PARAMETER :: nl_max = 1000
+   REAL, DIMENSION(nl_max) :: zk, p_in, theta, rho, u, v, qv, pd_in
+   INTEGER :: nl_in
+
+
+   INTEGER :: icm,jcm, ii, im1, jj, jm1, loop, error, fid, nxc, nyc
+   REAL    :: u_mean,v_mean, f0, p_surf, p_level, qvf, z_at_v, z_at_u
+   REAL    :: z_scale, xrad, yrad, zrad, rad, delt, cof1, cof2
+!   REAL, EXTERNAL :: interp_0
+   REAL    :: hm
+   REAL    :: pi
+
+!  stuff from original initialization that has been dropped from the Registry 
+   REAL    :: vnu, xnu, xnus, dinit0, cbh, p0_temp, t0_temp, zd, zt
+   REAL    :: qvf1, qvf2, pd_surf
+   INTEGER :: it
+   real :: thtmp, ptmp, temp(3)
+
+   LOGICAL :: moisture_init
+   LOGICAL :: stretch_grid, dry_sounding
+
+  INTEGER :: xs , xe , ys , ye
+  REAL :: mtn_ht
+   LOGICAL, EXTERNAL :: wrf_dm_on_monitor
+!  For LES, add randx
+   real :: randx
+
+!!MARS
+ REAL :: lon_input, lat_input, alt_input, tsurf_input
+!!MARS
+
+#ifdef DM_PARALLEL
+#    include <data_calls.inc>
+#endif
+
+
+   SELECT CASE ( model_data_order )
+         CASE ( DATA_ORDER_ZXY )
+   kds = grid%sd31 ; kde = grid%ed31 ;
+   ids = grid%sd32 ; ide = grid%ed32 ;
+   jds = grid%sd33 ; jde = grid%ed33 ;
+
+   kms = grid%sm31 ; kme = grid%em31 ;
+   ims = grid%sm32 ; ime = grid%em32 ;
+   jms = grid%sm33 ; jme = grid%em33 ;
+
+   kts = grid%sp31 ; kte = grid%ep31 ;   ! note that tile is entire patch
+   its = grid%sp32 ; ite = grid%ep32 ;   ! note that tile is entire patch
+   jts = grid%sp33 ; jte = grid%ep33 ;   ! note that tile is entire patch
+         CASE ( DATA_ORDER_XYZ )
+   ids = grid%sd31 ; ide = grid%ed31 ;
+   jds = grid%sd32 ; jde = grid%ed32 ;
+   kds = grid%sd33 ; kde = grid%ed33 ;
+
+   ims = grid%sm31 ; ime = grid%em31 ;
+   jms = grid%sm32 ; jme = grid%em32 ;
+   kms = grid%sm33 ; kme = grid%em33 ;
+
+   its = grid%sp31 ; ite = grid%ep31 ;   ! note that tile is entire patch
+   jts = grid%sp32 ; jte = grid%ep32 ;   ! note that tile is entire patch
+   kts = grid%sp33 ; kte = grid%ep33 ;   ! note that tile is entire patch
+         CASE ( DATA_ORDER_XZY )
+   ids = grid%sd31 ; ide = grid%ed31 ;
+   kds = grid%sd32 ; kde = grid%ed32 ;
+   jds = grid%sd33 ; jde = grid%ed33 ;
+
+   ims = grid%sm31 ; ime = grid%em31 ;
+   kms = grid%sm32 ; kme = grid%em32 ;
+   jms = grid%sm33 ; jme = grid%em33 ;
+
+   its = grid%sp31 ; ite = grid%ep31 ;   ! note that tile is entire patch
+   kts = grid%sp32 ; kte = grid%ep32 ;   ! note that tile is entire patch
+   jts = grid%sp33 ; jte = grid%ep33 ;   ! note that tile is entire patch
+
+   END SELECT
+
+
+!  stretch_grid = .true.
+!  FOR LES, set stretch to false
+   stretch_grid = .false.
+   delt = 3.
+!   z_scale = .50
+   z_scale = .40
+   pi = 2.*asin(1.0)
+   write(6,*) ' pi is ',pi
+   nxc = (ide-ids)/2
+   nyc = (jde-jds)/2
+
+   CALL model_to_grid_config_rec ( grid%id , model_config_rec , config_flags )
+
+! here we check to see if the boundary conditions are set properly
+
+   CALL boundary_condition_check( config_flags, bdyzone, error, grid%id )
+
+   moisture_init = .true.
+
+    grid%itimestep=0
+
+#ifdef DM_PARALLEL
+   CALL wrf_dm_bcast_bytes( icm , IWORDSIZE )
+   CALL wrf_dm_bcast_bytes( jcm , IWORDSIZE )
+#endif
+
+    CALL nl_set_mminlu(1, '    ')
+    CALL nl_set_iswater(1,0)
+    CALL nl_set_cen_lat(1,40.)
+    CALL nl_set_cen_lon(1,-105.)
+    CALL nl_set_truelat1(1,0.)
+    CALL nl_set_truelat2(1,0.)
+    CALL nl_set_moad_cen_lat (1,0.)
+    CALL nl_set_stand_lon (1,0.)
+    CALL nl_set_map_proj(1,0)
+
+
+!  here we initialize data we currently is not initialized 
+!  in the input data
+
+    DO j = jts, jte
+      DO i = its, ite
+         grid%msftx(i,j)    = 1.
+         grid%msfty(i,j)    = 1.
+         grid%msfux(i,j)    = 1.
+         grid%msfuy(i,j)    = 1.
+         grid%msfvx(i,j)    = 1.
+         grid%msfvx_inv(i,j)= 1.
+         grid%msfvy(i,j)    = 1.
+         grid%sina(i,j)     = 0.
+         grid%cosa(i,j)     = 1.
+         grid%e(i,j)        = 0.
+!  for LES, include Coriolis force
+         grid%f(i,j)        = 0.  !!MARS MARS 1.e-4 
+!!      grid%f(i,j)     = 2*EOMEG*SIN(grid%xlat(i,j)*degrad)
+      END DO
+   END DO
+
+    DO j = jts, jte
+    DO k = kts, kte
+      DO i = its, ite
+         grid%ww(i,k,j)     = 0.
+      END DO
+   END DO
+   END DO
+
+   grid%step_number = 0
+
+! set up the grid
+
+   IF (stretch_grid) THEN ! exponential stretch for eta (nearly constant dz)
+     DO k=1, kde
+      grid%znw(k) = (exp(-(k-1)/float(kde-1)/z_scale) - exp(-1./z_scale))/ &
+                                (1.-exp(-1./z_scale))
+     ENDDO
+   ELSE
+
+!!!MARS
+grid%znw(1)=1.000
+grid%znw(2)=0.9995 !5m
+grid%znw(3)=0.9980 !20m
+grid%znw(4)=0.9950 !55m
+DO k=5, kde
+   grid%znw(k) = grid%znw(4) * ( 1. - float(k-4)/float(kde-4) )
+ENDDO
+!!!!MARS
+!!
+!     DO k=1, kde
+!      grid%znw(k) = 1. - float(k-1)/float(kde-1)
+!     ENDDO
+
+   ENDIF
+
+   DO k=1, kde-1
+    grid%dnw(k) = grid%znw(k+1) - grid%znw(k)
+    grid%rdnw(k) = 1./grid%dnw(k)
+    grid%znu(k) = 0.5*(grid%znw(k+1)+grid%znw(k))
+   ENDDO
+   DO k=2, kde-1
+    grid%dn(k) = 0.5*(grid%dnw(k)+grid%dnw(k-1))
+    grid%rdn(k) = 1./grid%dn(k)
+    grid%fnp(k) = .5* grid%dnw(k  )/grid%dn(k)
+    grid%fnm(k) = .5* grid%dnw(k-1)/grid%dn(k)
+   ENDDO
+
+   cof1 = (2.*grid%dn(2)+grid%dn(3))/(grid%dn(2)+grid%dn(3))*grid%dnw(1)/grid%dn(2) 
+   cof2 =     grid%dn(2)        /(grid%dn(2)+grid%dn(3))*grid%dnw(1)/grid%dn(3) 
+   grid%cf1  = grid%fnp(2) + cof1
+   grid%cf2  = grid%fnm(2) - cof1 - cof2
+   grid%cf3  = cof2       
+
+   grid%cfn  = (.5*grid%dnw(kde-1)+grid%dn(kde-1))/grid%dn(kde-1)
+   grid%cfn1 = -.5*grid%dnw(kde-1)/grid%dn(kde-1)
+   grid%rdx = 1./config_flags%dx
+   grid%rdy = 1./config_flags%dy
+
+!  get the sounding from the ascii sounding file, first get dry sounding and 
+!  calculate base state
+
+  dry_sounding = .true.
+  IF ( wrf_dm_on_monitor() ) THEN
+  write(6,*) ' getting dry sounding for base state '
+
+  CALL get_sounding( zk, p_in, pd_in, theta, rho, u, v, qv, dry_sounding, nl_max, nl_in )
+  ENDIF
+  CALL wrf_dm_bcast_real( zk , nl_max )
+  CALL wrf_dm_bcast_real( p_in , nl_max )
+  CALL wrf_dm_bcast_real( pd_in , nl_max )
+  CALL wrf_dm_bcast_real( theta , nl_max )
+  CALL wrf_dm_bcast_real( rho , nl_max )
+  CALL wrf_dm_bcast_real( u , nl_max )
+  CALL wrf_dm_bcast_real( v , nl_max )
+  CALL wrf_dm_bcast_real( qv , nl_max )
+  CALL wrf_dm_bcast_integer ( nl_in , 1 ) 
+
+  write(6,*) ' returned from reading sounding, nl_in is ',nl_in
+
+!!MARS
+!!MARS
+  open(unit=14,file='input_coord',form='formatted',status='old')
+  rewind(14)
+  read(14,*) lon_input
+  read(14,*) lat_input
+  close(14)
+  write(6,*) ' lon is ',lon_input
+  write(6,*) ' lat is ',lat_input
+!!MARS
+!!MARS
+
+!!MARS
+!!MARS
+  open(unit=18,file='input_more',form='formatted',status='old')
+  rewind(18)
+  read(18,*) alt_input, tsurf_input
+  close(18)
+  write(6,*) ' alt is ',alt_input
+  write(6,*) ' tsurf is ',tsurf_input
+!!MARS
+!!MARS
+
+!  find ptop for the desired ztop (ztop is input from the namelist),
+!  and find surface pressure
+
+  write(6,*) ' ztop above ground is ',config_flags%ztop
+  write(6,*) ' real ztop is ',config_flags%ztop + alt_input
+  grid%p_top = interp_0( p_in, zk, config_flags%ztop + alt_input, nl_in )
+
+  DO j=jts,jte
+  DO i=its,ite
+!!MARS
+    grid%ht(i,j) = alt_input
+    grid%tsk(i,j) = tsurf_input
+!!MARS
+    grid%xlat(i,j) = lat_input !+ float(j)*config_flags%dy/59000.
+    grid%xlong(i,j) = lon_input !+ float(i)*config_flags%dx/59000.
+    grid%mars_emiss(i,j)=0.95
+    grid%mars_cice(i,j)=0.
+    grid%mars_wice(i,j)=0.
+    grid%slpx(i,j) = 0.
+    grid%slpy(i,j) = 0.
+   DO k=1,config_flags%num_soil_layers
+    grid%mars_tsoil(i,k,j) = 0.
+   ENDDO
+    grid%mars_gw(i,1,j) = 0.
+    grid%mars_gw(i,2,j) = 0.
+    grid%mars_gw(i,3,j) = 0.
+    grid%mars_gw(i,4,j) = 0.
+    grid%mars_gw(i,5,j) = 0.
+!!MARS
+  ENDDO
+  ENDDO
+
+  xs=ide/2 -3
+  xs=ids   -3
+  xe=xs + 6
+  ys=jde/2 -3
+  ye=ys + 6
+  mtn_ht = 500
+#ifdef MTN
+  DO j=max(ys,jds),min(ye,jde-1)
+  DO i=max(xs,ids),min(xe,ide-1)
+     grid%ht(i,j) = mtn_ht * 0.25 * &
+               ( 1. + COS ( 2*pi/(xe-xs) * ( i-xs ) + pi ) ) * &
+               ( 1. + COS ( 2*pi/(ye-ys) * ( j-ys ) + pi ) )
+  ENDDO
+  ENDDO
+#endif
+#ifdef EW_RIDGE
+  DO j=max(ys,jds),min(ye,jde-1)
+  DO i=ids,ide
+     grid%ht(i,j) = mtn_ht * 0.50 * &
+               ( 1. + COS ( 2*pi/(ye-ys) * ( j-ys ) + pi ) )
+  ENDDO
+  ENDDO
+#endif
+#ifdef NS_RIDGE
+  DO j=jds,jde
+  DO i=max(xs,ids),min(xe,ide-1)
+     grid%ht(i,j) = mtn_ht * 0.50 * &
+               ( 1. + COS ( 2*pi/(xe-xs) * ( i-xs ) + pi ) )
+  ENDDO
+  ENDDO
+#endif
+  DO j=jts,jte
+  DO i=its,ite
+    grid%phb(i,1,j) = g * grid%ht(i,j)
+    grid%ph0(i,1,j) = g * grid%ht(i,j)
+  ENDDO
+  ENDDO
+
+  DO J = jts, jte
+  DO I = its, ite
+
+    p_surf = interp_0( p_in, zk, grid%phb(i,1,j)/g, nl_in )
+    grid%mub(i,j) = p_surf-grid%p_top
+
+!  this is dry hydrostatic sounding (base state), so given grid%p (coordinate),
+!  interp theta (from interp) and compute 1/rho from eqn. of state
+
+    DO K = 1, kte-1
+      p_level = grid%znu(k)*(p_surf - grid%p_top) + grid%p_top
+      grid%pb(i,k,j) = p_level
+      grid%t_init(i,k,j) = interp_0( theta, p_in, p_level, nl_in ) - t0
+      grid%alb(i,k,j) = (r_d/p1000mb)*(grid%t_init(i,k,j)+t0)*(grid%pb(i,k,j)/p1000mb)**cvpm
+    ENDDO
+
+!  calc hydrostatic balance (alternatively we could interp the geopotential from the
+!  sounding, but this assures that the base state is in exact hydrostatic balance with
+!  respect to the model eqns.
+
+    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)
+    ENDDO
+
+  ENDDO
+  ENDDO
+
+  IF ( wrf_dm_on_monitor() ) THEN
+    write(6,*) ' ptop is ',grid%p_top
+    write(6,*) ' base state grid%mub(1,1), p_surf is ',grid%mub(1,1),grid%mub(1,1)+grid%p_top
+  ENDIF
+
+!  calculate full state for each column - this includes moisture.
+
+  write(6,*) ' getting moist sounding for full state '
+  dry_sounding = .false.
+  CALL get_sounding( zk, p_in, pd_in, theta, rho, u, v, qv, dry_sounding, nl_max, nl_in )
+
+  DO J = jts, min(jde-1,jte)
+  DO I = its, min(ide-1,ite)
+
+!  At this point grid%p_top is already set. find the DRY mass in the column 
+!  by interpolating the DRY pressure.  
+
+   pd_surf = interp_0( pd_in, zk, grid%phb(i,1,j)/g, nl_in )
+
+!  compute the perturbation mass and the full mass
+
+    grid%mu_1(i,j) = pd_surf-grid%p_top - grid%mub(i,j)
+    grid%mu_2(i,j) = grid%mu_1(i,j)
+    grid%mu0(i,j) = grid%mu_1(i,j) + grid%mub(i,j)
+
+! given the dry pressure and coordinate system, interp the potential
+! temperature and qv
+
+    do k=1,kde-1
+
+      p_level = grid%znu(k)*(pd_surf - grid%p_top) + grid%p_top
+
+      moist(i,k,j,P_QV) = interp_0( qv, pd_in, p_level, nl_in )
+      grid%t_1(i,k,j)          = interp_0( theta, pd_in, p_level, nl_in ) - t0
+      grid%t_2(i,k,j)          = grid%t_1(i,k,j)
+      
+
+    enddo
+
+!  integrate the hydrostatic equation (from the RHS of the bigstep
+!  vertical momentum equation) down from the top to get grid%p.
+!  first from the top of the model to the top pressure
+
+    k = kte-1  ! top level
+
+    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)/grid%rdnw(k)
+    grid%p(i,k,j) = - 0.5*(grid%mu_1(i,j)+qvf1*grid%mub(i,j))/grid%rdnw(k)/qvf2
+    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)
+
+!  down the column
+
+    do k=kte-2,1,-1
+      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)
+      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)
+    enddo
+
+!  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.
+
+
+    grid%ph_1(i,1,j) = 0.
+    DO k  = 2,kte
+      grid%ph_1(i,k,j) = grid%ph_1(i,k-1,j) - (1./grid%rdnw(k-1))*(       &
+                   (grid%mub(i,j)+grid%mu_1(i,j))*grid%al(i,k-1,j)+ &
+                    grid%mu_1(i,j)*grid%alb(i,k-1,j)  )
+                                                   
+      grid%ph_2(i,k,j) = grid%ph_1(i,k,j) 
+      grid%ph0(i,k,j) = grid%ph_1(i,k,j) + grid%phb(i,k,j)
+    ENDDO
+
+    IF ( wrf_dm_on_monitor() ) THEN
+    if((i==2) .and. (j==2)) then
+     write(6,*) ' grid%ph_1 calc ',grid%ph_1(2,1,2),grid%ph_1(2,2,2),&
+                              grid%mu_1(2,2)+grid%mub(2,2),grid%mu_1(2,2), &
+                              grid%alb(2,1,2),grid%al(1,2,1),grid%rdnw(1)
+    endif
+    ENDIF
+
+  ENDDO
+  ENDDO
+
+!#if 0
+
+!  thermal perturbation to kick off convection
+
+  write(6,*) ' nxc, nyc for perturbation ',nxc,nyc
+  write(6,*) ' delt for perturbation ',delt
+
+! For LES, change the initial random perturbations
+! For 2D test, call randx outside I-loop
+! For 3D runs, call randx inside both I-J loops
+
+  DO J = jts, min(jde-1,jte)
+!   yrad = config_flags%dy*float(j-nyc)/10000.
+    yrad = 0.
+    DO I = its, min(ide-1,ite)
+!     xrad = config_flags%dx*float(i-nxc)/10000.
+      xrad = 0.
+      call random_number (randx)
+      randx = randx - 0.5
+!     DO K = 1, kte-1
+      DO K = 1, 4 
+
+!  No bubbles for LES!
+!  put in preturbation theta (bubble) and recalc density.  note,
+!  the mass in the column is not changing, so when theta changes,
+!  we recompute density and geopotential
+
+!       zrad = 0.5*(grid%ph_1(i,k,j)+grid%ph_1(i,k+1,j)  &
+!                  +grid%phb(i,k,j)+grid%phb(i,k+1,j))/g
+!       zrad = (zrad-1500.)/1500.
+        zrad = 0.
+        RAD=SQRT(xrad*xrad+yrad*yrad+zrad*zrad)
+        IF(RAD <= 1.) THEN
+!          grid%t_1(i,k,j)=grid%t_1(i,k,j)+delt*COS(.5*PI*RAD)**2
+           grid%t_1(i,k,j)=grid%t_1(i,k,j)+ 0.1 *randx
+           grid%t_2(i,k,j)=grid%t_1(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
+
+!  rebalance hydrostatically
+
+      DO k  = 2,kte
+        grid%ph_1(i,k,j) = grid%ph_1(i,k-1,j) - (1./grid%rdnw(k-1))*(       &
+                     (grid%mub(i,j)+grid%mu_1(i,j))*grid%al(i,k-1,j)+ &
+                      grid%mu_1(i,j)*grid%alb(i,k-1,j)  )
+                                                   
+        grid%ph_2(i,k,j) = grid%ph_1(i,k,j) 
+        grid%ph0(i,k,j) = grid%ph_1(i,k,j) + grid%phb(i,k,j)
+      ENDDO
+
+    ENDDO
+  ENDDO
+
+!#endif
+
+   IF ( wrf_dm_on_monitor() ) THEN
+   write(6,*) ' grid%mu_1 from comp ', grid%mu_1(1,1)
+   write(6,*) ' full state sounding from comp, ph/g, grid%p, grid%al, grid%t_1, qv '
+   do k=1,kde-1
+     write(6,'(i3,1x,5(1x,1pe10.3))') k, (grid%ph_1(1,k,1)+grid%phb(1,k,1))/g, &
+                                      grid%p(1,k,1)+grid%pb(1,k,1), grid%alt(1,k,1), &
+                                      grid%t_1(1,k,1)+t0, moist(1,k,1,P_QV)
+   enddo
+
+   write(6,*) ' pert state sounding from comp, grid%ph_1, pp, alp, grid%t_1, qv '
+   do k=1,kde-1
+     write(6,'(i3,1x,5(1x,1pe10.3))') k, grid%ph_1(1,k,1), &
+                                      grid%p(1,k,1), grid%al(1,k,1), &
+                                      grid%t_1(1,k,1), moist(1,k,1,P_QV)
+   enddo
+   ENDIF
+
+! interp v
+
+  DO J = jts, jte
+  DO I = its, min(ide-1,ite)
+
+    IF (j == jds) THEN
+      z_at_v = grid%phb(i,1,j)/g
+    ELSE IF (j == jde) THEN
+      z_at_v = grid%phb(i,1,j-1)/g
+    ELSE
+      z_at_v = 0.5*(grid%phb(i,1,j)+grid%phb(i,1,j-1))/g
+    END IF
+    p_surf = interp_0( p_in, zk, z_at_v, nl_in )
+
+    DO K = 1, kte-1
+      p_level = grid%znu(k)*(p_surf - grid%p_top) + grid%p_top
+      grid%v_1(i,k,j) = interp_0( v, p_in, p_level, nl_in )
+      grid%v_2(i,k,j) = grid%v_1(i,k,j)
+    ENDDO
+
+  ENDDO
+  ENDDO
+
+! interp u
+
+  DO J = jts, min(jde-1,jte)
+  DO I = its, ite
+
+    IF (i == ids) THEN
+      z_at_u = grid%phb(i,1,j)/g
+    ELSE IF (i == ide) THEN
+      z_at_u = grid%phb(i-1,1,j)/g
+    ELSE
+      z_at_u = 0.5*(grid%phb(i,1,j)+grid%phb(i-1,1,j))/g
+    END IF
+
+    p_surf = interp_0( p_in, zk, z_at_u, nl_in )
+
+    DO K = 1, kte-1
+      p_level = grid%znu(k)*(p_surf - grid%p_top) + grid%p_top
+      grid%u_1(i,k,j) = interp_0( u, p_in, p_level, nl_in )
+      grid%u_2(i,k,j) = grid%u_1(i,k,j)
+    ENDDO
+
+  ENDDO
+  ENDDO
+
+!  set w
+
+  DO J = jts, min(jde-1,jte)
+  DO K = kts, kte
+  DO I = its, min(ide-1,ite)
+    grid%w_1(i,k,j) = 0.
+    grid%w_2(i,k,j) = 0.
+  ENDDO
+  ENDDO
+  ENDDO
+
+!!!MARS MARS
+IF (config_flags%init_MU .ne. 0.) THEN
+  grid%u_1 = grid%u_1*config_flags%init_MU
+  grid%u_2 = grid%u_2*config_flags%init_MU
+  print *, 'multiply zonal wind ', config_flags%init_MU
+ENDIF
+IF (config_flags%init_MV .ne. 0.) THEN
+  grid%v_1 = grid%v_1*config_flags%init_MV
+  grid%v_2 = grid%v_2*config_flags%init_MV
+  print *, 'multiply meridional wind ', config_flags%init_MV
+ENDIF
+IF (config_flags%init_U .ne. 0.) THEN
+  DO J = jts, min(jde-1,jte)
+  DO K = kts, kte-1
+  DO I = its, min(ide-1,ite)
+    grid%u_1(i,k,j) = config_flags%init_U
+    grid%u_2(i,k,j) = config_flags%init_U
+  ENDDO
+  ENDDO
+  ENDDO
+  print *, 'constant zonal wind ', config_flags%init_U
+  !!! ****** ou autre possibilité
+  !!! >   grid%u_1 = grid%u_1*0. + config_flags%init_U
+  !!! >   grid%u_2 = grid%u_2*0. + config_flags%init_U
+ENDIF
+IF (config_flags%init_V .ne. 0.) THEN
+  DO J = jts, min(jde-1,jte)
+  DO K = kts, kte-1
+  DO I = its, min(ide-1,ite)
+    grid%v_1(i,k,j) = config_flags%init_V
+    grid%v_2(i,k,j) = config_flags%init_V
+  ENDDO
+  ENDDO
+  ENDDO
+  print *, 'constant meridional wind ', config_flags%init_V
+ENDIF
+!!!MARS MARS
+
+
+!  set a few more things
+
+  DO J = jts, min(jde-1,jte)
+  DO K = kts, kte-1
+  DO I = its, min(ide-1,ite)
+    grid%h_diabatic(i,k,j) = 0.
+      !!!!! MARS NO WIND CASE
+      !grid%u_1(i,k,j) = 0.
+      !grid%u_2(i,k,j) = 0.
+      !grid%v_1(i,k,j) = 0.
+      !grid%v_2(i,k,j) = 0.
+      !!!!! MARS NO WIND CASE
+  ENDDO
+  ENDDO
+  ENDDO
+
+  IF ( wrf_dm_on_monitor() ) THEN
+  DO k=1,kte-1
+    grid%t_base(k) = grid%t_1(1,k,1)
+    grid%qv_base(k) = moist(1,k,1,P_QV)
+    grid%u_base(k) = grid%u_1(1,k,1)
+    grid%v_base(k) = grid%v_1(1,k,1)
+    grid%z_base(k) = 0.5*(grid%phb(1,k,1)+grid%phb(1,k+1,1)+grid%ph_1(1,k,1)+grid%ph_1(1,k+1,1))/g
+
+!!!!! MARS SIMPLE LES (PURE BUOYANCY)
+!!      grid%t_base(k)  = grid%t_init(its,k,jts)
+!      grid%t_base(k) = 0.
+!      grid%qv_base(k) = 0.
+!      grid%u_base(k)  = 0.
+!      grid%v_base(k)  = 0.
+!      grid%z_base(k) = 0.
+!!!!! MARS SIMPLE LES
+
+  ENDDO
+  ENDIF
+  CALL wrf_dm_bcast_real( grid%t_base , kte )
+  CALL wrf_dm_bcast_real( grid%qv_base , kte )
+  CALL wrf_dm_bcast_real( grid%u_base , kte )
+  CALL wrf_dm_bcast_real( grid%v_base , kte )
+  CALL wrf_dm_bcast_real( grid%z_base , kte )
+
+  DO J = jts, min(jde-1,jte)
+  DO I = its, min(ide-1,ite)
+     thtmp   = grid%t_2(i,1,j)+t0
+     ptmp    = grid%p(i,1,j)+grid%pb(i,1,j)
+     temp(1) = thtmp * (ptmp/p1000mb)**rcp
+     thtmp   = grid%t_2(i,2,j)+t0
+     ptmp    = grid%p(i,2,j)+grid%pb(i,2,j)
+     temp(2) = thtmp * (ptmp/p1000mb)**rcp
+     thtmp   = grid%t_2(i,3,j)+t0
+     ptmp    = grid%p(i,3,j)+grid%pb(i,3,j)
+     temp(3) = thtmp * (ptmp/p1000mb)**rcp
+
+!!    For LES-CBL, add 5 degrees to the surface temperature!
+!!
+!     grid%tsk(I,J)=grid%cf1*temp(1)+grid%cf2*temp(2)+grid%cf3*temp(3)
+!!     grid%tsk(I,J)=grid%cf1*temp(1)+grid%cf2*temp(2)+grid%cf3*temp(3)+5.
+     grid%tmn(I,J)=grid%tsk(I,J)-0.5
+
+  ENDDO
+  ENDDO
+
+ END SUBROUTINE init_domain_rk
+
+   SUBROUTINE init_module_initialize
+   END SUBROUTINE init_module_initialize
+
+!---------------------------------------------------------------------
+
+!  test driver for get_sounding
+!
+!      implicit none
+!      integer n
+!      parameter(n = 1000)
+!      real zk(n),p(n),theta(n),rho(n),u(n),v(n),qv(n),pd(n)
+!      logical dry
+!      integer nl,k
+!
+!      dry = .false.
+!      dry = .true.
+!      call get_sounding( zk, p, pd, theta, rho, u, v, qv, dry, n, nl )
+!      write(6,*) ' input levels ',nl
+!      write(6,*) ' sounding '
+!      write(6,*) '  k  height(m)  press (Pa) pd(Pa) theta (K) den(kg/m^3)  u(m/s)     v(m/s)    qv(g/g) '
+!      do k=1,nl
+!        write(6,'(1x,i3,8(1x,1pe10.3))') k, zk(k), p(k), pd(k), theta(k), rho(k), u(k), v(k), qv(k)
+!      enddo
+!      end
+!
+!---------------------------------------------------------------------------
+
+      subroutine get_sounding( zk, p, p_dry, theta, rho, &
+                               u, v, qv, dry, nl_max, nl_in )
+      implicit none
+
+      integer nl_max, nl_in
+      real zk(nl_max), p(nl_max), theta(nl_max), rho(nl_max), &
+           u(nl_max), v(nl_max), qv(nl_max), p_dry(nl_max)
+      logical dry
+
+      integer n
+      parameter(n=1000)
+      logical debug
+      parameter( debug = .true.)
+
+! input sounding data
+
+      real p_surf, th_surf, qv_surf
+      real pi_surf, pi(n)
+      real h_input(n), th_input(n), qv_input(n), u_input(n), v_input(n)
+
+! input therm data (element 0 is the ground so it's n+1 but n is 1000 anyway so...)
+
+     real r_therm(n),cp_therm(n),p_therm(n),rho_therm(n),t_therm(n)
+
+! diagnostics
+
+      real rho_surf, p_input(n), rho_input(n)
+      real pm_input(n)  !  this are for full moist sounding
+
+! local data
+
+      real p1000mb,cv,cp,r,cvpm,g
+!      parameter (p1000mb = 1.e+05, r = 287, cp = 1003., cv = cp-r, cvpm = -cv/cp, g=9.81 )
+!      parameter (p1000mb = 610., r = 192., cp = 844.6, cv = cp-r, cvpm = -cv/cp, g=3.72)
+      parameter (p1000mb = 610., r = 191., cp = 744.5, cv = cp-r, cvpm = -cv/cp, g=3.72)
+      integer k, it, nl
+      real qvf, qvf1, dz
+
+!  first, read the sounding
+
+      call read_sounding( p_surf, th_surf, qv_surf, &
+                          h_input, th_input, qv_input, u_input, v_input,n, nl, debug )
+
+! and the therm :
+
+      call read_therm(r_therm,cp_therm,p_therm,rho_therm,t_therm,n)
+
+! To use r/cp as defined above, one has to recompute teta from T (default MCD computes
+! teta for a variable r/cp)
+
+      do k=1,nl
+        th_input(k) = t_therm(k)*(p1000mb/p_therm(k))**(r/cp)
+      enddo
+      th_surf = t_therm(1)*(p1000mb/p_therm(1))**(r/cp)
+! -----
+
+      if(dry) then
+       do k=1,nl
+         qv_input(k) = 0.
+       enddo
+      endif
+
+      if(debug) write(6,*) ' number of input levels = ',nl
+
+        nl_in = nl
+        if(nl_in .gt. nl_max ) then
+          write(6,*) ' too many levels for input arrays ',nl_in,nl_max
+          call wrf_error_fatal ( ' too many levels for input arrays ' )
+        end if
+
+!  compute diagnostics,
+!  first, convert qv(g/kg) to qv(g/g)
+
+      do k=1,nl
+        qv_input(k) = 0.001*qv_input(k)
+      enddo
+
+      p_surf = 100.*p_surf  ! convert to pascals
+      qvf = 1. + rvovrd*qv_input(1) 
+      rho_surf = 1./((r/p1000mb)*th_surf*qvf*((p_surf/p1000mb)**cvpm))
+      pi_surf = (p_surf/p1000mb)**(r/cp)
+
+      if(debug) then
+        write(6,*) ' surface density is ',rho_surf
+        write(6,*) ' surface pi is      ',pi_surf
+      end if
+
+
+!  integrate moist sounding hydrostatically, starting from the
+!  specified surface pressure
+!  -> first, integrate from surface to lowest level
+
+          qvf = 1. + rvovrd*qv_input(1) 
+          qvf1 = 1. + qv_input(1)
+          rho_input(1) = rho_surf
+          dz = h_input(1)
+          do it=1,10
+!            pm_input(1) = p_surf &
+!                    - 0.5*dz*(rho_surf+rho_input(1))*g*qvf1
+!!!MARS MARS MARS
+            pm_input(1) = p_surf 
+            rho_input(1) = 1./((r/p1000mb)*th_input(1)*qvf*((pm_input(1)/p1000mb)**cvpm))
+          enddo
+
+! integrate up the column
+
+          do k=2,nl
+            rho_input(k) = rho_input(k-1)
+            dz = h_input(k)-h_input(k-1)
+            qvf1 = 0.5*(2.+(qv_input(k-1)+qv_input(k)))
+            qvf = 1. + rvovrd*qv_input(k)   ! qv is in g/kg here
+ 
+            do it=1,10
+              pm_input(k) = pm_input(k-1) &
+                      - 0.5*dz*(rho_input(k)+rho_input(k-1))*g*qvf1
+              rho_input(k) = 1./((r/p1000mb)*th_input(k)*qvf*((pm_input(k)/p1000mb)**cvpm))
+            enddo
+          enddo
+
+!  we have the moist sounding
+
+!  next, compute the dry sounding using p at the highest level from the
+!  moist sounding and integrating down.
+
+        p_input(nl) = pm_input(nl)
+
+          do k=nl-1,1,-1
+            dz = h_input(k+1)-h_input(k)
+            p_input(k) = p_input(k+1) + 0.5*dz*(rho_input(k)+rho_input(k+1))*g
+          enddo
+
+
+        do k=1,nl
+
+          zk(k) = h_input(k)
+          p(k) = pm_input(k)
+          p_dry(k) = p_input(k)
+          theta(k) = th_input(k)
+          rho(k) = rho_input(k)
+          u(k) = u_input(k)
+          v(k) = v_input(k)
+          qv(k) = qv_input(k)
+
+        enddo
+
+     if(debug) then
+      write(6,*) ' sounding '
+      write(6,*) '  k  height(m)  press (Pa) pd(Pa) theta (K) den(kg/m^3)  u(m/s)     v(m/s)    qv(g/g) '
+      do k=1,nl
+        write(6,'(1x,i3,8(1x,1pe10.3))') k, zk(k), p(k), p_dry(k), theta(k), rho(k), u(k), v(k), qv(k)
+      enddo
+
+     end if
+
+      end subroutine get_sounding
+
+!-------------------------------------------------------
+
+      subroutine read_sounding( ps,ts,qvs,h,th,qv,u,v,n,nl,debug )
+      implicit none
+      integer n,nl
+      real ps,ts,qvs,h(n),th(n),qv(n),u(n),v(n)
+      logical end_of_file
+      logical debug
+
+      integer k
+
+      open(unit=10,file='input_sounding',form='formatted',status='old')
+      rewind(10)
+      read(10,*) ps, ts, qvs
+      if(debug) then
+        write(6,*) ' input sounding surface parameters '
+        write(6,*) ' surface pressure (mb) ',ps
+        write(6,*) ' surface pot. temp (K) ',ts
+        write(6,*) ' surface mixing ratio (g/kg) ',qvs
+      end if
+
+      end_of_file = .false.
+      k = 0
+
+      do while (.not. end_of_file)
+
+        read(10,*,end=100) h(k+1), th(k+1), qv(k+1), u(k+1), v(k+1)
+        k = k+1
+        if(debug) write(6,'(1x,i3,5(1x,e10.3))') k, h(k), th(k), qv(k), u(k), v(k)
+        go to 110
+ 100    end_of_file = .true.
+ 110    continue
+      enddo
+
+      nl = k
+
+      close(unit=10,status = 'keep')
+
+      end subroutine read_sounding
+
+      subroutine read_therm(r,cp,p,rho,t,n)
+      implicit none
+      integer n
+      real r(n),cp(n),p(n),rho(n),t(n)
+      logical end_of_file
+
+      integer k
+
+! first element is the surface
+
+      open(unit=11,file='input_therm',form='formatted',status='old')
+      rewind(11)
+      end_of_file = .false.
+      k = 0
+      do while (.not. end_of_file)
+
+        read(11,*,end=101) r(k+1), cp(k+1), p(k+1), rho(k+1), t(k+1)
+        write(*,*) k, r(k+1), cp(k+1), p(k+1), rho(k+1), t(k+1)
+        k = k+1
+        go to 112
+ 101    end_of_file = .true.
+ 112    continue
+      enddo
+
+      close(unit=11,status = 'keep')
+
+      end subroutine read_therm
+
+END MODULE module_initialize_ideal
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_initialize_les.F.hill
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_initialize_les.F.hill	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_initialize_les.F.hill	(revision 142)
@@ -0,0 +1,979 @@
+!IDEAL:MODEL_LAYER:INITIALIZATION
+!
+
+!  This MODULE holds the routines which are used to perform various initializations
+!  for the individual domains.  
+
+!  This MODULE CONTAINS the following routines:
+
+!  initialize_field_test - 1. Set different fields to different constant
+!                             values.  This is only a test.  If the correct
+!                             domain is not found (based upon the "id")
+!                             then a fatal error is issued.               
+
+!-----------------------------------------------------------------------
+
+MODULE module_initialize_ideal
+
+   USE module_domain
+   USE module_io_domain
+   USE module_state_description
+   USE module_model_constants
+   USE module_bc
+   USE module_timing
+   USE module_configure
+   USE module_init_utilities
+#ifdef DM_PARALLEL
+   USE module_dm
+#endif
+
+
+CONTAINS
+
+
+!-------------------------------------------------------------------
+! this is a wrapper for the solver-specific init_domain routines.
+! Also dereferences the grid variables and passes them down as arguments.
+! This is crucial, since the lower level routines may do message passing
+! and this will get fouled up on machines that insist on passing down
+! copies of assumed-shape arrays (by passing down as arguments, the 
+! data are treated as assumed-size -- ie. f77 -- arrays and the copying
+! business is avoided).  Fie on the F90 designers.  Fie and a pox.
+
+   SUBROUTINE init_domain ( grid )
+
+   IMPLICIT NONE
+
+   !  Input data.
+   TYPE (domain), POINTER :: grid 
+   !  Local data.
+   INTEGER :: idum1, idum2
+
+   CALL set_scalar_indices_from_config ( head_grid%id , idum1, idum2 )
+
+     CALL init_domain_rk( grid &
+!
+#include <actual_new_args.inc>
+!
+                        )
+
+   END SUBROUTINE init_domain
+
+!-------------------------------------------------------------------
+
+   SUBROUTINE init_domain_rk ( grid &
+!
+# include <dummy_new_args.inc>
+!
+)
+   IMPLICIT NONE
+
+   !  Input data.
+   TYPE (domain), POINTER :: grid
+
+# include <dummy_new_decl.inc>
+
+   TYPE (grid_config_rec_type)              :: config_flags
+
+   !  Local data
+   INTEGER                             ::                       &
+                                  ids, ide, jds, jde, kds, kde, &
+                                  ims, ime, jms, jme, kms, kme, &
+                                  its, ite, jts, jte, kts, kte, &
+                                  i, j, k
+
+   ! Local data
+
+   INTEGER, PARAMETER :: nl_max = 1000
+   REAL, DIMENSION(nl_max) :: zk, p_in, theta, rho, u, v, qv, pd_in
+   INTEGER :: nl_in
+
+
+   INTEGER :: icm,jcm, ii, im1, jj, jm1, loop, error, fid, nxc, nyc
+   REAL    :: u_mean,v_mean, f0, p_surf, p_level, qvf, z_at_v, z_at_u
+   REAL    :: z_scale, xrad, yrad, zrad, rad, delt, cof1, cof2
+!   REAL, EXTERNAL :: interp_0
+   REAL    :: hm, xa
+   REAL    :: pi
+
+!  stuff from original initialization that has been dropped from the Registry 
+   REAL    :: vnu, xnu, xnus, dinit0, cbh, p0_temp, t0_temp, zd, zt
+   REAL    :: qvf1, qvf2, pd_surf
+   INTEGER :: it
+   real :: thtmp, ptmp, temp(3)
+
+   LOGICAL :: moisture_init
+   LOGICAL :: stretch_grid, dry_sounding
+
+  INTEGER :: xs , xe , ys , ye
+  REAL :: mtn_ht
+   LOGICAL, EXTERNAL :: wrf_dm_on_monitor
+!  For LES, add randx
+   real :: randx
+
+!!MARS
+ REAL :: lon_input, lat_input, alt_input, tsurf_input
+!!MARS
+
+#ifdef DM_PARALLEL
+#    include <data_calls.inc>
+#endif
+
+
+   SELECT CASE ( model_data_order )
+         CASE ( DATA_ORDER_ZXY )
+   kds = grid%sd31 ; kde = grid%ed31 ;
+   ids = grid%sd32 ; ide = grid%ed32 ;
+   jds = grid%sd33 ; jde = grid%ed33 ;
+
+   kms = grid%sm31 ; kme = grid%em31 ;
+   ims = grid%sm32 ; ime = grid%em32 ;
+   jms = grid%sm33 ; jme = grid%em33 ;
+
+   kts = grid%sp31 ; kte = grid%ep31 ;   ! note that tile is entire patch
+   its = grid%sp32 ; ite = grid%ep32 ;   ! note that tile is entire patch
+   jts = grid%sp33 ; jte = grid%ep33 ;   ! note that tile is entire patch
+         CASE ( DATA_ORDER_XYZ )
+   ids = grid%sd31 ; ide = grid%ed31 ;
+   jds = grid%sd32 ; jde = grid%ed32 ;
+   kds = grid%sd33 ; kde = grid%ed33 ;
+
+   ims = grid%sm31 ; ime = grid%em31 ;
+   jms = grid%sm32 ; jme = grid%em32 ;
+   kms = grid%sm33 ; kme = grid%em33 ;
+
+   its = grid%sp31 ; ite = grid%ep31 ;   ! note that tile is entire patch
+   jts = grid%sp32 ; jte = grid%ep32 ;   ! note that tile is entire patch
+   kts = grid%sp33 ; kte = grid%ep33 ;   ! note that tile is entire patch
+         CASE ( DATA_ORDER_XZY )
+   ids = grid%sd31 ; ide = grid%ed31 ;
+   kds = grid%sd32 ; kde = grid%ed32 ;
+   jds = grid%sd33 ; jde = grid%ed33 ;
+
+   ims = grid%sm31 ; ime = grid%em31 ;
+   kms = grid%sm32 ; kme = grid%em32 ;
+   jms = grid%sm33 ; jme = grid%em33 ;
+
+   its = grid%sp31 ; ite = grid%ep31 ;   ! note that tile is entire patch
+   kts = grid%sp32 ; kte = grid%ep32 ;   ! note that tile is entire patch
+   jts = grid%sp33 ; jte = grid%ep33 ;   ! note that tile is entire patch
+
+   END SELECT
+
+
+!  stretch_grid = .true.
+!  FOR LES, set stretch to false
+   stretch_grid = .false.
+   delt = 3.
+!   z_scale = .50
+   z_scale = .40
+   pi = 2.*asin(1.0)
+   write(6,*) ' pi is ',pi
+   nxc = (ide-ids)/2
+   nyc = (jde-jds)/2
+
+   CALL model_to_grid_config_rec ( grid%id , model_config_rec , config_flags )
+
+! here we check to see if the boundary conditions are set properly
+
+   CALL boundary_condition_check( config_flags, bdyzone, error, grid%id )
+
+   moisture_init = .true.
+
+    grid%itimestep=0
+
+#ifdef DM_PARALLEL
+   CALL wrf_dm_bcast_bytes( icm , IWORDSIZE )
+   CALL wrf_dm_bcast_bytes( jcm , IWORDSIZE )
+#endif
+
+    CALL nl_set_mminlu(1, '    ')
+    CALL nl_set_iswater(1,0)
+    CALL nl_set_cen_lat(1,40.)
+    CALL nl_set_cen_lon(1,-105.)
+    CALL nl_set_truelat1(1,0.)
+    CALL nl_set_truelat2(1,0.)
+    CALL nl_set_moad_cen_lat (1,0.)
+    CALL nl_set_stand_lon (1,0.)
+    CALL nl_set_map_proj(1,0)
+
+
+!  here we initialize data we currently is not initialized 
+!  in the input data
+
+    DO j = jts, jte
+      DO i = its, ite
+         grid%msftx(i,j)    = 1.
+         grid%msfty(i,j)    = 1.
+         grid%msfux(i,j)    = 1.
+         grid%msfuy(i,j)    = 1.
+         grid%msfvx(i,j)    = 1.
+         grid%msfvx_inv(i,j)= 1.
+         grid%msfvy(i,j)    = 1.
+         grid%sina(i,j)     = 0.
+         grid%cosa(i,j)     = 1.
+         grid%e(i,j)        = 0.
+!  for LES, include Coriolis force
+         grid%f(i,j)        = 0.  !!MARS MARS 1.e-4 
+!!      grid%f(i,j)     = 2*EOMEG*SIN(grid%xlat(i,j)*degrad)
+      END DO
+   END DO
+
+    DO j = jts, jte
+    DO k = kts, kte
+      DO i = its, ite
+         grid%ww(i,k,j)     = 0.
+      END DO
+   END DO
+   END DO
+
+   grid%step_number = 0
+
+! set up the grid
+
+   IF (stretch_grid) THEN ! exponential stretch for eta (nearly constant dz)
+     DO k=1, kde
+      grid%znw(k) = (exp(-(k-1)/float(kde-1)/z_scale) - exp(-1./z_scale))/ &
+                                (1.-exp(-1./z_scale))
+     ENDDO
+   ELSE
+
+!!!MARS
+grid%znw(1)=1.000
+grid%znw(2)=0.9995 !5m
+grid%znw(3)=0.9980 !20m
+grid%znw(4)=0.9950 !55m
+DO k=5, kde
+   grid%znw(k) = grid%znw(4) * ( 1. - float(k-4)/float(kde-4) )
+ENDDO
+!!!!MARS
+!!
+!     DO k=1, kde
+!      grid%znw(k) = 1. - float(k-1)/float(kde-1)
+!     ENDDO
+
+   ENDIF
+
+   DO k=1, kde-1
+    grid%dnw(k) = grid%znw(k+1) - grid%znw(k)
+    grid%rdnw(k) = 1./grid%dnw(k)
+    grid%znu(k) = 0.5*(grid%znw(k+1)+grid%znw(k))
+   ENDDO
+   DO k=2, kde-1
+    grid%dn(k) = 0.5*(grid%dnw(k)+grid%dnw(k-1))
+    grid%rdn(k) = 1./grid%dn(k)
+    grid%fnp(k) = .5* grid%dnw(k  )/grid%dn(k)
+    grid%fnm(k) = .5* grid%dnw(k-1)/grid%dn(k)
+   ENDDO
+
+   cof1 = (2.*grid%dn(2)+grid%dn(3))/(grid%dn(2)+grid%dn(3))*grid%dnw(1)/grid%dn(2) 
+   cof2 =     grid%dn(2)        /(grid%dn(2)+grid%dn(3))*grid%dnw(1)/grid%dn(3) 
+   grid%cf1  = grid%fnp(2) + cof1
+   grid%cf2  = grid%fnm(2) - cof1 - cof2
+   grid%cf3  = cof2       
+
+   grid%cfn  = (.5*grid%dnw(kde-1)+grid%dn(kde-1))/grid%dn(kde-1)
+   grid%cfn1 = -.5*grid%dnw(kde-1)/grid%dn(kde-1)
+   grid%rdx = 1./config_flags%dx
+   grid%rdy = 1./config_flags%dy
+
+!  get the sounding from the ascii sounding file, first get dry sounding and 
+!  calculate base state
+
+  dry_sounding = .true.
+  IF ( wrf_dm_on_monitor() ) THEN
+  write(6,*) ' getting dry sounding for base state '
+
+  CALL get_sounding( zk, p_in, pd_in, theta, rho, u, v, qv, dry_sounding, nl_max, nl_in )
+  ENDIF
+  CALL wrf_dm_bcast_real( zk , nl_max )
+  CALL wrf_dm_bcast_real( p_in , nl_max )
+  CALL wrf_dm_bcast_real( pd_in , nl_max )
+  CALL wrf_dm_bcast_real( theta , nl_max )
+  CALL wrf_dm_bcast_real( rho , nl_max )
+  CALL wrf_dm_bcast_real( u , nl_max )
+  CALL wrf_dm_bcast_real( v , nl_max )
+  CALL wrf_dm_bcast_real( qv , nl_max )
+  CALL wrf_dm_bcast_integer ( nl_in , 1 ) 
+
+  write(6,*) ' returned from reading sounding, nl_in is ',nl_in
+
+!!MARS
+!!MARS
+  open(unit=14,file='input_coord',form='formatted',status='old')
+  rewind(14)
+  read(14,*) lon_input
+  read(14,*) lat_input
+  close(14)
+  write(6,*) ' lon is ',lon_input
+  write(6,*) ' lat is ',lat_input
+!!MARS
+!!MARS
+
+!!MARS
+!!MARS
+  open(unit=18,file='input_more',form='formatted',status='old')
+  rewind(18)
+  read(18,*) alt_input, tsurf_input
+  close(18)
+  write(6,*) ' alt is ',alt_input
+  write(6,*) ' tsurf is ',tsurf_input
+!!MARS
+!!MARS
+
+!  find ptop for the desired ztop (ztop is input from the namelist),
+!  and find surface pressure
+
+  write(6,*) ' ztop above ground is ',config_flags%ztop
+  write(6,*) ' real ztop is ',config_flags%ztop + alt_input
+  grid%p_top = interp_0( p_in, zk, config_flags%ztop + alt_input, nl_in )
+
+             icm = ide/2
+             jcm = jde/2
+             !!3D hill 
+             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+             !!MARS : mountain
+             !!MARS : mountain ex. hm = 2000. xa = 6.0
+               open(unit=22,file='ze_hill',form='formatted',status='old')
+               rewind(22)
+               read(22,*) hm, xa
+               write(6,*) 'height, width ', hm, xa
+               close(22)
+             !!MARS
+             !!MARS
+             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+  DO j=jts,jte
+  DO i=its,ite
+!!MARS
+    grid%ht(i,j) = alt_input
+
+             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+             grid%ht(i,j) = alt_input + hm/(1.+(float(i-icm)/xa)**2+(float(j-jcm)/xa)**2)
+             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+    grid%tsk(i,j) = tsurf_input
+!!MARS
+    grid%xlat(i,j) = lat_input !+ float(j)*config_flags%dy/59000.
+    grid%xlong(i,j) = lon_input !+ float(i)*config_flags%dx/59000.
+    grid%mars_emiss(i,j)=0.95
+    grid%mars_cice(i,j)=0.
+    grid%mars_wice(i,j)=0.
+    grid%slpx(i,j) = 0.
+    grid%slpy(i,j) = 0.
+   DO k=1,config_flags%num_soil_layers
+    grid%mars_tsoil(i,k,j) = 0.
+   ENDDO
+    grid%mars_gw(i,1,j) = 0.
+    grid%mars_gw(i,2,j) = 0.
+    grid%mars_gw(i,3,j) = 0.
+    grid%mars_gw(i,4,j) = 0.
+    grid%mars_gw(i,5,j) = 0.
+!!MARS
+  ENDDO
+  ENDDO
+
+  xs=ide/2 -3
+  xs=ids   -3
+  xe=xs + 6
+  ys=jde/2 -3
+  ye=ys + 6
+  mtn_ht = 500
+#ifdef MTN
+  DO j=max(ys,jds),min(ye,jde-1)
+  DO i=max(xs,ids),min(xe,ide-1)
+     grid%ht(i,j) = mtn_ht * 0.25 * &
+               ( 1. + COS ( 2*pi/(xe-xs) * ( i-xs ) + pi ) ) * &
+               ( 1. + COS ( 2*pi/(ye-ys) * ( j-ys ) + pi ) )
+  ENDDO
+  ENDDO
+#endif
+#ifdef EW_RIDGE
+  DO j=max(ys,jds),min(ye,jde-1)
+  DO i=ids,ide
+     grid%ht(i,j) = mtn_ht * 0.50 * &
+               ( 1. + COS ( 2*pi/(ye-ys) * ( j-ys ) + pi ) )
+  ENDDO
+  ENDDO
+#endif
+#ifdef NS_RIDGE
+  DO j=jds,jde
+  DO i=max(xs,ids),min(xe,ide-1)
+     grid%ht(i,j) = mtn_ht * 0.50 * &
+               ( 1. + COS ( 2*pi/(xe-xs) * ( i-xs ) + pi ) )
+  ENDDO
+  ENDDO
+#endif
+  DO j=jts,jte
+  DO i=its,ite
+    grid%phb(i,1,j) = g * grid%ht(i,j)
+    grid%ph0(i,1,j) = g * grid%ht(i,j)
+  ENDDO
+  ENDDO
+
+  DO J = jts, jte
+  DO I = its, ite
+
+    p_surf = interp_0( p_in, zk, grid%phb(i,1,j)/g, nl_in )
+    grid%mub(i,j) = p_surf-grid%p_top
+
+!  this is dry hydrostatic sounding (base state), so given grid%p (coordinate),
+!  interp theta (from interp) and compute 1/rho from eqn. of state
+
+    DO K = 1, kte-1
+      p_level = grid%znu(k)*(p_surf - grid%p_top) + grid%p_top
+      grid%pb(i,k,j) = p_level
+      grid%t_init(i,k,j) = interp_0( theta, p_in, p_level, nl_in ) - t0
+      grid%alb(i,k,j) = (r_d/p1000mb)*(grid%t_init(i,k,j)+t0)*(grid%pb(i,k,j)/p1000mb)**cvpm
+    ENDDO
+
+!  calc hydrostatic balance (alternatively we could interp the geopotential from the
+!  sounding, but this assures that the base state is in exact hydrostatic balance with
+!  respect to the model eqns.
+
+    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)
+    ENDDO
+
+  ENDDO
+  ENDDO
+
+  IF ( wrf_dm_on_monitor() ) THEN
+    write(6,*) ' ptop is ',grid%p_top
+    write(6,*) ' base state grid%mub(1,1), p_surf is ',grid%mub(1,1),grid%mub(1,1)+grid%p_top
+  ENDIF
+
+!  calculate full state for each column - this includes moisture.
+
+  write(6,*) ' getting moist sounding for full state '
+  dry_sounding = .false.
+  CALL get_sounding( zk, p_in, pd_in, theta, rho, u, v, qv, dry_sounding, nl_max, nl_in )
+
+  DO J = jts, min(jde-1,jte)
+  DO I = its, min(ide-1,ite)
+
+!  At this point grid%p_top is already set. find the DRY mass in the column 
+!  by interpolating the DRY pressure.  
+
+   pd_surf = interp_0( pd_in, zk, grid%phb(i,1,j)/g, nl_in )
+
+!  compute the perturbation mass and the full mass
+
+    grid%mu_1(i,j) = pd_surf-grid%p_top - grid%mub(i,j)
+    grid%mu_2(i,j) = grid%mu_1(i,j)
+    grid%mu0(i,j) = grid%mu_1(i,j) + grid%mub(i,j)
+
+! given the dry pressure and coordinate system, interp the potential
+! temperature and qv
+
+    do k=1,kde-1
+
+      p_level = grid%znu(k)*(pd_surf - grid%p_top) + grid%p_top
+
+      moist(i,k,j,P_QV) = interp_0( qv, pd_in, p_level, nl_in )
+      grid%t_1(i,k,j)          = interp_0( theta, pd_in, p_level, nl_in ) - t0
+      grid%t_2(i,k,j)          = grid%t_1(i,k,j)
+      
+
+    enddo
+
+!  integrate the hydrostatic equation (from the RHS of the bigstep
+!  vertical momentum equation) down from the top to get grid%p.
+!  first from the top of the model to the top pressure
+
+    k = kte-1  ! top level
+
+    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)/grid%rdnw(k)
+    grid%p(i,k,j) = - 0.5*(grid%mu_1(i,j)+qvf1*grid%mub(i,j))/grid%rdnw(k)/qvf2
+    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)
+
+!  down the column
+
+    do k=kte-2,1,-1
+      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)
+      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)
+    enddo
+
+!  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.
+
+
+    grid%ph_1(i,1,j) = 0.
+    DO k  = 2,kte
+      grid%ph_1(i,k,j) = grid%ph_1(i,k-1,j) - (1./grid%rdnw(k-1))*(       &
+                   (grid%mub(i,j)+grid%mu_1(i,j))*grid%al(i,k-1,j)+ &
+                    grid%mu_1(i,j)*grid%alb(i,k-1,j)  )
+                                                   
+      grid%ph_2(i,k,j) = grid%ph_1(i,k,j) 
+      grid%ph0(i,k,j) = grid%ph_1(i,k,j) + grid%phb(i,k,j)
+    ENDDO
+
+    IF ( wrf_dm_on_monitor() ) THEN
+    if((i==2) .and. (j==2)) then
+     write(6,*) ' grid%ph_1 calc ',grid%ph_1(2,1,2),grid%ph_1(2,2,2),&
+                              grid%mu_1(2,2)+grid%mub(2,2),grid%mu_1(2,2), &
+                              grid%alb(2,1,2),grid%al(1,2,1),grid%rdnw(1)
+    endif
+    ENDIF
+
+  ENDDO
+  ENDDO
+
+!#if 0
+
+!  thermal perturbation to kick off convection
+
+  write(6,*) ' nxc, nyc for perturbation ',nxc,nyc
+  write(6,*) ' delt for perturbation ',delt
+
+! For LES, change the initial random perturbations
+! For 2D test, call randx outside I-loop
+! For 3D runs, call randx inside both I-J loops
+
+  DO J = jts, min(jde-1,jte)
+!   yrad = config_flags%dy*float(j-nyc)/10000.
+    yrad = 0.
+    DO I = its, min(ide-1,ite)
+!     xrad = config_flags%dx*float(i-nxc)/10000.
+      xrad = 0.
+      call random_number (randx)
+      randx = randx - 0.5
+!     DO K = 1, kte-1
+      DO K = 1, 4 
+
+!  No bubbles for LES!
+!  put in preturbation theta (bubble) and recalc density.  note,
+!  the mass in the column is not changing, so when theta changes,
+!  we recompute density and geopotential
+
+!       zrad = 0.5*(grid%ph_1(i,k,j)+grid%ph_1(i,k+1,j)  &
+!                  +grid%phb(i,k,j)+grid%phb(i,k+1,j))/g
+!       zrad = (zrad-1500.)/1500.
+        zrad = 0.
+        RAD=SQRT(xrad*xrad+yrad*yrad+zrad*zrad)
+        IF(RAD <= 1.) THEN
+!          grid%t_1(i,k,j)=grid%t_1(i,k,j)+delt*COS(.5*PI*RAD)**2
+           grid%t_1(i,k,j)=grid%t_1(i,k,j)+ 0.1 *randx
+           grid%t_2(i,k,j)=grid%t_1(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
+
+!  rebalance hydrostatically
+
+      DO k  = 2,kte
+        grid%ph_1(i,k,j) = grid%ph_1(i,k-1,j) - (1./grid%rdnw(k-1))*(       &
+                     (grid%mub(i,j)+grid%mu_1(i,j))*grid%al(i,k-1,j)+ &
+                      grid%mu_1(i,j)*grid%alb(i,k-1,j)  )
+                                                   
+        grid%ph_2(i,k,j) = grid%ph_1(i,k,j) 
+        grid%ph0(i,k,j) = grid%ph_1(i,k,j) + grid%phb(i,k,j)
+      ENDDO
+
+    ENDDO
+  ENDDO
+
+!#endif
+
+   IF ( wrf_dm_on_monitor() ) THEN
+   write(6,*) ' grid%mu_1 from comp ', grid%mu_1(1,1)
+   write(6,*) ' full state sounding from comp, ph/g, grid%p, grid%al, grid%t_1, qv '
+   do k=1,kde-1
+     write(6,'(i3,1x,5(1x,1pe10.3))') k, (grid%ph_1(1,k,1)+grid%phb(1,k,1))/g, &
+                                      grid%p(1,k,1)+grid%pb(1,k,1), grid%alt(1,k,1), &
+                                      grid%t_1(1,k,1)+t0, moist(1,k,1,P_QV)
+   enddo
+
+   write(6,*) ' pert state sounding from comp, grid%ph_1, pp, alp, grid%t_1, qv '
+   do k=1,kde-1
+     write(6,'(i3,1x,5(1x,1pe10.3))') k, grid%ph_1(1,k,1), &
+                                      grid%p(1,k,1), grid%al(1,k,1), &
+                                      grid%t_1(1,k,1), moist(1,k,1,P_QV)
+   enddo
+   ENDIF
+
+! interp v
+
+  DO J = jts, jte
+  DO I = its, min(ide-1,ite)
+
+    IF (j == jds) THEN
+      z_at_v = grid%phb(i,1,j)/g
+    ELSE IF (j == jde) THEN
+      z_at_v = grid%phb(i,1,j-1)/g
+    ELSE
+      z_at_v = 0.5*(grid%phb(i,1,j)+grid%phb(i,1,j-1))/g
+    END IF
+    p_surf = interp_0( p_in, zk, z_at_v, nl_in )
+
+    DO K = 1, kte-1
+      p_level = grid%znu(k)*(p_surf - grid%p_top) + grid%p_top
+      grid%v_1(i,k,j) = interp_0( v, p_in, p_level, nl_in )
+      grid%v_2(i,k,j) = grid%v_1(i,k,j)
+    ENDDO
+
+  ENDDO
+  ENDDO
+
+! interp u
+
+  DO J = jts, min(jde-1,jte)
+  DO I = its, ite
+
+    IF (i == ids) THEN
+      z_at_u = grid%phb(i,1,j)/g
+    ELSE IF (i == ide) THEN
+      z_at_u = grid%phb(i-1,1,j)/g
+    ELSE
+      z_at_u = 0.5*(grid%phb(i,1,j)+grid%phb(i-1,1,j))/g
+    END IF
+
+    p_surf = interp_0( p_in, zk, z_at_u, nl_in )
+
+    DO K = 1, kte-1
+      p_level = grid%znu(k)*(p_surf - grid%p_top) + grid%p_top
+      grid%u_1(i,k,j) = interp_0( u, p_in, p_level, nl_in )
+      grid%u_2(i,k,j) = grid%u_1(i,k,j)
+    ENDDO
+
+  ENDDO
+  ENDDO
+
+!  set w
+
+  DO J = jts, min(jde-1,jte)
+  DO K = kts, kte
+  DO I = its, min(ide-1,ite)
+    grid%w_1(i,k,j) = 0.
+    grid%w_2(i,k,j) = 0.
+  ENDDO
+  ENDDO
+  ENDDO
+
+!!!MARS MARS
+IF (config_flags%init_MU .ne. 0.) THEN
+  grid%u_1 = grid%u_1*config_flags%init_MU
+  grid%u_2 = grid%u_2*config_flags%init_MU
+  print *, 'multiply zonal wind ', config_flags%init_MU
+ENDIF
+IF (config_flags%init_MV .ne. 0.) THEN
+  grid%v_1 = grid%v_1*config_flags%init_MV
+  grid%v_2 = grid%v_2*config_flags%init_MV
+  print *, 'multiply meridional wind ', config_flags%init_MV
+ENDIF
+IF (config_flags%init_U .ne. 0.) THEN
+  DO J = jts, min(jde-1,jte)
+  DO K = kts, kte-1
+  DO I = its, min(ide-1,ite)
+    grid%u_1(i,k,j) = config_flags%init_U
+    grid%u_2(i,k,j) = config_flags%init_U
+  ENDDO
+  ENDDO
+  ENDDO
+  print *, 'constant zonal wind ', config_flags%init_U
+  !!! ****** ou autre possibilité
+  !!! >   grid%u_1 = grid%u_1*0. + config_flags%init_U
+  !!! >   grid%u_2 = grid%u_2*0. + config_flags%init_U
+ENDIF
+IF (config_flags%init_V .ne. 0.) THEN
+  DO J = jts, min(jde-1,jte)
+  DO K = kts, kte-1
+  DO I = its, min(ide-1,ite)
+    grid%v_1(i,k,j) = config_flags%init_V
+    grid%v_2(i,k,j) = config_flags%init_V
+  ENDDO
+  ENDDO
+  ENDDO
+  print *, 'constant meridional wind ', config_flags%init_V
+ENDIF
+!!!MARS MARS
+
+
+!  set a few more things
+
+  DO J = jts, min(jde-1,jte)
+  DO K = kts, kte-1
+  DO I = its, min(ide-1,ite)
+    grid%h_diabatic(i,k,j) = 0.
+      !!!!! MARS NO WIND CASE
+      !grid%u_1(i,k,j) = 0.
+      !grid%u_2(i,k,j) = 0.
+      !grid%v_1(i,k,j) = 0.
+      !grid%v_2(i,k,j) = 0.
+      !!!!! MARS NO WIND CASE
+  ENDDO
+  ENDDO
+  ENDDO
+
+  IF ( wrf_dm_on_monitor() ) THEN
+  DO k=1,kte-1
+    grid%t_base(k) = grid%t_1(1,k,1)
+    grid%qv_base(k) = moist(1,k,1,P_QV)
+    grid%u_base(k) = grid%u_1(1,k,1)
+    grid%v_base(k) = grid%v_1(1,k,1)
+    grid%z_base(k) = 0.5*(grid%phb(1,k,1)+grid%phb(1,k+1,1)+grid%ph_1(1,k,1)+grid%ph_1(1,k+1,1))/g
+
+!!!!! MARS SIMPLE LES (PURE BUOYANCY)
+!!      grid%t_base(k)  = grid%t_init(its,k,jts)
+!      grid%t_base(k) = 0.
+!      grid%qv_base(k) = 0.
+!      grid%u_base(k)  = 0.
+!      grid%v_base(k)  = 0.
+!      grid%z_base(k) = 0.
+!!!!! MARS SIMPLE LES
+
+  ENDDO
+  ENDIF
+  CALL wrf_dm_bcast_real( grid%t_base , kte )
+  CALL wrf_dm_bcast_real( grid%qv_base , kte )
+  CALL wrf_dm_bcast_real( grid%u_base , kte )
+  CALL wrf_dm_bcast_real( grid%v_base , kte )
+  CALL wrf_dm_bcast_real( grid%z_base , kte )
+
+  DO J = jts, min(jde-1,jte)
+  DO I = its, min(ide-1,ite)
+     thtmp   = grid%t_2(i,1,j)+t0
+     ptmp    = grid%p(i,1,j)+grid%pb(i,1,j)
+     temp(1) = thtmp * (ptmp/p1000mb)**rcp
+     thtmp   = grid%t_2(i,2,j)+t0
+     ptmp    = grid%p(i,2,j)+grid%pb(i,2,j)
+     temp(2) = thtmp * (ptmp/p1000mb)**rcp
+     thtmp   = grid%t_2(i,3,j)+t0
+     ptmp    = grid%p(i,3,j)+grid%pb(i,3,j)
+     temp(3) = thtmp * (ptmp/p1000mb)**rcp
+
+!!    For LES-CBL, add 5 degrees to the surface temperature!
+!!
+!     grid%tsk(I,J)=grid%cf1*temp(1)+grid%cf2*temp(2)+grid%cf3*temp(3)
+!!     grid%tsk(I,J)=grid%cf1*temp(1)+grid%cf2*temp(2)+grid%cf3*temp(3)+5.
+     grid%tmn(I,J)=grid%tsk(I,J)-0.5
+
+  ENDDO
+  ENDDO
+
+ END SUBROUTINE init_domain_rk
+
+   SUBROUTINE init_module_initialize
+   END SUBROUTINE init_module_initialize
+
+!---------------------------------------------------------------------
+
+!  test driver for get_sounding
+!
+!      implicit none
+!      integer n
+!      parameter(n = 1000)
+!      real zk(n),p(n),theta(n),rho(n),u(n),v(n),qv(n),pd(n)
+!      logical dry
+!      integer nl,k
+!
+!      dry = .false.
+!      dry = .true.
+!      call get_sounding( zk, p, pd, theta, rho, u, v, qv, dry, n, nl )
+!      write(6,*) ' input levels ',nl
+!      write(6,*) ' sounding '
+!      write(6,*) '  k  height(m)  press (Pa) pd(Pa) theta (K) den(kg/m^3)  u(m/s)     v(m/s)    qv(g/g) '
+!      do k=1,nl
+!        write(6,'(1x,i3,8(1x,1pe10.3))') k, zk(k), p(k), pd(k), theta(k), rho(k), u(k), v(k), qv(k)
+!      enddo
+!      end
+!
+!---------------------------------------------------------------------------
+
+      subroutine get_sounding( zk, p, p_dry, theta, rho, &
+                               u, v, qv, dry, nl_max, nl_in )
+      implicit none
+
+      integer nl_max, nl_in
+      real zk(nl_max), p(nl_max), theta(nl_max), rho(nl_max), &
+           u(nl_max), v(nl_max), qv(nl_max), p_dry(nl_max)
+      logical dry
+
+      integer n
+      parameter(n=1000)
+      logical debug
+      parameter( debug = .true.)
+
+! input sounding data
+
+      real p_surf, th_surf, qv_surf
+      real pi_surf, pi(n)
+      real h_input(n), th_input(n), qv_input(n), u_input(n), v_input(n)
+
+! diagnostics
+
+      real rho_surf, p_input(n), rho_input(n)
+      real pm_input(n)  !  this are for full moist sounding
+
+! local data
+
+      real p1000mb,cv,cp,r,cvpm,g
+!      parameter (p1000mb = 1.e+05, r = 287, cp = 1003., cv = cp-r, cvpm = -cv/cp, g=9.81 )
+!      parameter (p1000mb = 610., r = 192., cp = 844.6, cv = cp-r, cvpm = -cv/cp, g=3.72)
+      parameter (p1000mb = 610., r = 191., cp = 744.5, cv = cp-r, cvpm = -cv/cp, g=3.72)
+      integer k, it, nl
+      real qvf, qvf1, dz
+
+!  first, read the sounding
+
+      call read_sounding( p_surf, th_surf, qv_surf, &
+                          h_input, th_input, qv_input, u_input, v_input,n, nl, debug )
+
+      if(dry) then
+       do k=1,nl
+         qv_input(k) = 0.
+       enddo
+      endif
+
+      if(debug) write(6,*) ' number of input levels = ',nl
+
+        nl_in = nl
+        if(nl_in .gt. nl_max ) then
+          write(6,*) ' too many levels for input arrays ',nl_in,nl_max
+          call wrf_error_fatal ( ' too many levels for input arrays ' )
+        end if
+
+!  compute diagnostics,
+!  first, convert qv(g/kg) to qv(g/g)
+
+      do k=1,nl
+        qv_input(k) = 0.001*qv_input(k)
+      enddo
+
+      p_surf = 100.*p_surf  ! convert to pascals
+      qvf = 1. + rvovrd*qv_input(1) 
+      rho_surf = 1./((r/p1000mb)*th_surf*qvf*((p_surf/p1000mb)**cvpm))
+      pi_surf = (p_surf/p1000mb)**(r/cp)
+
+      if(debug) then
+        write(6,*) ' surface density is ',rho_surf
+        write(6,*) ' surface pi is      ',pi_surf
+      end if
+
+
+!  integrate moist sounding hydrostatically, starting from the
+!  specified surface pressure
+!  -> first, integrate from surface to lowest level
+
+          qvf = 1. + rvovrd*qv_input(1) 
+          qvf1 = 1. + qv_input(1)
+          rho_input(1) = rho_surf
+          dz = h_input(1)
+          do it=1,10
+!            pm_input(1) = p_surf &
+!                    - 0.5*dz*(rho_surf+rho_input(1))*g*qvf1
+!!!MARS MARS MARS
+            pm_input(1) = p_surf 
+            rho_input(1) = 1./((r/p1000mb)*th_input(1)*qvf*((pm_input(1)/p1000mb)**cvpm))
+          enddo
+
+! integrate up the column
+
+          do k=2,nl
+            rho_input(k) = rho_input(k-1)
+            dz = h_input(k)-h_input(k-1)
+            qvf1 = 0.5*(2.+(qv_input(k-1)+qv_input(k)))
+            qvf = 1. + rvovrd*qv_input(k)   ! qv is in g/kg here
+ 
+            do it=1,10
+              pm_input(k) = pm_input(k-1) &
+                      - 0.5*dz*(rho_input(k)+rho_input(k-1))*g*qvf1
+              rho_input(k) = 1./((r/p1000mb)*th_input(k)*qvf*((pm_input(k)/p1000mb)**cvpm))
+            enddo
+          enddo
+
+!  we have the moist sounding
+
+!  next, compute the dry sounding using p at the highest level from the
+!  moist sounding and integrating down.
+
+        p_input(nl) = pm_input(nl)
+
+          do k=nl-1,1,-1
+            dz = h_input(k+1)-h_input(k)
+            p_input(k) = p_input(k+1) + 0.5*dz*(rho_input(k)+rho_input(k+1))*g
+          enddo
+
+
+        do k=1,nl
+
+          zk(k) = h_input(k)
+          p(k) = pm_input(k)
+          p_dry(k) = p_input(k)
+          theta(k) = th_input(k)
+          rho(k) = rho_input(k)
+          u(k) = u_input(k)
+          v(k) = v_input(k)
+          qv(k) = qv_input(k)
+
+        enddo
+
+     if(debug) then
+      write(6,*) ' sounding '
+      write(6,*) '  k  height(m)  press (Pa) pd(Pa) theta (K) den(kg/m^3)  u(m/s)     v(m/s)    qv(g/g) '
+      do k=1,nl
+        write(6,'(1x,i3,8(1x,1pe10.3))') k, zk(k), p(k), p_dry(k), theta(k), rho(k), u(k), v(k), qv(k)
+      enddo
+
+     end if
+
+      end subroutine get_sounding
+
+!-------------------------------------------------------
+
+      subroutine read_sounding( ps,ts,qvs,h,th,qv,u,v,n,nl,debug )
+      implicit none
+      integer n,nl
+      real ps,ts,qvs,h(n),th(n),qv(n),u(n),v(n)
+      logical end_of_file
+      logical debug
+
+      integer k
+
+      open(unit=10,file='input_sounding',form='formatted',status='old')
+      rewind(10)
+      read(10,*) ps, ts, qvs
+      if(debug) then
+        write(6,*) ' input sounding surface parameters '
+        write(6,*) ' surface pressure (mb) ',ps
+        write(6,*) ' surface pot. temp (K) ',ts
+        write(6,*) ' surface mixing ratio (g/kg) ',qvs
+      end if
+
+      end_of_file = .false.
+      k = 0
+
+      do while (.not. end_of_file)
+
+        read(10,*,end=100) h(k+1), th(k+1), qv(k+1), u(k+1), v(k+1)
+        k = k+1
+        if(debug) write(6,'(1x,i3,5(1x,e10.3))') k, h(k), th(k), qv(k), u(k), v(k)
+        go to 110
+ 100    end_of_file = .true.
+ 110    continue
+      enddo
+
+      nl = k
+
+      close(unit=10,status = 'keep')
+
+      end subroutine read_sounding
+
+END MODULE module_initialize_ideal
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_lmd_driver.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_lmd_driver.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_lmd_driver.F	(revision 142)
@@ -0,0 +1,1 @@
+link ../../WRFV2/phys/module_lmd_driver.F
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_lmd_driver.F.bak
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_lmd_driver.F.bak	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_lmd_driver.F.bak	(revision 142)
@@ -0,0 +1,977 @@
+!*******************************************************************************
+! PURPOSE: LMD_driver is the WRF mediation layer routine that provides the
+! interface to LMD physics packages in the WRF model layer. For those familiar
+! with the LMD GCM, the aim of this driver is to do part of the job of the
+! calfis.F routine.
+!*******************************************************************************
+! AUTHOR: A. Spiga - January 2007
+!*******************************************************************************
+! UPDATES:  - included all final updates for the paper - March 2008
+!           - general cleaning of code and comments - October 2008 
+!*******************************************************************************
+MODULE module_lmd_driver
+CONTAINS
+    SUBROUTINE lmd_driver(id,max_dom,DT,ITIMESTEP,XLAT,XLONG, &
+        IDS,IDE,JDS,JDE,KDS,KDE,IMS,IME,JMS,JME,KMS,KME, &
+        i_start,i_end,j_start,j_end,kts,kte,num_tiles, &
+        DX,DY, &
+        MSFT,MSFU,MSFV, &
+        GMT,JULYR,JULDAY, &
+        P8W,DZ8W,T8W,Z,HT, &
+        U,V,TH,T,P,EXNER,RHO, &
+        PTOP, &
+        RADT,CUDT, &
+        TSK,PSFC, &
+        RTHBLTEN,RUBLTEN,RVBLTEN, &
+        num_3d_s,SCALAR, &
+        MARS_MODE, &
+        MARS_ALB,MARS_TI,MARS_CICE,MARS_EMISS, &
+        MARS_TSOIL, &
+        MARS_GW, &
+        NUM_SOIL_LAYERS, &
+        CST_AL, &
+        CST_TI, &
+        isfflx, &
+#include "../modif_mars/module_lmd_driver_output1.inc"
+        SLPX,SLPY)
+! NB: module_lmd_driver_output1.inc : output arguments generated from Registry
+
+!        IPS,IPE,JPS,JPE,KPS,KPE, &
+
+
+
+!==================================================================
+! USES
+!==================================================================
+   USE module_model_constants
+   USE module_wrf_error
+! add new modules here, if needed ...
+
+!==================================================================
+  IMPLICIT NONE
+!==================================================================
+
+!==================================================================
+! COMMON
+!==================================================================
+
+!! the only common needed is the one defining the physical grid
+!! -- path is hardcoded, but the structure is not subject to change
+!! -- please put # if needed by the pre-compilation process	
+!
+!
+include "../modif_mars/dimphys.h"
+!
+!--to be commented because there are tests in the physics ?
+!--TODO: get rid of the ...mx first in this routine and .inc
+
+!
+! INCLUDE AUTOMATIQUEMENT GENERE A PARTIR DU REGISTRY
+!
+include "../modif_mars/wrf_output_2d.h"
+include "../modif_mars/wrf_output_3d.h"
+
+!==================================================================
+! VARIABLES
+!==================================================================
+
+! WRF Dimensions
+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, &
+              NUM_SOIL_LAYERS
+INTEGER, DIMENSION(num_tiles), INTENT(IN) ::  &
+      i_start,i_end,j_start,j_end   
+! Scalars
+INTEGER, INTENT(IN  ) :: JULDAY, itimestep, julyr,id,max_dom,MARS_MODE,isfflx
+REAL, INTENT(IN  ) :: GMT,dt,dx,dy,RADT,CUDT
+REAL, INTENT(IN  ) :: CST_AL, CST_TI 
+REAL, INTENT(IN  ) :: PTOP
+! 2D arrays          
+REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN   )  :: &
+     MSFT,MSFU,MSFV, &
+     XLAT,XLONG,HT,  &
+     MARS_ALB,MARS_TI,MARS_EMISS,MARS_CICE, &
+     SLPX,SLPY
+! 3D arrays 
+REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN ) :: &
+     dz8w,p8w,p,exner,t,t8w,rho,u,v,z,th
+REAL, DIMENSION( ims:ime, NUM_SOIL_LAYERS, jms:jme ), INTENT(IN   )  :: &
+     MARS_TSOIL 
+REAL, DIMENSION( ims:ime, 5, jms:jme ), INTENT(IN   )  :: &
+     MARS_GW
+! 4D arrays
+INTEGER, INTENT(IN ) :: num_3d_s
+REAL, DIMENSION( ims:ime, kms:kme, jms:jme, 1:num_3d_s ), INTENT(INOUT ) :: &
+     scalar
+
+!-------------------------------------------
+! OUTPUT VARIABLES
+!-------------------------------------------
+!
+! Generated from Registry
+!
+! default definitions :
+! 2D : TSK, PSFC
+! 3D : RTHBLTEN,RUBLTEN,RVBLTEN
+#include "../modif_mars/module_lmd_driver_output2.inc"
+   REAL, DIMENSION(:,:), ALLOCATABLE :: output_tab2d
+   REAL, DIMENSION(:,:,:), ALLOCATABLE :: output_tab3d
+!-------------------------------------------
+! OUTPUT VARIABLES
+!-------------------------------------------
+
+
+!-------------------------------------------   
+! LOCAL  VARIABLES
+!-------------------------------------------
+   INTEGER ::    i,j,k,ij  
+   INTEGER ::    its,ite,jts,jte
+   INTEGER ::    subs
+
+   ! *** for LMD physics
+   ! ------> inputs:
+   INTEGER :: ngrid,nlayer,nq,nsoil,nqmx 
+   REAL :: pday,ptime,MY  
+   REAL :: aire_val,lat_val,lon_val
+   REAL :: phisfi_val,albedodat_val,inertiedat_val
+   REAL :: tsurf_val,co2ice_val,emis_val
+   REAL :: zmea_val,zstd_val,zsig_val,zgam_val,zthe_val
+   REAL :: theta_val, psi_val
+   LOGICAL :: firstcall,lastcall,tracerdyn
+   REAL,DIMENSION(:),ALLOCATABLE :: q2_val, qsurf_val, tsoil_val
+   REAL,DIMENSION(:),ALLOCATABLE :: aire_vec,lat_vec,lon_vec
+   REAL,DIMENSION(:),ALLOCATABLE :: walbedodat,winertiedat,wphisfi
+   REAL,DIMENSION(:),ALLOCATABLE :: wzmea,wzstd,wzsig,wzgam,wzthe
+   REAL,DIMENSION(:),ALLOCATABLE :: wtheta, wpsi
+   ! v--- can they be modified ?
+   REAL,DIMENSION(:),ALLOCATABLE :: wtsurf,wco2ice,wemis
+   REAL,DIMENSION(:,:),ALLOCATABLE :: wq2,wqsurf,wtsoil 
+   ! ----------	
+   REAL,DIMENSION(:,:),ALLOCATABLE :: pplev,pplay,pphi,pu,pv,pt,pw
+   REAL,DIMENSION(:,:,:),ALLOCATABLE :: pq  
+
+   ! <------ outputs:
+   !     physical tendencies
+   REAL,DIMENSION(:),ALLOCATABLE :: pdpsrf
+   REAL,DIMENSION(:,:),ALLOCATABLE :: pdu,pdv,pdt
+   REAL,DIMENSION(:,:,:),ALLOCATABLE :: pdq
+   ! ... intermediate arrays
+   REAL, DIMENSION(:), ALLOCATABLE  :: &
+     dz8w_prof,p8w_prof,p_prof,t_prof,t8w_prof, &
+     u_prof,v_prof,z_prof, &
+     water_vapor_prof, water_ice_prof
+!!   pi_prof, rho_prof, th_prof, &
+
+   ! Additional control variables
+   INTEGER :: sponge_top,relax,ips,ipe,jps,jpe,kps,kpe
+   REAL :: elaps, ptimestep, wecri_phys_sec
+   INTEGER :: wappel_phys, wecri_phys, wday_ini, test
+   LOGICAL :: flag_LES
+
+!**************************************************
+! IMPORTANT: pour travailler avec grid nesting
+!       mieux vaut ne pas utiliser de SAVE ??
+!**************************************************
+      REAL, DIMENSION(:), ALLOCATABLE, SAVE :: &
+             dp_save
+      REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: &
+             du_save, dv_save, dt_save
+      REAL, DIMENSION(:,:,:), ALLOCATABLE, SAVE :: &
+             dq_save      
+
+!!!IDEALIZED IDEALIZED
+      REAL :: lat_input, lon_input, ls_input, lct_input
+!!!IDEALIZED IDEALIZED
+
+
+
+!==================================================================
+! CODE
+!==================================================================
+
+!! SPECIAL LES
+IF (isfflx .ne. 0) THEN
+     flag_LES = .true.
+ELSE
+     flag_LES = .false.
+ENDIF
+!! SPECIAL LES
+
+print *,'** Mars ** DOMAIN',id
+
+!-------------------------!
+! TWEAK on WRF DIMENSIONS !
+!-------------------------!
+its = i_start(1)   ! define here one big tile
+ite = i_end(num_tiles)
+jts = j_start(1)
+jte = j_end(num_tiles)
+!!
+!relax=0
+!sponge_top=0               ! another value than 0 triggers instabilities  
+!IF (id .gt. 1) relax=2     ! fix to avoid noise in nesting simulations ; 1 >> too much noise ...
+ips=its
+ipe=ite
+jps=jts
+jpe=jte
+!IF (ips .eq. ids)   ips=its+relax !! IF tests necesary for parallel runs
+!IF (ipe .eq. ide-1) ipe=ite-relax
+!IF (jps .eq. jds)   jps=jts+relax
+!IF (jpe .eq. jde-1) jpe=jte-relax
+kps=kts         !! start at surface 
+kpe=kte !-sponge_top
+
+!----------------------------!
+! DIMENSIONS FOR THE PHYSICS !
+!----------------------------!
+wday_ini = JULDAY - 1      !! GCM convention
+wappel_phys = int(RADT)
+wecri_phys = int(CUDT)
+ptimestep = dt*float(wappel_phys)     ! physical timestep (s)
+ngrid=(ipe-ips+1)*(jpe-jps+1)         ! size of the horizontal grid: ngridmx = wiim * wjjm
+nlayer = kpe-kps+1                    ! number of vertical layers: nlayermx
+nsoil = NUM_SOIL_LAYERS               ! number of soil layers: nsoilmx
+if (num_3d_s > 1) then                ! number of advected fields: nqmx
+        nq = num_3d_s-1               
+        nqmx = num_3d_s-1
+else
+        nq = 1
+        nqmx = 1
+endif
+! **** needed but hardcoded
+lastcall = .false.
+! **** needed but hardcoded
+
+
+PRINT *, ips, ipe, jps, jpe
+PRINT *, ngrid
+
+
+
+elaps = (float(itimestep)-1.)*dt  ! elapsed seconds of simulation
+!----------------------------------------------!
+! what is done at the first step of simulation !
+!----------------------------------------------!
+IF (elaps .eq. 0.) THEN
+firstcall=.true.  !! for continuity with GCM, physics are always called at the first WRF timestep
+test=0
+ALLOCATE(dp_save(ngrid)) !! here are the arrays that would be useful to save physics tendencies
+ALLOCATE(du_save(ngrid,nlayer))
+ALLOCATE(dv_save(ngrid,nlayer)) 
+ALLOCATE(dt_save(ngrid,nlayer))     
+ALLOCATE(dq_save(ngrid,nlayer,nq)) 
+dp_save(:)=0.    !! initialize these arrays ...
+du_save(:,:)=0.
+dv_save(:,:)=0.
+dt_save(:,:)=0.    
+dq_save(:,:,:)=0.
+!! put here some general information you'd like to print just once
+    print *, 'TILES: ', i_start,i_end, j_start, j_end  ! numbers for simple runs, arrays for parallel runs
+    print *, 'DOMAIN: ', ids, ide, jds, jde 
+    print *, 'MEMORY: ', ims, ime, jms, jme
+    print *, 'ADVECTED TRACERS: ', num_3d_s-1
+    print *, 'PHYSICS IS CALLED EACH...',wappel_phys
+!! put here some general information you'd like to print just once
+ELSE
+!-------------------------------------------------!
+! what is done for the other steps of simulation  !
+!-------------------------------------------------!
+IF (wappel_phys .gt. 0) THEN
+firstcall = .false.
+test = MODULO(itimestep-1,wappel_phys) ! WRF time is integrated time (itimestep=1 at the end of first step) 
+                                       ! -- same strategy as diagfi in the LMD GCM 
+ELSE
+firstcall = .false.
+test = 9999   
+ENDIF
+ENDIF 
+
+
+!!!******!!
+!!! TIME !!
+!!!******!!
+IF (JULYR .ne. 9999) THEN
+  !
+  ! specified
+  !
+  ptime = (GMT + elaps/3700.) !! universal time (0<ptime<1): ptime=0.5 at 12:00 UT 
+  ptime = MODULO(ptime,24.)   !! the two arguments of MODULO must be of the same type 
+  ptime = ptime / 24.
+  pday = (JULDAY - 1 + INT((3700*GMT+elaps)/88800))
+  pday = MODULO(int(pday),669)
+  MY = (JULYR-2000) + (88800.*(JULDAY - 1)+3700.*GMT+elaps)/59496000.
+  MY = INT(MY)
+ELSE
+  !
+  ! idealized
+  !
+  PRINT *,'** Mars ** IDEALIZED SIMULATION'
+  open(unit=14,file='input_coord',form='formatted',status='old')
+  rewind(14)
+  read(14,*) lon_input
+  read(14,*) lat_input
+  read(14,*) ls_input
+  read(14,*) lct_input
+  close(14)
+  ptime = lct_input - lon_input / 15. + elaps/3700.
+  ptime = MODULO(ptime,24.)
+  ptime = ptime / 24.
+  pday = floor(ls2sol(ls_input)) + INT((3700*(lct_input - lon_input / 15.) + elaps)/88800)
+  pday = MODULO(int(pday),669)
+  MY = 2024
+  wday_ini = floor(ls2sol(ls_input))
+ENDIF
+print *,'** Mars ** TIME IS', pday, ptime*24.
+
+
+!!****************!!
+!! CHECK DYNAMICS !!
+!!****************!!
+!IF ((MAXVAL(t) > 500).OR.(MINVAL(t,MASK = t > 0) <= 50)) THEN
+!        PRINT *,'******************   CRASH   *******************'
+!        PRINT *,'Irrealistic temperature...', MAXLOC(t), MINLOC(t)
+!PRINT *, t
+!        PRINT *,'************************************************'
+!        STOP
+!ENDIF   
+!
+!!! PB SAUF SI debug = 200 ?!!?
+!IF (float(itimestep) > 200.) THEN        ! to allow initialisation with zero-wind or constant
+!                                         ! and allow some outputs to locate the NaNs :)
+!IF (         (abs(MAXVAL(u)) == 0.) &
+!        .OR. (MINVAL(u) > MAXVAL(u)) &
+!        .OR. (abs(MAXVAL(v)) == 0.) &
+!        .OR. (MINVAL(v) > MAXVAL(v)) ) THEN
+!!IF (          (ANY(isNaN(u)) .EQV. .true.) &
+!!         .OR. (ANY(isNaN(v)) .EQV. .true.) &  
+!!         .OR. (ANY(isNaN(t)) .EQV. .true.) ) THEN
+!IF (         ANY(u*0. /= 0.) &
+!        .OR. ANY(v*0. /= 0.)        ) THEN
+!        PRINT *,'******************   CRASH   *******************'
+!        PRINT *,'************************************************'
+!        PRINT *,'NaN appeared in the simulation ...'
+!        PRINT *,'...this may be due to numerical or dynamical instability'
+!        PRINT *,'************************************************'
+!        PRINT *,'POSSIBLE SOLUTIONS:'
+!        PRINT *,'>> IF nonhydrostatic mode,' 
+!        PRINT *,'   --> check that smdiv, emdiv and epssm are not 0.'
+!        PRINT *,'>> IF cfl is violated, '
+!        PRINT *,'   --> try to lower the dynamical timestep'
+!        PRINT *,'>> IF topographical gradients are high near specified bdy,'
+!        PRINT *,'   --> try to redefine the domain'
+!        PRINT *,'************************************************'
+!        STOP
+!ENDIF
+!ENDIF
+        !IF (          ANY(isNaN(u)) &
+        !         .OR. ANY(isNaN(v)) &
+        !         .OR. ANY(isNaN(t)) ) THEN
+        ! >>> ne marche qu'avec g95
+!print *, 'check dynamics'
+!print *, 'u', MAXVAL(u), MINVAL(u)
+!print *, 'v', MAXVAL(v), MINVAL(v)
+!print *, 't', MAXVAL(t), MINVAL(t, MASK = t > 0) 
+
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!----------!
+! ALLOCATE !
+!----------!
+ALLOCATE(pdpsrf(ngrid))
+ALLOCATE(pdu(ngrid,nlayer))
+ALLOCATE(pdv(ngrid,nlayer))
+ALLOCATE(pdt(ngrid,nlayer))
+ALLOCATE(pdq(ngrid,nlayer,nq))
+!!!
+!!! BIG LOOP : 1. no call for physics, used saved values
+!!!
+IF (test.NE.0) THEN
+print *,'** Mars ** NO CALL FOR PHYSICS, go to next step...',test
+pdpsrf(:)=dp_save(:)
+pdu(:,:)=du_save(:,:)
+pdv(:,:)=dv_save(:,:)
+pdt(:,:)=dt_save(:,:)
+pdq(:,:,:)=dq_save(:,:,:)
+        !!!!!TEST TEST
+        !!!!!pour le nesting c est mieux de les mettre dans la physique, les SAVE
+!!!
+!!! BIG LOOP : 2. calculate physical tendencies
+!!!
+ELSE
+!----------!
+! ALLOCATE !
+!----------!
+! inputs ...
+ALLOCATE(aire_vec(ngrid))
+ALLOCATE(lon_vec(ngrid))
+ALLOCATE(lat_vec(ngrid))
+ALLOCATE(walbedodat(ngrid))
+ALLOCATE(winertiedat(ngrid))
+ALLOCATE(wphisfi(ngrid))
+ALLOCATE(wzmea(ngrid))
+ALLOCATE(wzstd(ngrid))
+ALLOCATE(wzsig(ngrid))
+ALLOCATE(wzgam(ngrid))
+ALLOCATE(wzthe(ngrid))
+ALLOCATE(wtheta(ngrid))
+ALLOCATE(wpsi(ngrid))
+ALLOCATE(wtsurf(ngrid))
+ALLOCATE(output_tab2d(ngrid,n2d))
+ALLOCATE(output_tab3d(ngrid,nlayer,n3d))
+ALLOCATE(wco2ice(ngrid))
+ALLOCATE(wemis(ngrid))
+ALLOCATE(q2_val(nlayer+1))
+ALLOCATE(qsurf_val(nq))
+ALLOCATE(tsoil_val(nsoil))
+ALLOCATE(wq2(ngrid,nlayer+1))
+ALLOCATE(wqsurf(ngrid,nq)) 
+ALLOCATE(wtsoil(ngrid,nsoil))
+ALLOCATE(pplev(ngrid,nlayer+1))
+ALLOCATE(pplay(ngrid,nlayer))
+ALLOCATE(pphi(ngrid,nlayer))
+ALLOCATE(pu(ngrid,nlayer))
+ALLOCATE(pv(ngrid,nlayer))
+ALLOCATE(pt(ngrid,nlayer))
+ALLOCATE(pw(ngrid,nlayer))
+ALLOCATE(pq(ngrid,nlayer,nq))
+! interm
+ALLOCATE(dz8w_prof(nlayer))
+ALLOCATE(p8w_prof(nlayer))
+ALLOCATE(p_prof(nlayer))
+ALLOCATE(t_prof(nlayer))
+ALLOCATE(t8w_prof(nlayer))
+ALLOCATE(u_prof(nlayer))
+ALLOCATE(v_prof(nlayer))
+ALLOCATE(z_prof(nlayer))
+!ALLOCATE(th_prof(nlayer))
+!ALLOCATE(rho_prof(nlayer))
+!ALLOCATE(pi_prof(nlayer))
+ALLOCATE(water_vapor_prof(nlayer))
+ALLOCATE(water_ice_prof(nlayer))
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! PREPARE PHYSICS INPUTS !!  
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+
+DO j = jps,jpe
+DO i = ips,ipe
+
+!!*******************************************!!
+!! FROM 3D WRF FIELDS TO 1D PHYSICS PROFILES !!
+!!*******************************************!!
+
+!-----------------------------------!
+! 1D subscript for physics "cursor" !
+!-----------------------------------!
+subs = (j-jps)*(ipe-ips+1)+(i-ips+1)
+
+!--------------------------------------!
+! 1D columns : inputs for the physics  !
+! ... vert. coord., meteor. fields ... !
+!--------------------------------------!
+dz8w_prof(:) = dz8w(i,kps:kpe,j)   ! dz between full levels (m)   
+p8w_prof(:) = p8w(i,kps:kpe,j)     ! pressure full level (Pa) >> pplev
+p_prof(:) = p(i,kps:kpe,j)         ! pressure half level (Pa) >> pplay
+t_prof(:) = t(i,kps:kpe,j)         ! temperature half level (K) >> pt
+t8w_prof(:) = t8w(i,kps:kpe,j)     ! temperature full level (K)
+u_prof(:) = u(i,kps:kpe,j)         ! zonal wind (A-grid: unstaggered) half level (m/s) >> pu  
+v_prof(:) = v(i,kps:kpe,j)         ! meridional wind (A-grid: unstaggered) half level (m/s) >> pv
+z_prof(:) = z(i,kps:kpe,j)         ! geopotential height half level (m) >> pphi/g
+!pi_prof(:) = exner(i,kps:kpe,j)    ! exner function (dimensionless) half level 
+!rho_prof(:) = rho(i,kps:kpe,j)     ! density half level  
+!th_prof(:) = th(i,kps:kpe,j)       ! pot. temperature half level (K)
+
+!--------------------------------!
+! specific treatment for tracers !
+!--------------------------------!
+SELECT CASE (MARS_MODE)
+    CASE(0)  !! NO TRACERS (mars=0)
+    water_vapor_prof(:) = 0.
+    water_ice_prof(:) = 0.
+    CASE(1)  !! WATER CYCLE (mars=1)
+    water_vapor_prof(:) = scalar(i,kps:kpe,j,2)  !! H2O vapor is tracer 1 in the Registry for mars=1
+    water_ice_prof(:) = scalar(i,kps:kpe,j,3)    !! H2O ice is tracer 2 in the Registry for mars=1
+    CASE(2)  !! DUST CYCLE (mars=2)
+    water_vapor_prof(:) = 0.
+    water_ice_prof(:) = 0.
+END SELECT
+
+!!**********************************************************!!
+!! STATIC FIELDS FOR THE PHYSICS - NEEDED ONLY AT FIRSTCALL !!
+!!**********************************************************!!
+needed_ini_phys : IF (firstcall .EQV. .true.) THEN
+
+!----------------------------------------!
+! Surface of each part of the grid (m^2) !
+!----------------------------------------!
+!aire_val = dx*dy                           !! 1. idealized cases - computational grid
+aire_val = (dx/msft(i,j))*(dy/msft(i,j))    !! 2. WRF map scale factors - assume that msfx=msfy (msf=covariance)
+!aire_val=dx*dy/msfu(i,j)                   !! 3. special for Mercator GCM-like simulations
+
+!!---------------------------------------------!
+!! Mass-point latitude and longitude (radians) !
+!!---------------------------------------------!
+!lat_val = XLAT(i,j)*DEGRAD
+!lon_val = XLONG(i,j)*DEGRAD
+lat_val = lat_input*DEGRAD
+lon_val = lon_input*DEGRAD
+
+!!-----------------------------------------!
+!! Gravity wave parametrization            !
+!! NB: usually 0 in mesoscale applications !
+!!-----------------------------------------!
+!zmea_val=MARS_GW(i,1,j)
+!zstd_val=MARS_GW(i,2,j)
+!zsig_val=MARS_GW(i,3,j)
+!zgam_val=MARS_GW(i,4,j)
+!zthe_val=MARS_GW(i,5,j)
+zmea_val=0.
+zstd_val=0.
+zsig_val=0.
+zgam_val=0.
+zthe_val=0.
+
+!!---------------------------------!
+!! Ground albedo & Thermal Inertia !
+!!---------------------------------!
+!albedodat_val=MARS_ALB(i,j)
+!inertiedat_val=MARS_TI(i,j)
+albedodat_val=CST_AL
+inertiedat_val=CST_TI
+
+!---------------------------------------------!
+! Ground geopotential                         !
+! (=g*HT(i,j), only used in the microphysics) !
+!---------------------------------------------! 
+phisfi_val=g*(z_prof(1)-dz8w_prof(1)/2.)   !! NB: z_prof are half levels, so z_prof(1) is not the surface
+
+!-----------------------------------------------!
+! Ground temperature, emissivity, CO2 ice cover !
+!-----------------------------------------------!
+tsurf_val=tsk(i,j)
+emis_val=MARS_EMISS(i,j)
+co2ice_val=MARS_CICE(i,j)
+
+!!------------------------!
+!! Deep soil temperatures ! 
+!!------------------------!
+!tsoil_val(:)=MARS_TSOIL(i,:,j)
+do k=1,nsoil
+ tsoil_val(k) = tsurf_val
+enddo
+
+!!-------------------!
+!! Slope inclination !
+!!-------------------!
+!theta_val=atan(sqrt( (1000.*SLPX(i,j))**2 + (1000.*SLPY(i,j))**2 ))
+!theta_val=theta_val/DEGRAD
+theta_val=0.
+
+!!-------------------------------------------!
+!! Slope orientation; 0 is north, 90 is east !
+!!-------------------------------------------!
+!psi_val=-90.*DEGRAD-atan(SLPY(i,j)/SLPX(i,j))
+!if (SLPX(i,j) .ge. 0.) then
+!   psi_val=psi_val-180.*DEGRAD
+!endif
+!psi_val=360.*DEGRAD+psi_val
+!psi_val=psi_val/DEGRAD
+!psi_val = MODULO(psi_val+180.,360.)
+psi_val=0.
+
+!
+! PRINT
+!
+IF ( (i == ips) .AND. (j == jps) ) THEN
+PRINT *,'lat/lon ', lat_val/DEGRAD, lon_val/DEGRAD
+PRINT *,'emiss ', emis_val
+PRINT *,'albedo ', albedodat_val
+PRINT *,'inertie ', inertiedat_val
+PRINT *,'phi ',phisfi_val
+PRINT *,'tsurf ',tsurf_val
+PRINT *,'aire ',aire_val
+PRINT *,'z_prof ',z_prof
+PRINT *,'dz8w_prof',dz8w_prof
+PRINT *,'p8w_prof ',p8w_prof
+PRINT *,'p_prof ',p_prof
+PRINT *,'t_prof ',t_prof
+PRINT *,'t8w_prof ',t8w_prof
+PRINT *,'u_prof ',u_prof
+PRINT *,'v_prof ',v_prof
+PRINT *,'tsoil ',tsoil_val 
+ENDIF
+
+!-------------------------!
+!-------------------------!
+!      PROVISOIRE         !
+!-------------------------!
+!-------------------------!
+q2_val(:)=0      !PBL wind variance
+qsurf_val(:)=0   !Tracer on surface
+
+!-----------------!
+! Fill the arrays !
+!-----------------!
+aire_vec(subs) = aire_val   !! NB: total area in square km is SUM(aire_vec)/1.0E6
+lat_vec(subs) = lat_val
+lon_vec(subs) = lon_val
+wphisfi(subs) = phisfi_val
+walbedodat(subs) = albedodat_val
+winertiedat(subs) = inertiedat_val
+wzmea(subs) = zmea_val
+wzstd(subs) = zstd_val
+wzsig(subs) = zsig_val
+wzgam(subs) = zgam_val
+wzthe(subs) = zthe_val
+wtsurf(subs) = tsurf_val
+wco2ice(subs) = co2ice_val
+wemis(subs) = emis_val
+wq2(subs,:) = q2_val(:)
+wqsurf(subs,:) = qsurf_val(:)
+wtsoil(subs,:) = tsoil_val(:)
+wtheta(subs) = theta_val
+wpsi(subs) = psi_val
+
+ENDIF needed_ini_phys
+
+!!*****************************!!
+!! PREPARE "FOOD" FOR PHYSIQ.F !!
+!!*****************************!!
+
+!---------------------------------------------!
+! in LMD physics, geopotential must be        !
+! expressed with respect to the local surface !
+!---------------------------------------------!
+pphi(subs,:) = g*( z_prof(:)-(z_prof(1)-dz8w_prof(1)/2.) )
+
+!--------------------------------!
+! Dynamic fields for LMD physics !
+!--------------------------------!
+pplev(subs,1:nlayer) = p8w_prof(1:nlayer)  !! NB: last level: no data
+pplay(subs,:) = p_prof(:)
+pt(subs,:) = t_prof(:)
+pu(subs,:) = u_prof(:)
+pv(subs,:) = v_prof(:)
+pw(subs,:) = 0   !! NB: not used in the physics, only diagnostic...
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!! for IDEALIZED CASES (NO NEED in pplay)
+pplev(subs,nlayer+1) = 0.
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+! NOTE:
+! IF ( pplev(subs,nlayer+1) .le. 0 ) pplev(subs,nlayer+1)=ptop
+! cree des diagnostics delirants et aleatoires dans le transfert radiatif 
+
+!---------!
+! Tracers !
+!---------!
+SELECT CASE (MARS_MODE)
+    CASE(0)  !! NO TRACERS (mars=0)
+    pq(subs,:,nq) = water_vapor_prof(:) !! NB: which is 0, actually (see above) 
+    CASE(1)  !! WATER CYCLE (mars=1)
+    pq(subs,:,nq) = water_vapor_prof(:)
+    pq(subs,:,nq-1) = water_ice_prof(:)
+    CASE(2)  !! DUST CYCLE (mars=2)
+    pq(subs,:,nq) = water_vapor_prof(:) !! NB: which is 0, actually (see above)
+END SELECT
+
+ENDDO
+ENDDO
+
+!!*****************!!
+!! CLEAN THE PLACE !!
+!!*****************!!
+DEALLOCATE(q2_val)
+DEALLOCATE(qsurf_val)
+DEALLOCATE(tsoil_val)
+DEALLOCATE(dz8w_prof)
+DEALLOCATE(z_prof)
+DEALLOCATE(p8w_prof)
+DEALLOCATE(p_prof)
+DEALLOCATE(t_prof)
+DEALLOCATE(u_prof)
+DEALLOCATE(v_prof)
+DEALLOCATE(water_vapor_prof)
+DEALLOCATE(water_ice_prof)
+    !!! no use
+    !DEALLOCATE(pi_prof)
+    !DEALLOCATE(rho_prof)
+    !DEALLOCATE(th_prof)
+
+
+!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!
+!! CALL LMD PHYSICS !!  
+!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!
+
+
+!!***********************!!
+!! INIFIS, AT FIRST CALL !!
+!!***********************!!
+IF (firstcall .EQV. .true.) THEN
+print *, '** Mars ** LMD INITIALIZATION'
+include "../modif_mars/call_meso_inifis.inc"
+DEALLOCATE(aire_vec)
+DEALLOCATE(lat_vec)
+DEALLOCATE(lon_vec)
+DEALLOCATE(walbedodat)
+DEALLOCATE(winertiedat)
+DEALLOCATE(wphisfi)
+DEALLOCATE(wzmea)
+DEALLOCATE(wzstd)
+DEALLOCATE(wzsig)
+DEALLOCATE(wzgam)
+DEALLOCATE(wzthe)
+DEALLOCATE(wtheta)
+DEALLOCATE(wpsi)
+ENDIF
+        !! nearly obsolete
+        !print *, '** Mars ** Diagnostic files each ',wecri_phys,' phys. steps'
+        wecri_phys_sec=dt*float(wecri_phys)*float(wappel_phys)
+
+!!********!!
+!! PHYSIQ !!
+!!********!!
+call_physics : IF (wappel_phys .ne. 0) THEN
+
+!-------------------------------------------------------------------------------!
+! outputs:									!	
+!    pdu(ngrid,nlayermx)        \						!
+!    pdv(ngrid,nlayermx)         \  Temporal derivative of the corresponding	!
+!    pdt(ngrid,nlayermx)         /  variables due to physical processes.	!
+!    pdq(ngrid,nlayermx)        /						!
+!    pdpsrf(ngrid)             /						!
+!    tracerdyn                 call tracer in dynamical part of GCM ?		!
+!-------------------------------------------------------------------------------!
+print *, '** Mars ** CALL TO LMD PHYSICS'
+pdpsrf(:)=0.
+pdu(:,:)=0.
+pdv(:,:)=0.
+pdt(:,:)=0.
+pdq(:,:,:)=0.
+include "../modif_mars/call_meso_physiq.inc" 
+DEALLOCATE(pplev)
+DEALLOCATE(pplay)
+DEALLOCATE(pphi)
+DEALLOCATE(pu)
+DEALLOCATE(pv)
+DEALLOCATE(pt)
+DEALLOCATE(pw)
+DEALLOCATE(pq)
+DEALLOCATE(wtsurf)
+DEALLOCATE(wco2ice)
+DEALLOCATE(wemis)
+DEALLOCATE(wq2)
+DEALLOCATE(wqsurf)
+DEALLOCATE(wtsoil)
+
+
+!-------------------------------!
+! PHYSIQ OUTPUT IN THE WRF FILE !
+!-------------------------------!
+DO j = jps,jpe
+DO i = ips,ipe
+subs = (j-jps)*(ipe-ips+1)+(i-ips+1)
+#include "../modif_mars/module_lmd_driver_output3.inc"  
+       !  ^-- generated from Registry
+TSK(i,j) = output_tab2d(subs,ind_TSURF)
+ENDDO
+ENDDO
+DEALLOCATE(output_tab2d)
+DEALLOCATE(output_tab3d)
+
+!---------------------------------------------------------------------------------!
+! PHYSIQ TENDENCIES ARE SAVED TO BE SPLIT WITHIN INTERMEDIATE DYNAMICAL TIMESTEPS !
+!---------------------------------------------------------------------------------!
+dp_save(:)=pdpsrf(:)
+du_save(:,:)=pdu(:,:)
+dv_save(:,:)=pdv(:,:)
+dt_save(:,:)=pdt(:,:)
+dq_save(:,:,:)=pdq(:,:,:)
+
+ENDIF call_physics
+
+ENDIF    ! end of BIG LOOP 2.
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+
+!!***************************!!
+!! DEDUCE TENDENCIES FOR WRF !!
+!!***************************!!
+RTHBLTEN(ims:ime,kms:kme,jms:jme)=0.
+RUBLTEN(ims:ime,kms:kme,jms:jme)=0.
+RVBLTEN(ims:ime,kms:kme,jms:jme)=0.
+PSFC(ims:ime,jms:jme)=p8w(ims:ime,kms,jms:jme) ! was done in surface driver in regular WRF 
+!------------------------------------------------------------------!
+! WRF adds the physical and dynamical tendencies                   !
+! thus the tendencies must be passed as 'per second' tendencies    !
+! --when physics is not called, the applied physical tendency      !
+! --is the one calculated during the last call to physics          !
+!------------------------------------------------------------------!
+DO j = jps,jpe
+DO i = ips,ipe
+subs = (j-jps)*(ipe-ips+1)+(i-ips+1)
+
+!------------!
+! zonal wind !
+!------------!
+RUBLTEN(i,kps:kpe,j) = pdu(subs,kps:kpe)                        
+
+!-----------------!
+! meridional wind !
+!-----------------!
+RVBLTEN(i,kps:kpe,j) = pdv(subs,kps:kpe)                        
+
+!-----------------------!
+! potential temperature !
+!-----------------------!
+! (dT = dtheta * exner for isobaric coordinates or if pressure variations are negligible)
+RTHBLTEN(i,kps:kpe,j) = pdt(subs,kps:kpe) / exner(i,kps:kpe,j)   
+
+!---------------------------!
+! update surface pressure   !
+! (cf CO2 cycle in physics) !
+!---------------------------!
+PSFC(i,j)=PSFC(i,j)+pdpsrf(subs)  
+
+!---------!
+! Tracers !
+!---------!
+SELECT CASE (MARS_MODE)
+CASE(0)
+        SCALAR(i,kps:kpe,j,:)=0.
+CASE(1)
+        !!! Water vapor
+        SCALAR(i,kps:kpe,j,2)=SCALAR(i,kps:kpe,j,2)+pdq(subs,kps:kpe,nq)
+        !!! Water ice
+        SCALAR(i,kps:kpe,j,3)=SCALAR(i,kps:kpe,j,3)+pdq(subs,kps:kpe,nq-1)
+CASE(2)
+        !!! Dust 
+        SCALAR(i,kps:kpe,j,2)=SCALAR(i,kps:kpe,j,2)+pdq(subs,kps:kpe,nq)
+END SELECT
+
+        !!TODO: check if adding the whole tendency once, and set the
+        !!TODO: following tendencies to 0 until physics is called again
+        !!TODO: is a good strategy ?
+        !RUBLTEN(i,kps:kpe,j) = pdu(subs,kps:kpe)*ptimestep/dt
+        !RVBLTEN(i,kps:kpe,j) = pdv(subs,kps:kpe)*ptimestep/dt
+        !RTHBLTEN(i,kps:kpe,j) = pdt(subs,kps:kpe)*ptimestep/dt
+        !RTHBLTEN(i,kps:kpe,j) = RTHBLTEN(i,kps:kpe,j)/exner(i,kps:kpe,j) 
+        !PSFC(i,j)=PSFC(i,j)+pdpsrf(subs)*ptimestep/dt      
+        !SELECT CASE (MARS_MODE)
+        !CASE(0)
+        !SCALAR(i,kps:kpe,j,:)=0.
+        !CASE(1)
+        !!!! Water vapor
+        !SCALAR(i,kps:kpe,j,2)=SCALAR(i,kps:kpe,j,2)+pdq(subs,kps:kpe,nq)*ptimestep/dt
+        !!!! Water ice
+        !SCALAR(i,kps:kpe,j,3)=SCALAR(i,kps:kpe,j,3)+pdq(subs,kps:kpe,nq-1)*ptimestep/dt
+        !CASE(2)
+        !!!! Dust 
+        !SCALAR(i,kps:kpe,j,2)=SCALAR(i,kps:kpe,j,2)+pdq(subs,kps:kpe,nq)*ptimestep/dt
+        !END SELECT
+
+ENDDO
+ENDDO
+DEALLOCATE(pdpsrf)
+DEALLOCATE(pdu)
+DEALLOCATE(pdv)
+DEALLOCATE(pdt)
+DEALLOCATE(pdq)
+
+!!---------!
+!! display !
+!!---------!
+PRINT *, '** Mars ** Results from LMD physics'
+!PRINT *, 'u non-zero tendencies'
+!PRINT *, 'max',MAXVAL(RUBLTEN, MASK=RUBLTEN/=0.),&
+!        ' at',MAXLOC(RUBLTEN, MASK=RUBLTEN/=0.)
+!PRINT *, 'min',MINVAL(RUBLTEN, MASK=RUBLTEN/=0.),&
+!        ' at',MINLOC(RUBLTEN, MASK=RUBLTEN/=0.)
+!PRINT *, 'v non-zero tendencies'
+!PRINT *, 'max',MAXVAL(RVBLTEN, MASK=RVBLTEN/=0.),&
+!        ' at',MAXLOC(RVBLTEN, MASK=RVBLTEN/=0.)
+!PRINT *, 'min',MINVAL(RVBLTEN, MASK=RVBLTEN/=0.),&
+!        ' at',MINLOC(RVBLTEN, MASK=RVBLTEN/=0.)
+PRINT *, 'th non-zero tendencies'
+PRINT *, 'max',MAXVAL(RTHBLTEN, MASK=RTHBLTEN/=0.),&
+        ' at',MAXLOC(RTHBLTEN, MASK=RTHBLTEN/=0.)
+PRINT *, 'min',MINVAL(RTHBLTEN, MASK=RTHBLTEN/=0.),&
+        ' at',MINLOC(RTHBLTEN, MASK=RTHBLTEN/=0.)
+!!! STOP IF CRASH
+!IF (MAXVAL(RUBLTEN, MASK=RUBLTEN/=0.) == 0.) STOP
+!IF (MAXVAL(RVBLTEN, MASK=RVBLTEN/=0.) == 0.) STOP
+
+!!*****!!
+!! END !!
+!!*****!!
+print *,'** Mars ** END LMD PHYSICS'
+!----------------------------------------------------------------!
+! use debug (see solve_em) if you wanna display some message ... !
+!----------------------------------------------------------------!
+END SUBROUTINE lmd_driver
+
+!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+      real function ls2sol(ls)
+
+!c  Returns solar longitude, Ls (in deg.), from day number (in sol),
+!c  where sol=0=Ls=0 at the northern hemisphere spring equinox
+
+      implicit none
+
+!c  Arguments:
+      real ls
+
+!c  Local:
+      double precision xref,zx0,zteta,zz
+!c	xref: mean anomaly, zteta: true anomaly, zx0: eccentric anomaly
+      double precision year_day 
+      double precision peri_day,timeperi,e_elips
+      double precision pi,degrad 
+      parameter (year_day=668.6d0) ! number of sols in a amartian year
+!c      data peri_day /485.0/
+      parameter (peri_day=485.35d0) ! date (in sols) of perihelion
+!c  timeperi: 2*pi*( 1 - Ls(perihelion)/ 360 ); Ls(perihelion)=250.99
+      parameter (timeperi=1.90258341759902d0)
+      parameter (e_elips=0.0934d0)  ! eccentricity of orbit
+      parameter (pi=3.14159265358979d0)
+      parameter (degrad=57.2957795130823d0)
+
+      if (abs(ls).lt.1.0e-5) then
+         if (ls.ge.0.0) then
+            ls2sol = 0.0
+         else
+            ls2sol = year_day
+         end if
+         return
+      end if
+
+      zteta = ls/degrad + timeperi
+      zx0 = 2.0*datan(dtan(0.5*zteta)/dsqrt((1.+e_elips)/(1.-e_elips)))
+      xref = zx0-e_elips*dsin(zx0)
+      zz = xref/(2.*pi)
+      ls2sol = zz*year_day + peri_day
+      if (ls2sol.lt.0.0) ls2sol = ls2sol + year_day
+      if (ls2sol.ge.year_day) ls2sol = ls2sol - year_day
+
+      return
+      end function ls2sol
+!!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+END MODULE module_lmd_driver
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_model_constants.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_model_constants.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_model_constants.F	(revision 142)
@@ -0,0 +1,187 @@
+!WRF:MODEL_LAYER:CONSTANTS
+!
+!PLANET MARS
+
+ MODULE module_model_constants
+
+   !  2. Following are constants for use in defining real number bounds.
+
+   !  A really small number.
+
+   REAL    , PARAMETER :: epsilon         = 1.E-15
+
+   !  4. Following is information related to the physical constants.
+
+   !  These are the physical constants used within the model.
+
+! JM NOTE -- can we name this grav instead?
+   REAL    , PARAMETER :: g = 3.72  ! acceleration due to gravity (m {s}^-2)
+
+#if ( NMM_CORE == 1 )
+   REAL    , PARAMETER :: r_d          = 191.  ! gas constant m2 s-2 K-1
+   REAL    , PARAMETER :: cp           = 744.5   ! r= 8.314511E+0 *1000.E+0/mugaz
+#else
+   REAL    , PARAMETER :: r_d          = 191.
+   REAL    , PARAMETER :: cp           = 744.5
+#endif
+
+   REAL    , PARAMETER :: r_v          = 461.6  ! gas constant for water vapor
+   REAL    , PARAMETER :: cv           = cp-r_d
+   REAL    , PARAMETER :: cpv          = 3.9*r_v  ! cp / R = 4.4 ?? ! rcp = r/cp  ~0.256793
+   REAL    , PARAMETER :: cvv          = cpv-r_v
+   REAL    , PARAMETER :: cvpm         = -cv/cp
+   REAL    , PARAMETER :: cliq         = 4190.
+   REAL    , PARAMETER :: cice         = 2106.
+   REAL    , PARAMETER :: psat         = 610.78
+   REAL    , PARAMETER :: rcv          = r_d/cv
+   REAL    , PARAMETER :: rcp          = r_d/cp
+   REAL    , PARAMETER :: rovg         = r_d/g
+   REAL    , PARAMETER :: c2           = cp * rcv
+   real    , parameter :: mwdry        = 43.49 ! molecular weight of dry air (g/mole)
+
+   REAL    , PARAMETER :: p1000mb      = 610.
+   REAL    , PARAMETER :: t0           = 220. ! earth : 300 ...  remplacer par 220 ?
+   REAL    , PARAMETER :: p0           = 610.
+   REAL    , PARAMETER :: cpovcv       = cp/(cp-r_d)
+   REAL    , PARAMETER :: cvovcp       = 1./cpovcv
+   REAL    , PARAMETER :: rvovrd       = r_v/r_d
+
+   REAL    , PARAMETER :: reradius     = 1./3397200.	! Rayon de mars (m)  ~3397200 m
+
+!-------------------------------
+!****MARS
+! here some LMD stuff
+! >> TODO: possible modification with startfi.nc values ?
+   REAL    , PARAMETER :: wdaysec       = 88800.     ! duree du sol (s)  ~88775 s
+   REAL    , PARAMETER :: wmugaz        = 43.49      ! Masse molaire de l'atm (g.mol-1) ~43.49
+   REAL    , PARAMETER :: womeg         = 7.0721E-5  ! omega (rad.s-1)
+   REAL    , PARAMETER :: wyear_day     = 669        ! Duree de l'annee (sols) ~668.6
+   REAL    , PARAMETER :: wperiheli     = 206.66     ! Dist.min. soleil-mars (Mkm) ~206.66      
+   REAL    , PARAMETER :: waphelie      = 249.22     ! Dist.max. soleil-mars (Mkm) ~249.22
+   REAL    , PARAMETER :: wperi_day     = 485.       ! Date du perihelie (sols depuis printemps)
+   REAL    , PARAMETER :: wobliquit     = 25.2       ! Obliquite de la planete (deg) ~25.2
+   REAL    , PARAMETER :: wz0           = 1.e-2      ! surface roughness (m) ~0.01
+   REAL    , PARAMETER :: wlmixmin      = 30         ! longueur de melange ~100
+   REAL    , PARAMETER :: wemin_turb    = 1.e-6      ! energie minimale ~1.e-8 
+   REAL    , PARAMETER :: wemissiv      = 0.95       ! Emissivite du sol martien ~.95
+   REAL    , PARAMETER :: wemissiceN    = 0.95       ! Emissivite calotte nord
+   REAL    , PARAMETER :: wemissiceS    = 0.95       ! Emissivite calotte sud
+   REAL    , PARAMETER :: walbediceN    = 0.65        ! Albedo calotte nord !0.5
+   REAL    , PARAMETER :: walbediceS    = 0.65        ! Albedo calotte sud  !0.5
+   REAL    , PARAMETER :: wiceradiusN   = 100.e-6    ! mean scat radius of CO2 snow (north)
+   REAL    , PARAMETER :: wiceradiusS   = 100.e-6    ! mean scat radius of CO2 snow (south)
+   REAL    , PARAMETER :: wdtemisiceN   = 0.4  ! time scale for snow metamorphism (north) !2  
+   REAL    , PARAMETER :: wdtemisiceS   = 0.4  ! time scale for snow metamorphism (south) !2 
+#ifdef NEWPHYS
+   REAL    , PARAMETER :: wvolcapa      = 1.e6       ! volumetric capacity of soil (new soil model)
+#endif
+!
+!-------------------------------
+
+   REAL    , PARAMETER :: asselin      = .025
+!   REAL    , PARAMETER :: asselin      = .0
+   REAL    , PARAMETER :: cb           = 25.
+
+   REAL    , PARAMETER :: XLV0         = 3.15E6
+   REAL    , PARAMETER :: XLV1         = 2370.
+   REAL    , PARAMETER :: XLS0         = 2.905E6
+   REAL    , PARAMETER :: XLS1         = 259.532
+
+   REAL    , PARAMETER :: XLS          = 2.85E6
+   REAL    , PARAMETER :: XLV          = 2.5E6
+   REAL    , PARAMETER :: XLF          = 3.50E5
+
+   REAL    , PARAMETER :: rhowater     = 1000.
+   REAL    , PARAMETER :: rhosnow      = 100.
+   REAL    , PARAMETER :: rhoair0      = 0.02   !Earth Surface density: 1.217 kg/m3
+                                                !Mars Surface density: 0.020 kg/m3
+   REAL    , PARAMETER :: DEGRAD       = 3.1415926/180.
+   REAL    , PARAMETER :: DPD          = 360./669. ! longitude solaire d'un jour?
+
+   REAL    , PARAMETER ::  SVP1=0.6112
+   REAL    , PARAMETER ::  SVP2=17.67
+   REAL    , PARAMETER ::  SVP3=29.65
+   REAL    , PARAMETER ::  SVPT0=273.15
+   REAL    , PARAMETER ::  EP_1=R_v/R_d-1.
+   REAL    , PARAMETER ::  EP_2=R_d/R_v
+   REAL    , PARAMETER ::  KARMAN=0.4  ! von karman constant 
+   REAL    , PARAMETER ::  EOMEG=7.0721E-5 ! angular rotation rate (rad.s-1)
+   REAL    , PARAMETER ::  STBOLT=5.67051E-8 ! stefan-boltzmann constant
+
+
+
+
+
+   REAL    , PARAMETER ::  prandtl = 1./3.0
+                                         ! constants for w-damping option
+   REAL    , PARAMETER ::  w_alpha = 0.3 ! strength m/s/s
+   REAL    , PARAMETER ::  w_beta  = 1.0 ! activation cfl number
+
+       REAL , PARAMETER ::  pq0=379.90516
+       REAL , PARAMETER ::  epsq2=0.2
+!      REAL , PARAMETER ::  epsq2=0.02
+       REAL , PARAMETER ::  a2=17.2693882
+       REAL , PARAMETER ::  a3=273.16
+       REAL , PARAMETER ::  a4=35.86
+       REAL , PARAMETER ::  epsq=1.e-12
+       REAL , PARAMETER ::  p608=rvovrd-1.
+!#if ( NMM_CORE == 1 )
+       REAL , PARAMETER ::  climit=1.e-20
+       REAL , PARAMETER ::  cm1=2937.4
+       REAL , PARAMETER ::  cm2=4.9283
+       REAL , PARAMETER ::  cm3=23.5518
+!       REAL , PARAMETER ::  defc=8.0
+!       REAL , PARAMETER ::  defm=32.0
+       REAL , PARAMETER ::  defc=0.0
+       REAL , PARAMETER ::  defm=99999.0
+       REAL , PARAMETER ::  epsfc=1./1.05
+       REAL , PARAMETER ::  epswet=0.0
+       REAL , PARAMETER ::  fcdif=1./3.
+       REAL , PARAMETER ::  fcm=0.00003
+       REAL , PARAMETER ::  gma=-r_d*(1.-rcp)*0.5
+       REAL , PARAMETER ::  p400=40000.0
+       REAL , PARAMETER ::  phitp=15000.0
+       REAL , PARAMETER ::  pi2=2.*3.1415926
+       REAL , PARAMETER ::  plbtm=105000.0
+       REAL , PARAMETER ::  plomd=64200.0
+       REAL , PARAMETER ::  pmdhi=35000.0
+       REAL , PARAMETER ::  q2ini=0.50
+       REAL , PARAMETER ::  rfcp=0.25/cp
+       REAL , PARAMETER ::  rhcrit_land=0.75
+       REAL , PARAMETER ::  rhcrit_sea=0.80
+       REAL , PARAMETER ::  rlag=14.8125
+       REAL , PARAMETER ::  rlx=0.90
+       REAL , PARAMETER ::  scq2=50.0
+       REAL , PARAMETER ::  slopht=0.001
+       REAL , PARAMETER ::  tlc=2.*0.703972477
+       REAL , PARAMETER ::  wa=0.15
+       REAL , PARAMETER ::  wght=0.35
+       REAL , PARAMETER ::  wpc=0.075
+       REAL , PARAMETER ::  z0land=0.10
+       REAL , PARAMETER ::  z0max=0.008
+       REAL , PARAMETER ::  z0sea=0.001
+!#endif
+
+
+   !  Earth
+
+   !  The value for P2SI *must* be set to 1.0 for Earth
+   !  Although, now we may not need this declaration here (see above)
+   !REAL    , PARAMETER :: P2SI         = 1.0
+
+   !  Orbital constants:
+
+   INTEGER , PARAMETER :: PLANET_YEAR = 365
+   REAL , PARAMETER :: OBLIQUITY = 23.5
+   REAL , PARAMETER :: ECCENTRICITY = 0.014
+   REAL , PARAMETER :: SEMIMAJORAXIS = 1.0 ! In AU
+   ! Don't know the following values, so we'll fake them for now
+   REAL , PARAMETER :: zero_date = 0.0   ! Time of perihelion passage
+   !  Fraction into the year (from perhelion) of the
+   !  occurrence of the Northern Spring Equinox
+   REAL , PARAMETER :: EQUINOX_FRACTION= 0.0
+
+ CONTAINS
+   SUBROUTINE init_module_model_constants
+   END SUBROUTINE init_module_model_constants
+ END MODULE module_model_constants
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_physics_addtendc.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_physics_addtendc.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_physics_addtendc.F	(revision 142)
@@ -0,0 +1,1222 @@
+!WRF:MODEL_LAYER: PHYSICS
+!
+! note: this module really belongs in the dyn_em directory since it is 
+!       specific only to the EM core. Leaving here for now, with an 
+!       #if ( EM_CORE == 1 ) directive. JM 20031201
+!
+
+!  This MODULE holds the routines which are used to perform updates of the
+!  model C-grid tendencies with physics A-grid tendencies
+!  The module consolidates code that was (up to v1.2) duplicated in 
+!  module_em and module_rk and in
+!  module_big_step_utilities.F and module_big_step_utilities_em.F
+
+!  This MODULE CONTAINS the following routines:
+!  update_phy_ten, phy_ra_ten, phy_bl_ten, phy_cu_ten, advance_ppt,
+!  add_a2a, add_a2c_u, and add_a2c_v
+
+
+MODULE module_physics_addtendc
+
+#if ( EM_CORE == 1 )
+
+   USE module_state_description
+   USE module_configure
+
+CONTAINS
+
+SUBROUTINE update_phy_ten(rt_tendf,ru_tendf,rv_tendf,moist_tendf,  &
+                      scalar_tendf,mu_tendf,                       &
+                      RTHRATEN,RTHBLTEN,RTHCUTEN,RUBLTEN,RVBLTEN,  &
+                      RQVBLTEN,RQCBLTEN,RQIBLTEN,                  &
+                      RQVCUTEN,RQCCUTEN,RQRCUTEN,RQICUTEN,RQSCUTEN,&
+                      RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN,RQVNDGDTEN,   &
+                      RMUNDGDTEN,                                  &
+                      n_moist,n_scalar,config_flags,rk_step,adv_moist_cond, &
+                      ids, ide, jds, jde, kds, kde,                &
+                      ims, ime, jms, jme, kms, kme,                &
+                      its, ite, jts, jte, kts, kte                 )
+!-------------------------------------------------------------------
+   IMPLICIT NONE
+!-------------------------------------------------------------------
+
+   TYPE(grid_config_rec_type   ) ,   INTENT(IN   ) :: config_flags
+
+   INTEGER , INTENT(IN)        ::  ids, ide, jds, jde, kds, kde,   &
+                                   ims, ime, jms, jme, kms, kme,   &
+                                   its, ite, jts, jte, kts, kte,   &
+                                   n_moist,n_scalar,rk_step
+
+   LOGICAL , INTENT(IN)        :: adv_moist_cond
+
+   REAL , DIMENSION(ims:ime , kms:kme, jms:jme),INTENT(INOUT) ::   &
+                                                         ru_tendf, &
+                                                         rv_tendf, &
+                                                         rt_tendf
+
+   REAL , DIMENSION(ims:ime , jms:jme),INTENT(INOUT) ::  mu_tendf
+
+   REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist),           &
+          INTENT(INOUT)     ::                        moist_tendf
+
+   REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_scalar),           &
+          INTENT(INOUT)     ::                        scalar_tendf
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN  ) ::   &
+                                                       RTHRATEN, &
+                                                       RTHBLTEN, &
+                                                       RTHCUTEN, &
+                                                        RUBLTEN, &
+                                                        RVBLTEN, &
+                                                       RQVBLTEN, &
+                                                       RQCBLTEN, &
+                                                       RQIBLTEN, &
+                                                       RQVCUTEN, &
+                                                       RQCCUTEN, &
+                                                       RQRCUTEN, &
+                                                       RQICUTEN, &
+                                                       RQSCUTEN, &
+                                                     RTHNDGDTEN, &
+                                                     RQVNDGDTEN, &
+                                                      RUNDGDTEN, &
+                                                      RVNDGDTEN
+
+   REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN  ) :: RMUNDGDTEN
+!------------------------------------------------------------------
+
+!  set up loop bounds for this grid's boundary conditions
+
+   if (config_flags%ra_lw_physics .gt. 0 .or.                  &
+       config_flags%ra_sw_physics .gt. 0)                      &
+      CALL phy_ra_ten(config_flags,rt_tendf,RTHRATEN,          &
+                      ids, ide, jds, jde, kds, kde,            &
+                      ims, ime, jms, jme, kms, kme,            &
+                      its, ite, jts, jte, kts, kte             )
+
+!   if (config_flags%bl_pbl_physics .gt. 0)                     &
+!****MARS
+! - All the LMD physics packages provide one tendency in the WRF sense
+! - PBL was chosen for practical reasons (U+V+T)
+! - The tendencies are supposed to be A-gridded
+   if ( (config_flags%bl_pbl_physics .gt. 0)                   &
+        .OR. (config_flags%modif_wrf) )                        &
+      CALL phy_bl_ten(config_flags,rk_step,n_moist,n_scalar,   &
+                      rt_tendf,ru_tendf,rv_tendf,moist_tendf,  &
+                      scalar_tendf,adv_moist_cond,             &
+                      RTHBLTEN,RUBLTEN,RVBLTEN,                &
+                      RQVBLTEN,RQCBLTEN,RQIBLTEN,              &
+                      ids, ide, jds, jde, kds, kde,            &
+                      ims, ime, jms, jme, kms, kme,            &
+                      its, ite, jts, jte, kts, kte             )
+
+   if (config_flags%cu_physics .gt. 0)                         &
+      CALL phy_cu_ten(config_flags,rk_step,n_moist,rt_tendf,  &
+                      RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,     &
+                      RQICUTEN,RQSCUTEN,moist_tendf,           &
+                      ids, ide, jds, jde, kds, kde,            &
+                      ims, ime, jms, jme, kms, kme,            &
+                      its, ite, jts, jte, kts, kte             )
+
+   if (config_flags%grid_fdda .gt. 0)                     &
+      CALL phy_fg_ten(config_flags,rk_step,n_moist,            &
+                      rt_tendf,ru_tendf,rv_tendf,              &
+                      mu_tendf, moist_tendf,                   &
+                      RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN,          &
+                      RQVNDGDTEN,RMUNDGDTEN,                   &
+                      ids, ide, jds, jde, kds, kde,            &
+                      ims, ime, jms, jme, kms, kme,            &
+                      its, ite, jts, jte, kts, kte             )
+
+END SUBROUTINE update_phy_ten
+
+!=================================================================
+SUBROUTINE phy_ra_ten(config_flags,rt_tendf,RTHRATEN,            &
+                      ids, ide, jds, jde, kds, kde,              &
+                      ims, ime, jms, jme, kms, kme,              &
+                      its, ite, jts, jte, kts, kte               )
+!-----------------------------------------------------------------
+   IMPLICIT NONE
+!-----------------------------------------------------------------
+   TYPE(grid_config_rec_type  ) , INTENT(IN   ) :: config_flags
+
+   INTEGER , INTENT(IN)        ::  ids, ide, jds, jde, kds, kde, &
+                                   ims, ime, jms, jme, kms, kme, &
+                                   its, ite, jts, jte, kts, kte
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN  ) ::   &
+                                                       RTHRATEN
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::  &
+                                                       rt_tendf
+
+! LOCAL VARS
+
+   INTEGER :: i,j,k
+
+   CALL add_a2a(rt_tendf,RTHRATEN,config_flags,                  &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+END SUBROUTINE phy_ra_ten
+
+!=================================================================
+SUBROUTINE phy_bl_ten(config_flags,rk_step,n_moist,n_scalar,     &
+                      rt_tendf,ru_tendf,rv_tendf,moist_tendf,    &
+                      scalar_tendf,adv_moist_cond,               &
+                      RTHBLTEN,RUBLTEN,RVBLTEN,                  & 
+                      RQVBLTEN,RQCBLTEN,RQIBLTEN,                &
+                      ids, ide, jds, jde, kds, kde,              &
+                      ims, ime, jms, jme, kms, kme,              &
+                      its, ite, jts, jte, kts, kte               )
+!-----------------------------------------------------------------
+   IMPLICIT NONE
+!-----------------------------------------------------------------
+   TYPE(grid_config_rec_type) ,     INTENT(IN   ) :: config_flags
+
+   INTEGER , INTENT(IN)        ::  ids, ide, jds, jde, kds, kde, &
+                                   ims, ime, jms, jme, kms, kme, &
+                                   its, ite, jts, jte, kts, kte, &
+                                   n_moist, n_scalar, rk_step
+
+   LOGICAL , INTENT(IN)     :: adv_moist_cond
+
+   REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist),         &
+          INTENT(INOUT)     ::                      moist_tendf
+
+   REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_scalar),         &
+          INTENT(INOUT)     ::                      scalar_tendf
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN  ) ::   & 
+                                                       RTHBLTEN, &
+                                                        RUBLTEN, &
+                                                        RVBLTEN, &
+                                                       RQVBLTEN, &
+                                                       RQCBLTEN, &
+                                                       RQIBLTEN
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT)::   &
+                                                       rt_tendf, &
+                                                       ru_tendf, &
+                                                       rv_tendf
+! LOCAL VARS
+
+   INTEGER :: i,j,k,IBGN,IEND,JBGN,JEND
+
+!-----------------------------------------------------------------
+
+
+!****MARS
+!****MARS
+!update with LMD physics tendencies
+if (config_flags%modif_wrf) then
+CALL add_a2a(rt_tendf,RTHBLTEN,config_flags,          &
+     ids,ide, jds, jde, kds, kde,                     &
+     ims, ime, jms, jme, kms, kme,                    &
+     its, ite, jts, jte, kts, kte                     )
+CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags,         &
+     ids,ide, jds, jde, kds, kde,                     &
+     ims, ime, jms, jme, kms, kme,                    &
+     its, ite, jts, jte, kts, kte                     )
+CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags,         &
+     ids,ide, jds, jde, kds, kde,                     &
+     ims, ime, jms, jme, kms, kme,                    &
+     its, ite, jts, jte, kts, kte                     )
+endif
+!****MARS
+!****MARS    
+
+
+   SELECT CASE(config_flags%bl_pbl_physics)
+
+      CASE (YSUSCHEME)
+
+           CALL add_a2a(rt_tendf,RTHBLTEN,config_flags,          &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags,         &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags,         &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QC .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+     
+        if (P_QI .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+       IF(.not. adv_moist_cond)THEN
+
+        if (P_QT .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+     
+        if (P_QT .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+       ENDIF
+
+      CASE (MRFSCHEME)
+
+           CALL add_a2a(rt_tendf,RTHBLTEN,config_flags,          &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags,         &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags,         &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QC .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+     
+        if (P_QI .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+       IF(.not. adv_moist_cond)THEN
+
+        if (P_QT .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+     
+        if (P_QT .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+       ENDIF
+
+      CASE (ACMPBLSCHEME)
+
+           CALL add_a2a(rt_tendf,RTHBLTEN,config_flags,          &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags,         &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags,         &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QC .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+     
+        if (P_QI .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+       IF(.not. adv_moist_cond)THEN
+
+        if (P_QT .ge. PARAM_FIRST_SCALAR)THEN
+           CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+        ENDIF
+     
+       ENDIF
+
+      CASE (MYJPBLSCHEME)
+
+           CALL add_a2a(rt_tendf,RTHBLTEN,config_flags,          &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags,         &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags,         &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+       IF(.not. adv_moist_cond)THEN
+
+        if (P_QT .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+     
+       ELSE
+
+        if (P_QC .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+       ENDIF
+
+      CASE (GFSSCHEME)
+                                                                                                                                        
+           CALL add_a2a(rt_tendf,RTHBLTEN,config_flags,          &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+                                                                                                                                        
+           CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags,         &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+                                                                                                                                        
+           CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags,         &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+                                                                                                                                        
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+                                                                                                                                        
+        if (P_QC .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+                                                                                                                                        
+        if (P_QI .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+       IF(.not. adv_moist_cond)THEN
+
+        if (P_QT .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+     
+        if (P_QT .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+       ENDIF
+
+      CASE DEFAULT
+
+      ! print*,'phy_bl_ten: The pbl scheme does not exist'
+
+   END SELECT
+
+END SUBROUTINE phy_bl_ten
+
+!=================================================================
+SUBROUTINE phy_cu_ten(config_flags,rk_step,n_moist,rt_tendf,    &
+                      RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,       &
+                      RQICUTEN,RQSCUTEN,moist_tendf,             &
+                      ids, ide, jds, jde, kds, kde,              &
+                      ims, ime, jms, jme, kms, kme,              &
+                      its, ite, jts, jte, kts, kte               )
+!-----------------------------------------------------------------
+   IMPLICIT NONE
+!-----------------------------------------------------------------
+   TYPE(grid_config_rec_type  ) , INTENT(IN   ) :: config_flags
+
+   INTEGER , INTENT(IN)        ::  ids, ide, jds, jde, kds, kde, &
+                                   ims, ime, jms, jme, kms, kme, &
+                                   its, ite, jts, jte, kts, kte, &
+                                   n_moist, rk_step
+
+   REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist),         &
+          INTENT(INOUT)     ::                      moist_tendf
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN  ) ::   &
+                                                       RTHCUTEN, &
+                                                       RQVCUTEN, &
+                                                       RQCCUTEN, &
+                                                       RQRCUTEN, &
+                                                       RQICUTEN, &
+                                                       RQSCUTEN
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) ::  &
+                                                       rt_tendf
+
+! LOCAL VARS
+
+   INTEGER :: i,j,k
+
+   SELECT CASE (config_flags%cu_physics)   
+
+   CASE (KFSCHEME)
+        CALL add_a2a(rt_tendf,RTHCUTEN,config_flags,             &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QC .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QR .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QR),RQRCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QI .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QS .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+   CASE (BMJSCHEME)
+        CALL add_a2a(rt_tendf,RTHCUTEN,                          &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+   CASE (KFETASCHEME)
+        CALL add_a2a(rt_tendf,RTHCUTEN,config_flags,             &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QC .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QR .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QR),RQRCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QI .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QS .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+   CASE (GDSCHEME, G3SCHEME)
+        CALL add_a2a(rt_tendf,RTHCUTEN,config_flags,             &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QC .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+        if (P_QI .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+   CASE (SASSCHEME)
+        CALL add_a2a(rt_tendf,RTHCUTEN,config_flags,             &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+                                                                                                                                        
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+          
+        if (P_QC .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+          
+        if (P_QI .ge. PARAM_FIRST_SCALAR)                                         &
+        CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN,     &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+   CASE DEFAULT
+
+   END SELECT
+
+END SUBROUTINE phy_cu_ten
+
+!=================================================================
+SUBROUTINE phy_fg_ten(config_flags,rk_step,n_moist,            &
+                      rt_tendf,ru_tendf,rv_tendf,              &
+                      mu_tendf, moist_tendf,                   &
+                      RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN,          &
+                      RQVNDGDTEN,RMUNDGDTEN,                   &
+                      ids, ide, jds, jde, kds, kde,              &
+                      ims, ime, jms, jme, kms, kme,              &
+                      its, ite, jts, jte, kts, kte               )
+!-----------------------------------------------------------------
+   IMPLICIT NONE
+!-----------------------------------------------------------------
+   TYPE(grid_config_rec_type) ,     INTENT(IN   ) :: config_flags
+
+   INTEGER , INTENT(IN)        ::  ids, ide, jds, jde, kds, kde, &
+                                   ims, ime, jms, jme, kms, kme, &
+                                   its, ite, jts, jte, kts, kte, &
+                                   n_moist, rk_step
+
+   REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist),         &
+          INTENT(INOUT)     ::                      moist_tendf
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN  ) ::   &
+                                                       RTHNDGDTEN, &
+                                                        RUNDGDTEN, &
+                                                        RVNDGDTEN, &
+                                                       RQVNDGDTEN
+
+   REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN  ) ::  RMUNDGDTEN
+
+   REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT)::   &
+                                                       rt_tendf, &
+                                                       ru_tendf, &
+                                                       rv_tendf
+
+   REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT)::  mu_tendf
+
+! LOCAL VARS
+
+   INTEGER :: i,j,k,IBGN,IEND,JBGN,JEND
+
+!-----------------------------------------------------------------
+
+   SELECT CASE(config_flags%grid_fdda)
+
+      CASE (PSUFDDAGD)
+
+           CALL add_a2a(rt_tendf,RTHNDGDTEN,config_flags,        &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+! note fdda u and v tendencies are staggered
+           CALL add_c2c_u(ru_tendf,RUNDGDTEN,config_flags,       &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_c2c_v(rv_tendf,RVNDGDTEN,config_flags,       &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+           CALL add_a2a(mu_tendf,RMUNDGDTEN,config_flags,      &
+                ids,ide, jds, jde, kds, kds,                     &
+                ims, ime, jms, jme, kms, kms,                    &
+                its, ite, jts, jte, kts, kts                     )
+
+        if (P_QV .ge. PARAM_FIRST_SCALAR)                                         &
+           CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVNDGDTEN,  &
+                config_flags,                                    &
+                ids,ide, jds, jde, kds, kde,                     &
+                ims, ime, jms, jme, kms, kme,                    &
+                its, ite, jts, jte, kts, kte                     )
+
+
+      CASE DEFAULT
+
+   END SELECT
+
+END SUBROUTINE phy_fg_ten
+
+!----------------------------------------------------------------------
+SUBROUTINE advance_ppt(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,           &
+                     RQICUTEN,RQSCUTEN,RAINC,RAINCV,PRATEC,NCA,       &
+                     HTOP,HBOT,CUTOP,CUBOT,                           &
+                     CUPPT, DT, config_flags,                         &
+                     ids,ide, jds,jde, kds,kde,                       &
+                     ims,ime, jms,jme, kms,kme,                       &
+                     its,ite, jts,jte, kts,kte                        )     
+!----------------------------------------------------------------------
+   USE module_state_description
+!!!******MARS MARS
+!!!******MARS MARS
+!   USE module_cu_kf
+!   USE module_cu_kfeta
+!----------------------------------------------------------------------
+   IMPLICIT NONE
+!----------------------------------------------------------------------
+   TYPE(grid_config_rec_type),  INTENT(IN   )    :: config_flags
+
+   INTEGER,      INTENT(IN   )    ::                             &
+                                      ids,ide, jds,jde, kds,kde, &
+                                      ims,ime, jms,jme, kms,kme, &
+                                      its,ite, jts,jte, kts,kte
+
+
+   REAL, DIMENSION( ims:ime, kms:kme, jms:jme ),                 &
+         INTENT(INOUT)  ::                             RTHCUTEN, &
+                                                       RQVCUTEN, &
+                                                       RQCCUTEN, &
+                                                       RQRCUTEN, &
+                                                       RQICUTEN, &
+                                                       RQSCUTEN
+
+   REAL, DIMENSION( ims:ime , jms:jme ),                         &
+          INTENT(INOUT) ::                                RAINC, &
+                                                         RAINCV, &
+                                                         PRATEC, &
+                                                            NCA, &
+                                                           HTOP, &
+                                                           HBOT, &
+                                                          CUTOP, &
+                                                          CUBOT, &
+                                                          CUPPT
+   REAL, INTENT(IN) ::                                       DT
+
+! LOCAL  VAR
+
+   INTEGER :: i,j,k,i_start,i_end,j_start,j_end,k_start,k_end
+   INTEGER :: NCUTOP, NCUBOT
+
+!-----------------------------------------------------------------
+
+   IF (config_flags%cu_physics .eq. 0) return
+
+! SET START AND END POINTS FOR TILES
+
+   i_start = its
+   i_end   = min( ite,ide-1 )
+   j_start = jts
+   j_end   = min( jte,jde-1 )
+!
+!  IF( config_flags%nested .or. config_flags%specified ) THEN
+!    i_start = max( its,ids+1 )
+!    i_end   = min( ite,ide-2 )
+!    j_start = max( jts,jds+1 )
+!    j_end   = min( jte,jde-2 )
+!  ENDIF
+!
+   k_start = kts
+   k_end = min( kte, kde-1 )
+
+! Update total cumulus scheme precipitation
+
+! in mm  
+
+   DO J = j_start,j_end
+   DO i = i_start,i_end
+      RAINC(I,J)=RAINC(I,J)+PRATEC(I,J)*DT
+      CUPPT(I,J)=CUPPT(I,J)+PRATEC(I,J)*DT/1000.
+   ENDDO
+   ENDDO
+
+   SELECT CASE (config_flags%cu_physics)
+
+   CASE (KFSCHEME)
+
+        DO J = j_start,j_end
+        DO i = i_start,i_end
+
+           IF ( NCA(I,J) .GT. 0 ) THEN
+
+              IF ( NINT(NCA(I,J) / DT) .le. 0 ) THEN
+
+              ! set tendency to zero
+                 PRATEC(I,J)=0.
+                 RAINCV(I,J)=0.
+                 DO k = k_start,k_end
+                    RTHCUTEN(i,k,j)=0.
+                    RQVCUTEN(i,k,j)=0.
+                    RQCCUTEN(i,k,j)=0.
+                    RQRCUTEN(i,k,j)=0.
+                    if (P_QI .ge. PARAM_FIRST_SCALAR) RQICUTEN(i,k,j)=0.
+                    if (P_QS .ge. PARAM_FIRST_SCALAR) RQSCUTEN(i,k,j)=0.
+                 ENDDO
+              ENDIF
+
+              NCA(I,J)=NCA(I,J)-DT ! Decrease NCA
+
+           ENDIF
+!
+        ENDDO
+        ENDDO
+
+   CASE (BMJSCHEME)
+ 
+        DO J = j_start,j_end
+        DO i = i_start,i_end
+
+! HTOP, HBOT FOR GFDL RADIATION
+           NCUTOP=NINT(CUTOP(I,J))
+           NCUBOT=NINT(CUBOT(I,J))
+           IF(NCUTOP>1.AND.NCUTOP<KDE)THEN
+             HTOP(I,J)=MAX(CUTOP(I,J),HTOP(I,J))
+           ENDIF
+           IF(NCUBOT>0.AND.NCUBOT<KDE)THEN
+             HBOT(I,J)=MIN(CUBOT(I,J),HBOT(I,J))
+           ENDIF
+
+        ENDDO
+        ENDDO
+
+   CASE (KFETASCHEME)
+
+        DO J = j_start,j_end
+        DO i = i_start,i_end
+
+! HTOP, HBOT FOR GFDL RADIATION
+           NCUTOP=NINT(CUTOP(I,J))
+           NCUBOT=NINT(CUBOT(I,J))
+           IF(NCUTOP>1.AND.NCUTOP<KDE)THEN
+             HTOP(I,J)=MAX(CUTOP(I,J),HTOP(I,J))
+           ENDIF
+           IF(NCUBOT>0.AND.NCUBOT<KDE)THEN
+             HBOT(I,J)=MIN(CUBOT(I,J),HBOT(I,J))
+           ENDIF
+
+           IF ( NCA(I,J) .GT. 0 ) THEN
+
+
+              IF ( NINT(NCA(I,J) / DT) .LE. 1 ) THEN
+
+              ! set tendency to zero
+                 PRATEC(I,J)=0.
+                 RAINCV(I,J)=0.
+                 DO k = k_start,k_end
+                    RTHCUTEN(i,k,j)=0.
+                    RQVCUTEN(i,k,j)=0.
+                    RQCCUTEN(i,k,j)=0.
+                    RQRCUTEN(i,k,j)=0.
+                    if (P_QI .ge. PARAM_FIRST_SCALAR) RQICUTEN(i,k,j)=0.
+                    if (P_QS .ge. PARAM_FIRST_SCALAR) RQSCUTEN(i,k,j)=0.
+                 ENDDO
+              ENDIF
+
+              NCA(I,J)=NCA(I,J)-DT ! Decrease NCA
+!              NCA(I,J)=NCA(I,J)-1. ! Decrease NCA
+
+           ENDIF
+!
+        ENDDO
+        ENDDO
+
+   CASE DEFAULT
+
+   END SELECT
+
+END SUBROUTINE advance_ppt
+
+SUBROUTINE add_a2a(lvar,rvar,config_flags,                  &
+                   ids,ide, jds, jde, kds, kde,             &
+                   ims, ime, jms, jme, kms, kme,            &
+                   its, ite, jts, jte, kts, kte             )
+!------------------------------------------------------------
+   IMPLICIT NONE
+!------------------------------------------------------------
+   TYPE(grid_config_rec_type),  INTENT(IN) :: config_flags
+
+   INTEGER , INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                              ims, ime, jms, jme, kms, kme, &
+                              its, ite, jts, jte, kts, kte
+
+   REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN   ) ::&
+                                                      rvar
+   REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
+                                                      lvar
+
+! LOCAL VARS
+   INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
+
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+   ktf = min(kte,kde-1)
+
+   IF ( config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+
+   DO j = j_start,j_end
+   DO k = kts,ktf
+   DO i = i_start,i_end
+      lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE add_a2a
+
+!------------------------------------------------------------
+SUBROUTINE add_a2c_u(lvar,rvar,config_flags,                &
+                   ids,ide, jds, jde, kds, kde,             &
+                   ims, ime, jms, jme, kms, kme,            &
+                   its, ite, jts, jte, kts, kte             )
+!------------------------------------------------------------
+!------------------------------------------------------------
+   IMPLICIT NONE
+!------------------------------------------------------------
+
+   TYPE(grid_config_rec_type),  INTENT(IN   )    :: config_flags
+
+   INTEGER , INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                              ims, ime, jms, jme, kms, kme, &
+                              its, ite, jts, jte, kts, kte
+
+   REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN   ) ::&
+                                                      rvar
+   REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
+                                                      lvar
+
+! LOCAL VARS
+
+   INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
+
+   ktf=min(kte,kde-1)
+
+   i_start = its
+   i_end   = ite
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+   IF ( config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-1,ite)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = ite
+
+   DO j = j_start,j_end
+   DO k = kts,ktf
+   DO i = i_start,i_end
+      lvar(i,k,j) = lvar(i,k,j) + &
+                       0.5*(rvar(i,k,j)+rvar(i-1,k,j))
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE add_a2c_u
+
+!------------------------------------------------------------
+SUBROUTINE add_a2c_v(lvar,rvar,config_flags,                &
+                   ids,ide, jds, jde, kds, kde,             &
+                   ims, ime, jms, jme, kms, kme,            &
+                   its, ite, jts, jte, kts, kte             )
+!------------------------------------------------------------
+!------------------------------------------------------------
+   IMPLICIT NONE
+!------------------------------------------------------------
+
+   TYPE(grid_config_rec_type),  INTENT(IN   )    :: config_flags
+
+   INTEGER , INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                              ims, ime, jms, jme, kms, kme, &
+                              its, ite, jts, jte, kts, kte
+
+   REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN   ) ::&
+                                                      rvar
+   REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
+                                                      lvar
+
+! LOCAL VARS
+
+   INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
+
+   ktf=min(kte,kde-1)
+
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = jte
+
+   IF ( config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-1,jte)
+      IF ( config_flags%periodic_x ) i_start = its
+      IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
+
+   DO j = j_start,j_end
+   DO k = kts,kte
+   DO i = i_start,i_end
+      lvar(i,k,j) = lvar(i,k,j) + &
+                     0.5*(rvar(i,k,j)+rvar(i,k,j-1))
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE add_a2c_v
+
+!------------------------------------------------------------
+SUBROUTINE add_c2c_u(lvar,rvar,config_flags,                &
+                   ids,ide, jds, jde, kds, kde,             &
+                   ims, ime, jms, jme, kms, kme,            &
+                   its, ite, jts, jte, kts, kte             )
+!------------------------------------------------------------
+!------------------------------------------------------------
+   IMPLICIT NONE
+!------------------------------------------------------------
+
+   TYPE(grid_config_rec_type),  INTENT(IN   )    :: config_flags
+
+   INTEGER , INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                              ims, ime, jms, jme, kms, kme, &
+                              its, ite, jts, jte, kts, kte
+
+   REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN   ) ::&
+                                                      rvar
+   REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
+                                                      lvar
+
+! LOCAL VARS
+
+   INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
+
+   ktf=min(kte,kde-1)
+
+   i_start = its
+   i_end   = ite
+   j_start = jts
+   j_end   = MIN(jte,jde-1)
+
+
+   IF ( config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-1,ite)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-2,jte)
+
+!  write(*,'(a,6i4)') 'call c2cu, i_start, i_end, j_start, j_end=', i_start, i_end, j_start, j_end
+
+   DO j = j_start,j_end
+   DO k = kts,ktf
+   DO i = i_start,i_end
+      lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE add_c2c_u
+
+SUBROUTINE add_c2c_v(lvar,rvar,config_flags,                &
+                   ids,ide, jds, jde, kds, kde,             &
+                   ims, ime, jms, jme, kms, kme,            &
+                   its, ite, jts, jte, kts, kte             )
+!------------------------------------------------------------
+!------------------------------------------------------------
+   IMPLICIT NONE
+!------------------------------------------------------------
+
+   TYPE(grid_config_rec_type),  INTENT(IN   )    :: config_flags
+
+   INTEGER , INTENT(IN   ) :: ids, ide, jds, jde, kds, kde, &
+                              ims, ime, jms, jme, kms, kme, &
+                              its, ite, jts, jte, kts, kte
+
+   REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN   ) ::&
+                                                      rvar
+   REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
+                                                      lvar
+
+! LOCAL VARS
+
+   INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
+
+   ktf=min(kte,kde-1)
+
+   i_start = its
+   i_end   = MIN(ite,ide-1)
+   j_start = jts
+   j_end   = jte
+
+   IF ( config_flags%specified .or. &
+        config_flags%nested) i_start = MAX(ids+1,its)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) i_end   = MIN(ide-2,ite)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) j_start = MAX(jds+1,jts)
+   IF ( config_flags%specified .or. &
+        config_flags%nested) j_end   = MIN(jde-1,jte)
+
+!  write(*,'(a,6i4)') 'call c2cv, i_start, i_end, j_start, j_end=', i_start, i_end, j_start, j_end
+
+   DO j = j_start,j_end
+   DO k = kts,kte
+   DO i = i_start,i_end
+      lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
+   ENDDO
+   ENDDO
+   ENDDO
+
+END SUBROUTINE add_c2c_v
+
+#endif
+
+END MODULE module_physics_addtendc
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_physics_init.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_physics_init.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/module_physics_init.F	(revision 142)
@@ -0,0 +1,1804 @@
+!WRF:MODEL_LAYER:INITIALIZATION
+!
+
+!  This MODULE holds the routines which are used to perform model start-up operations
+!  for the individual domains.  This is the stage after inputting wrfinput and before
+!  calling 'integrate'.
+
+!  This MODULE CONTAINS the following routines:
+
+
+MODULE module_physics_init
+
+!  USE module_io_domain
+   USE module_state_description
+   USE module_model_constants
+!  USE module_timing
+   USE module_configure
+#ifdef DM_PARALLEL
+   USE module_dm
+#endif
+
+CONTAINS
+
+
+!=================================================================
+   SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf,     &
+                         p_top, TSK,RADT,BLDT,CUDT,MPDT,         &
+                         RTHCUTEN, RQVCUTEN, RQRCUTEN,           &
+                         RQCCUTEN, RQSCUTEN, RQICUTEN,           &
+                         RUBLTEN,RVBLTEN,RTHBLTEN,               &
+                         RQVBLTEN,RQCBLTEN,RQIBLTEN,             &
+                         RTHRATEN,RTHRATENLW,RTHRATENSW,         &
+                         STEPBL,STEPRA,STEPCU,                   &
+                         W0AVG, RAINNC, RAINC, RAINCV, RAINNCV,  &
+                         NCA,swrad_scat,                         &
+                         CLDEFI,LOWLYR,                          &
+                         MASS_FLUX,                              &
+                         RTHFTEN, RQVFTEN,                       &
+                         CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK,  & !EMBCK new 
+                         LU_INDEX,                               &
+                         landuse_ISICE, landuse_LUCATS,          &
+                         landuse_LUSEAS, landuse_ISN,            &
+                         lu_state,                               &
+                         XLAT,XLONG,ALBEDO,ALBBCK,GMT,JULYR,JULDAY,&
+                         levsiz, n_ozmixm, n_aerosolc, paerlev,  &
+                         TMN,XLAND,ZNT,Z0,UST,MOL,PBLH,TKE_MYJ,  &
+                         EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL, &
+                         TSLB,ZS,DZS,num_soil_layers,warm_rain,  & 
+                         adv_moist_cond,                         &
+                         APR_GR,APR_W,APR_MC,APR_ST,APR_AS,      &
+                         APR_CAPMA,APR_CAPME,APR_CAPMI,          &
+                         XICE,XICEM,VEGFRA,SNOW,CANWAT,SMSTAV,   &
+                         SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,&
+                         ACSNOM,IVGTYP,ISLTYP, SFCEVP, SMOIS,    &
+                         SH2O, SNOWH, SMFR3D,                    &  ! temporary
+                         DX,DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
+                         mp_restart_state,tbpvs_state,tbpvs0_state,&
+                         allowed_to_read, moved, start_of_simulation,&
+                         ids, ide, jds, jde, kds, kde,           &
+                         ims, ime, jms, jme, kms, kme,           &
+                         its, ite, jts, jte, kts, kte,           &
+                         ozmixm,pin,                             &    ! Optional
+                         m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,& ! Optional
+                         RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN,         &    ! Optional
+                         RQVNDGDTEN,RMUNDGDTEN,                  &    ! Optional
+                         FGDT,STEPFG,                            &    ! Optional
+                         cugd_tten,cugd_ttens,cugd_qvten,        &    ! Optional
+                         cugd_qvtens,cugd_qcten,                 &    ! Optional
+!                        num_roof_layers,num_wall_layers,        & !Optional urban
+!                        num_road_layers,                        & !Optional urban
+                         DZR, DZB, DZG,                          & !Optional urban
+                         TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,    & !Optional urban
+                         QC_URB2D, XXXR_URB2D,XXXB_URB2D,        & !Optional urban
+                         XXXG_URB2D, XXXC_URB2D,                 & !Optional urban
+                         TRL_URB3D, TBL_URB3D, TGL_URB3D,        & !Optional urban
+                         SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D,  & !Optional urban
+                         TS_URB2D, FRC_URB2D, UTYPE_URB2D,       & !Optional urban
+                         TML,T0ML,HML,H0ML,HUML,HVML,            & !Optional oml
+                         itimestep                               & !Optional obs fdda
+#if ( EM_CORE == 1 )
+                         ,fdob                                   & !Optional obs fdda
+#endif
+                         )
+
+!-----------------------------------------------------------------
+   USE module_domain
+   USE module_wrf_error
+   IMPLICIT NONE
+!-----------------------------------------------------------------
+   TYPE (grid_config_rec_type)              :: config_flags
+
+   INTEGER , INTENT(IN)        :: id
+   LOGICAL , INTENT(OUT)       :: warm_rain,adv_moist_cond
+!   LOGICAL , INTENT (IN)       :: FNDSOILW, FNDSNOWH
+   LOGICAL, PARAMETER          :: FNDSOILW=.true., FNDSNOWH=.true.
+   INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,  &
+                                  ims, ime, jms, jme, kms, kme,  &
+                                  its, ite, jts, jte, kts, kte
+
+   INTEGER , INTENT(IN)        :: num_soil_layers
+
+   LOGICAL,  INTENT(IN)        :: start_of_simulation
+   REAL,     INTENT(IN)        :: DT, p_top, DX, DY
+   LOGICAL,  INTENT(IN)        :: restart
+   REAL,     INTENT(IN)        :: RADT,BLDT,CUDT,MPDT
+   REAL,     INTENT(IN)        :: swrad_scat
+
+   REAL,     DIMENSION( kms:kme ) , INTENT(IN) :: zfull, zhalf
+   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK, XLAT, XLONG
+
+   INTEGER,      INTENT(IN   )    ::   levsiz, n_ozmixm
+   INTEGER,      INTENT(IN   )    ::   paerlev, n_aerosolc
+
+   REAL,  DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
+          INTENT(INOUT) ::                                  OZMIXM
+
+   REAL,  DIMENSION(levsiz), OPTIONAL, INTENT(INOUT)  ::        PIN
+
+   REAL,  DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT)  :: m_ps_1,m_ps_2
+   REAL,  DIMENSION(paerlev), OPTIONAL,INTENT(INOUT)  ::          m_hybi
+   REAL,  DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
+          INTENT(INOUT) ::                    aerosolc_1, aerosolc_2
+
+   REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
+                 INTENT(INOUT) :: SMOIS, SH2O,TSLB
+   REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), INTENT(OUT) :: SMFR3D
+
+   REAL,    DIMENSION( ims:ime, jms:jme )                     , &
+            INTENT(INOUT)    ::                           SNOW, &
+                                                         SNOWC, &
+                                                         SNOWH, &
+                                                        CANWAT, &
+                                                        SMSTAV, &
+                                                        SMSTOT, &
+                                                     SFCRUNOFF, &
+                                                      UDRUNOFF, &
+                                                        SFCEVP, &
+                                                        GRDFLX, &
+                                                        ACSNOW, &
+                                                          XICE, &
+                                                         XICEM, &
+                                                        VEGFRA, &
+                                                        ACSNOM
+
+   INTEGER, DIMENSION( ims:ime, jms:jme )                     , &
+            INTENT(INOUT)    ::                         IVGTYP, &
+                                                        ISLTYP
+
+! rad
+
+   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
+             RTHRATEN, RTHRATENLW, RTHRATENSW, CLDFRA
+
+   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
+             CLDFRA_OLD
+
+   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::         &
+             GSW,ALBEDO,ALBBCK,GLW,EMISS,EMBCK                          !EMBCK new
+
+   REAL,     INTENT(IN) :: GMT
+
+   INTEGER , INTENT(OUT) :: STEPRA, STEPBL, STEPCU
+   INTEGER , INTENT(IN) :: JULYR, JULDAY
+
+! cps
+
+   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
+             RTHCUTEN, RQVCUTEN, RQRCUTEN, RQCCUTEN, RQSCUTEN,   &
+             RQICUTEN
+
+   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
+
+   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: MASS_FLUX,   &
+                      APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
+                      APR_CAPMA,APR_CAPME,APR_CAPMI
+
+   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
+             RTHFTEN, RQVFTEN
+
+   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) ::           &
+             RAINNC, RAINC, RAINCV, RAINNCV
+
+   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: CLDEFI, NCA
+
+   INTEGER,  DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR
+
+!pbl
+
+   ! soil layer
+
+
+   REAL,     DIMENSION(1:num_soil_layers),      INTENT(INOUT) :: ZS,DZS
+
+   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
+             RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN,RQIBLTEN,EXCH_H,TKE_MYJ
+   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
+             cugd_tten,cugd_ttens,cugd_qvten,                &
+             cugd_qvtens,cugd_qcten
+   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::         &
+             XLAND,ZNT,Z0,UST,MOL,LU_INDEX,                         &
+             PBLH,THC,MAVAIL,HFX,QFX,RAINBL
+   INTEGER , INTENT(INOUT)  :: landuse_ISICE, landuse_LUCATS
+   INTEGER , INTENT(INOUT)  :: landuse_LUSEAS, landuse_ISN
+   REAL    , INTENT(INOUT)  , DIMENSION( : ) :: lu_state
+
+   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
+
+!mp
+   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::   &
+             F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
+   REAL, DIMENSION(:), INTENT(INOUT)   :: mp_restart_state,tbpvs_state,tbpvs0_state
+   LOGICAL,  INTENT(IN)  :: allowed_to_read, moved
+
+! ocean mixed layer
+   REAL,     DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
+             TML,T0ML,HML,H0ML,HUML,HVML
+
+!fdda
+   REAL,     OPTIONAL, INTENT(IN) :: FGDT
+   INTEGER , OPTIONAL, INTENT(OUT) :: STEPFG
+   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
+             RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN, RQVNDGDTEN
+   REAL,     DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
+             RMUNDGDTEN
+
+!URBAN
+!   REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR   !urban
+!   REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB   !urban
+!   REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG   !urban
+   REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR    !urban
+   REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB    !urban
+   REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG    !urban
+
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !urban
+
+!   REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
+!   REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
+!   REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
+   REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D  !urban
+   REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D  !urban
+   REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D  !urban
+
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !urban
+   REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !urban
+   INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !urban
+
+!obs fdda
+   INTEGER, OPTIONAL, INTENT(IN) :: itimestep
+#if ( EM_CORE == 1 ) 
+   TYPE(fdob_type), OPTIONAL, INTENT(INOUT) :: fdob
+#endif
+
+! Local data
+
+   REAL    :: ALBLND,ZZLND,ZZWTR,THINLD,XMAVA,CEN_LAT,pptop
+   REAL,     DIMENSION( kms:kme )  :: sfull, shalf
+   REAL :: obs_twindo_cg, obs_twindo
+   
+   CHARACTER*4 :: MMINLU_loc
+   CHARACTER*80 :: message
+   INTEGER :: ISWATER
+   INTEGER :: ucmcall
+   INTEGER :: omlcall
+   REAL    :: oml_hml0
+   LOGICAL :: usemonalb
+
+   INTEGER :: i, j, k, itf, jtf
+integer myproc
+
+!-----------------------------------------------------------------
+
+   ucmcall=config_flags%ucmcall
+   usemonalb=config_flags%usemonalb
+#if ( EM_CORE == 1 ) 
+   obs_twindo_cg=model_config_rec%obs_twindo(1)
+   obs_twindo=config_flags%obs_twindo
+   oml_hml0=config_flags%oml_hml0
+   omlcall=config_flags%omlcall
+#endif
+
+!-- should be from the namelist
+
+   sfull = 0.
+   shalf = 0.
+
+   CALL wrf_debug(100,'top of phy_init')
+
+   WRITE(wrf_err_message,*) 'phy_init:  start_of_simulation = ',start_of_simulation
+   CALL wrf_debug ( 100, TRIM(wrf_err_message) )
+
+   itf=min0(ite,ide-1)
+   jtf=min0(jte,jde-1)
+
+   ZZLND=0.1
+   ZZWTR=0.0001
+   THINLD=0.04
+   ALBLND=0.2
+   XMAVA=0.3
+
+#if (NMM_CORE == 1)
+   if (.not.usemonalb) CALL wrf_error_fatal('usemonalb should always be true for NMM')
+#endif
+
+   CALL nl_get_cen_lat(id,cen_lat)
+   CALL wrf_debug(100,'calling nl_get_iswater, nl_get_mminlu_loc')
+   CALL nl_get_iswater(id,iswater)
+   CALL nl_get_mminlu( 1, mminlu_loc )
+   CALL wrf_debug(100,'after nl_get_iswater, nl_get_mminlu_loc')
+
+  IF(.not.restart)THEN
+!-- initialize common variables
+
+   IF ( .NOT. moved ) THEN
+   DO j=jts,jtf
+   DO i=its,itf
+      XLAND(i,j)=1.
+      GSW(i,j)=0.
+      GLW(i,j)=0.
+      UST(i,j)=0.
+      MOL(i,j)=0.0
+      PBLH(i,j)=0.0
+      HFX(i,j)=0.
+      QFX(i,j)=0.
+      RAINBL(i,j)=0.
+      RAINNCV(i,j)=0.
+      ACSNOW(i,j)=0.
+      DO k=kms,kme  !wig, 17-May-2006: Added for idealized chem. runs
+         EXCH_H(i,k,j) = 0.
+      END DO
+   ENDDO
+   ENDDO
+   ENDIF
+
+!
+   DO j=jts,jtf
+   DO i=its,itf
+     IF(XLAND(i,j) .LT. 1.5)THEN
+       IF(mminlu_loc .EQ. '    ') ALBBCK(i,j)=ALBLND
+       EMBCK(i,j)=0.85
+       ALBEDO(i,j)=ALBBCK(i,j)
+       EMISS(i,j)=EMBCK(i,j)
+       THC(i,j)=THINLD
+       ZNT(i,j)=ZZLND
+#if  ! ( NMM_CORE == 1 ) 
+       Z0(i,j)=ZZLND
+#endif
+       MAVAIL(i,j)=XMAVA
+     ELSE
+       IF(mminlu_loc .EQ. '    ') ALBBCK(i,j)=0.08
+       ALBEDO(i,j)=ALBBCK(i,j)
+       EMBCK(i,j)=0.98
+       EMISS(i,j)=EMBCK(i,j)
+       THC(i,j)=THINLD
+       ZNT(i,j)=ZZWTR
+#if  ! ( NMM_CORE == 1 ) 
+       Z0(i,j)=ZZWTR
+#endif
+       MAVAIL(i,j)=1.0 
+     ENDIF
+
+   ENDDO
+   ENDDO
+
+   CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to landuse_init' )
+
+   IF(mminlu_loc .ne. '    ')THEN
+!-- initialize surface properties
+
+     CALL landuse_init(lu_index, snowc, albedo, albbck, mavail, emiss, embck,            &
+                znt, Z0, thc, xland, xice, xicem, julday, cen_lat, iswater, mminlu_loc,  &
+                landuse_ISICE, landuse_LUCATS,                      &
+                landuse_LUSEAS, landuse_ISN,                        &
+                lu_state,                                           &
+                allowed_to_read , usemonalb ,                       &
+                ids, ide, jds, jde, kds, kde,                       &
+                ims, ime, jms, jme, kms, kme,                       &
+                its, ite, jts, jte, kts, kte                       ) 
+   ENDIF
+
+  ENDIF
+
+!-- convert zfull and zhalf to sigma values for ra_init (Eta CO2 needs these)
+!-- zfull/zhalf may be either zeta or eta
+!-- what is done here depends on coordinate (check this code if adding new coordinates)
+   CALL z2sigma(zfull,zhalf,sfull,shalf,p_top,pptop,config_flags, &
+                allowed_to_read,                                  &
+                kds,kde,kms,kme,kts,kte)
+
+!!!!******MARS MARS MARS
+!!!!******MARS MARS MARS
+!!!!******MARS MARS MARS
+
+!
+!!-- initialize physics
+!!-- ra: radiation
+!!-- bl: pbl
+!!-- cu: cumulus
+!!-- mp: microphysics
+!
+!   CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to ra_init' )
+!
+!   CALL ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW,             &
+!                RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT,    &
+!                levsiz,XLAT,n_ozmixm,                           &
+!                cldfra_old,                                     & ! Optional
+!                ozmixm,pin,                                     & ! Optional
+!                m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,     & ! Optional
+!                paerlev,n_aerosolc,                             &
+!                sfull,shalf,pptop,swrad_scat,                   &
+!                config_flags,restart,                           & 
+!                allowed_to_read, start_of_simulation,           &
+!                ids, ide, jds, jde, kds, kde,                   &
+!                ims, ime, jms, jme, kms, kme,                   &
+!                its, ite, jts, jte, kts, kte                    )
+!
+!   CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to bl_init' )
+!
+!   CALL bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN,        &
+!                RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN,             &
+!                config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS,    &
+!                num_soil_layers,TKE_MYJ,EXCH_H,VEGFRA,          &
+!                SNOW,SNOWC, CANWAT,SMSTAV,                      &
+!                SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM,       &
+!                IVGTYP,ISLTYP,SMOIS,SMFR3D,MAVAIL,              &
+!                SNOWH,SH2O,FNDSOILW, FNDSNOWH,                  &
+!#if (NMM_CORE == 1)
+!                Z0,XLAND,XICE,                                  &
+!#else
+!                ZNT,XLAND,XICE,                                 &
+!#endif
+!                SFCEVP,GRDFLX,                                  &
+!                allowed_to_read ,                               &
+!                start_of_simulation ,                           &
+!                DZR, DZB, DZG,                                  & !Optional urban
+!                TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,   & !Optional urban
+!                XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,    & !Optional urban
+!                TRL_URB3D, TBL_URB3D, TGL_URB3D,                & !Optional urban
+!                SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D,          & !Optional urban
+!                TS_URB2D, FRC_URB2D, UTYPE_URB2D, UCMCALL,      & !Optional urban
+!                ids, ide, jds, jde, kds, kde,                   &
+!                ims, ime, jms, jme, kms, kme,                   &
+!                its, ite, jts, jte, kts, kte,                   &
+!                oml_hml0, omlcall,                              & !Optional oml
+!                TML,T0ML,HML,H0ML,HUML,HVML                     ) !Optional oml
+!
+!   CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to cu_init' )
+!
+!   CALL cu_init(STEPCU,CUDT,DT,RTHCUTEN,RQVCUTEN,RQRCUTEN,      &
+!                RQCCUTEN,RQSCUTEN,RQICUTEN,NCA,RAINC,           &
+!                RAINCV,W0AVG,config_flags,restart,              &
+!                CLDEFI,LOWLYR,MASS_FLUX,                        &
+!                RTHFTEN, RQVFTEN,                               &
+!                APR_GR,APR_W,APR_MC,APR_ST,APR_AS,              &
+!                APR_CAPMA,APR_CAPME,APR_CAPMI,                  &
+!                cugd_tten,cugd_ttens,cugd_qvten,                &
+!                cugd_qvtens,cugd_qcten,                         &
+!                allowed_to_read, start_of_simulation,           &
+!                ids, ide, jds, jde, kds, kde,                   &
+!                ims, ime, jms, jme, kms, kme,                   &
+!                its, ite, jts, jte, kts, kte                    )
+!
+!   CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to mp_init' )
+!
+!   CALL mp_init(RAINNC,config_flags,restart,warm_rain,          &
+!                adv_moist_cond,                                 &
+!                MPDT, DT, DX, DY, LOWLYR,                       & 
+!                F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,               &
+!                mp_restart_state,tbpvs_state,tbpvs0_state,      &
+!                allowed_to_read, start_of_simulation,           &
+!                ids, ide, jds, jde, kds, kde,                   &
+!                ims, ime, jms, jme, kms, kme,                   &
+!                its, ite, jts, jte, kts, kte                    )
+!
+!   write(message,*)'STEPRA,STEPCU,STEPBL',STEPRA,STEPCU,STEPBL
+!   CALL wrf_message( message )
+!
+!#if  ( EM_CORE == 1 )
+!   CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fg_init' )
+!
+!   CALL fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN,          &
+!                RTHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN,               &
+!                config_flags,restart,                           &
+!                allowed_to_read ,                               &
+!                ids, ide, jds, jde, kds, kde,                   &
+!                ims, ime, jms, jme, kms, kme,                   &
+!                its, ite, jts, jte, kts, kte                    )
+!
+!   CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fdob_init' )
+!
+!   CALL fdob_init(model_config_rec%obs_nudge_opt,               &
+!                  model_config_rec%max_dom,                     &
+!                  id,                                           &
+!                  model_config_rec%parent_id,                   &
+!                  model_config_rec%obs_idynin,                  &
+!                  model_config_rec%obs_dtramp,                  &
+!                  model_config_rec%fdda_end,                    &
+!                  config_flags%restart,                         &
+!                  obs_twindo_cg, obs_twindo,                    &
+!                  itimestep,                                    &
+!                  config_flags%cen_lat,                         &
+!                  config_flags%cen_lon,                         &
+!                  config_flags%stand_lon,                       &
+!                  config_flags%truelat1,                        &
+!                  config_flags%truelat2,                        &
+!                  config_flags%map_proj,                        &
+!                  xlat,                                         & 
+!                  xlong,                                        & 
+!                  model_config_rec%s_sn(1),                     &
+!                  model_config_rec%e_sn(1),                     &
+!                  model_config_rec%s_we(1),                     &
+!                  model_config_rec%e_we(1),                     &
+!                  fdob,                                         &
+!                  model_config_rec%obs_ipf_init,                &
+!                  ids, ide, jds, jde, kds, kde,                 &
+!                  ims, ime, jms, jme, kms, kme,                 &
+!                  its, ite, jts, jte, kts, kte                  )
+!
+!#endif
+
+   END SUBROUTINE phy_init
+
+!=====================================================================
+   SUBROUTINE landuse_init(lu_index, snowc, albedo, albbck, mavail, emiss, embck, &
+                znt,Z0,thc,xland, xice, xicem, julday, cen_lat, iswater, mminlu,  &
+                ISICE, LUCATS, LUSEAS, ISN,                         &
+                lu_state,                                           &
+                allowed_to_read , usemonalb ,                       &
+                ids, ide, jds, jde, kds, kde,                       &
+                ims, ime, jms, jme, kms, kme,                       &
+                its, ite, jts, jte, kts, kte                       )
+
+   USE module_wrf_error
+   IMPLICIT NONE
+
+!---------------------------------------------------------------------
+   INTEGER , INTENT(IN)           :: ids, ide, jds, jde, kds, kde,   &
+                                     ims, ime, jms, jme, kms, kme,   &
+                                     its, ite, jts, jte, kts, kte
+
+   INTEGER , INTENT(IN)           :: iswater, julday
+   REAL    , INTENT(IN)           :: cen_lat
+   CHARACTER*4, INTENT(IN)        :: mminlu
+   LOGICAL,  INTENT(IN)           :: allowed_to_read , usemonalb
+   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: lu_index, snowc, xice
+   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT  ) :: albedo, albbck, mavail, emiss, &
+                                                               embck,                         &
+                                                               znt, Z0, thc, xland, xicem
+   INTEGER , INTENT(INOUT)  :: ISICE, LUCATS, LUSEAS, ISN
+   REAL    , INTENT(INOUT)  , DIMENSION( : ) :: lu_state
+
+!---------------------------------------------------------------------
+! Local
+   CHARACTER*4 LUTYPE
+   CHARACTER*80 :: message
+   INTEGER  :: landuse_unit, LS, LC, LI, LUN, NSN
+   INTEGER  :: i, j, itf, jtf, is, cats, seas, curs
+   INTEGER , PARAMETER :: OPEN_OK = 0
+   INTEGER :: ierr
+   INTEGER , PARAMETER :: max_cats = 100 , max_seas = 12 
+   REAL    , DIMENSION( max_cats, max_seas ) :: ALBD, SLMO, SFEM, SFZ0, THERIN, SFHC
+   REAL    , DIMENSION( max_cats )     :: SCFX
+! save these fields in case nest moves or has to be reinitialized
+! and this routine is called with allowed_to_read set to false
+! note that by saving these, we're locking in the same landuse for
+! the duration of a run; possible implications for long climate runs
+   LOGICAL :: found_lu, end_of_file
+   LOGICAL, EXTERNAL :: wrf_dm_on_monitor
+
+!---------------------------------------------------------------------
+
+   CALL wrf_debug( 100 , 'top of landuse_init' )
+
+   NSN=-1  ! set this to suppress uninitalized data messages from tools
+
+! recover LU variables from state
+   IF ( 6*(max_cats*max_seas)+1*max_cats .GT. 7501 ) THEN
+      WRITE(message,*)'landuse_init: lu_state overflow. Make Registry dimspec p > ',6*(max_cats*max_seas)+1*max_cats
+   ENDIF
+   curs = 1
+   DO cats = 1, max_cats
+     SCFX(cats) =           lu_state(curs)         ; curs = curs + 1
+     DO seas = 1, max_seas
+       ALBD(cats,seas) =    lu_state(curs)         ; curs = curs + 1
+       SLMO(cats,seas) =    lu_state(curs)         ; curs = curs + 1
+       SFEM(cats,seas) =    lu_state(curs)         ; curs = curs + 1
+       SFZ0(cats,seas) =    lu_state(curs)         ; curs = curs + 1
+       SFHC(cats,seas) =    lu_state(curs)         ; curs = curs + 1
+       THERIN(cats,seas) =  lu_state(curs)         ; curs = curs + 1
+     ENDDO
+   ENDDO
+
+! Determine season (summer=1, winter=2)
+   ISN=1                                                            
+   IF(JULDAY.LT.105.OR.JULDAY.GT.288)ISN=2                         
+   IF(CEN_LAT.LT.0.0)ISN=3-ISN                                   
+
+   FOUND_LU = .TRUE.
+   IF ( allowed_to_read ) THEN
+      landuse_unit = 29
+      IF ( wrf_dm_on_monitor() ) THEN
+        OPEN(landuse_unit, FILE='LANDUSE.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
+        IF ( ierr .NE. OPEN_OK ) THEN
+          WRITE(message,FMT='(A)') &
+          'module_physics_init.F: LANDUSE_INIT: open failure for LANDUSE.TBL'
+          CALL wrf_error_fatal ( message ) 
+        END IF
+      ENDIF
+
+! Read info from file LANDUSE.TBL
+      IF(MMINLU.EQ.'OLD ')THEN
+!       ISWATER=7
+        ISICE=11 
+      ELSE IF(MMINLU.EQ.'USGS')THEN
+!       ISWATER=16
+        ISICE=24
+      ELSE IF(MMINLU.EQ.'SiB ')THEN
+!       ISWATER=15
+        ISICE=16
+      ELSE IF(MMINLU.EQ.'LW12')THEN
+!       ISWATER=15
+        ISICE=3
+      ENDIF
+      PRINT *, 'INPUT LANDUSE = ',MMINLU
+      FOUND_LU = .FALSE.
+      end_of_file = .FALSE.
+!!! BEGINNING OF 1999 LOOP
+ 1999 CONTINUE                                                      
+      IF ( wrf_dm_on_monitor() ) THEN
+        READ (landuse_unit,2000,END=2002)LUTYPE                                
+        GOTO 2003
+ 2002   CONTINUE
+        CALL wrf_message( 'INPUT FILE FOR LANDUSE REACHED END OF FILE' )
+        end_of_file = .TRUE.
+ 2003   CONTINUE
+        IF ( .NOT. end_of_file ) READ (landuse_unit,*)LUCATS,LUSEAS                                    
+        FOUND_LU = LUTYPE.EQ.MMINLU
+      ENDIF
+      CALL wrf_dm_bcast_bytes (end_of_file, LWORDSIZE )
+      IF ( .NOT. end_of_file ) THEN
+        CALL wrf_dm_bcast_string(lutype, 4)
+        CALL wrf_dm_bcast_bytes (lucats,  IWORDSIZE )
+        CALL wrf_dm_bcast_bytes (luseas,  IWORDSIZE )
+        CALL wrf_dm_bcast_bytes (found_lu,  LWORDSIZE )
+ 2000   FORMAT (A4)                                                
+        IF(FOUND_LU)THEN                                  
+          LUN=LUCATS                                             
+          NSN=LUSEAS                                            
+            PRINT *, 'LANDUSE TYPE = ',LUTYPE,' FOUND',        &
+                   LUCATS,' CATEGORIES',LUSEAS,' SEASONS',     &
+                   ' WATER CATEGORY = ',ISWATER,               &
+                   ' SNOW CATEGORY = ',ISICE                
+        ENDIF                                             
+        DO ls=1,luseas                                   
+          if ( wrf_dm_on_monitor() ) then
+            READ (landuse_unit,*)                                   
+          endif
+          DO LC=1,LUCATS                               
+            IF(found_lu)THEN                  
+              IF ( wrf_dm_on_monitor() ) THEN
+                READ (landuse_unit,*)LI,ALBD(LC,LS),SLMO(LC,LS),SFEM(LC,LS),        &       
+                           SFZ0(LC,LS),THERIN(LC,LS),SCFX(LC),SFHC(LC,LS)       
+              ENDIF
+              CALL wrf_dm_bcast_bytes (LI,  IWORDSIZE )
+              IF(LC.NE.LI)CALL wrf_error_fatal ( 'module_start: MISSING LANDUSE UNIT ' )
+            ELSE                                                            
+              IF ( wrf_dm_on_monitor() ) THEN
+                READ (landuse_unit,*)                                                  
+              ENDIF
+            ENDIF                                                         
+          ENDDO                                                          
+        ENDDO                                                           
+        IF(NSN.EQ.1.AND.FOUND_LU) THEN
+           ISN = 1
+        END IF
+        CALL wrf_dm_bcast_bytes (albd,   max_cats * max_seas * RWORDSIZE )
+        CALL wrf_dm_bcast_bytes (slmo,   max_cats * max_seas * RWORDSIZE )
+        CALL wrf_dm_bcast_bytes (sfem,   max_cats * max_seas * RWORDSIZE )
+        CALL wrf_dm_bcast_bytes (sfz0,   max_cats * max_seas * RWORDSIZE )
+        CALL wrf_dm_bcast_bytes (therin, max_cats * max_seas * RWORDSIZE )
+        CALL wrf_dm_bcast_bytes (sfhc,   max_cats * max_seas * RWORDSIZE )
+        CALL wrf_dm_bcast_bytes (scfx,   max_cats *            RWORDSIZE )
+      ENDIF
+
+      IF(.NOT. found_lu .AND. .NOT. end_of_file ) GOTO 1999
+!!! END OF 1999 LOOP
+
+      IF(.NOT. found_lu .OR. end_of_file )THEN                                         
+        CALL wrf_message ( 'LANDUSE IN INPUT FILE DOES NOT MATCH LUTABLE: TABLE NOT USED' )
+      ENDIF                                                     
+    ENDIF  ! allowed_to_read
+
+    IF(FOUND_LU)THEN
+! Set arrays according to lu_index
+      itf = min0(ite, ide-1)
+      jtf = min0(jte, jde-1)
+      IF(usemonalb)CALL wrf_message ( 'Climatological albedo is used instead of table values' )
+      DO j = jts, jtf
+        DO i = its, itf
+          IS=nint(lu_index(i,j))
+          ! only do this check on read-in data
+          IF(IS.LT.0.OR.IS.GT.LUN.AND.allowed_to_read)THEN                                        
+            WRITE ( wrf_err_message , * ) 'ERROR: LANDUSE OUTSIDE RANGE =',IS,' AT ',I,J,' LUN= ',LUN
+            CALL wrf_error_fatal ( TRIM ( wrf_err_message ) )
+          ENDIF                                                            
+!   SET NO-DATA POINTS (IS=0) TO WATER                                    
+          IF(IS.EQ.0)THEN                                                
+            IS=ISWATER                                                  
+          ENDIF                                                        
+          IF(.NOT.usemonalb)ALBBCK(I,J)=ALBD(IS,ISN)/100.                                  
+          ALBEDO(I,J)=ALBBCK(I,J)
+          IF(SNOWC(I,J) .GT. 0.5)ALBEDO(I,J)=ALBBCK(I,J)*(1.+SCFX(IS))
+          THC(I,J)=THERIN(IS,ISN)/100.                               
+          Z0(I,J)=SFZ0(IS,ISN)/100.                                
+          ZNT(I,J)=Z0(I,J)
+          EMBCK(I,J)=SFEM(IS,ISN)                                  
+          EMISS(I,J)=EMBCK(I,J)                                  
+          MAVAIL(I,J)=SLMO(IS,ISN)                                
+          IF(IS.NE.ISWATER)THEN                                  
+            XLAND(I,J)=1.0                                      
+          ELSE                                                 
+            XLAND(I,J)=2.0                                    
+          ENDIF                                              
+!    SET SEA-ICE POINTS TO LAND WITH ICE/SNOW SURFACE PROPERTIES
+          XICEM(I,J)=XICE(I,J)
+          IF(XICE(I,J).GT.0.5)THEN
+            XLAND(I,J)=1.0
+            ALBBCK(I,J)=ALBD(ISICE,ISN)/100.
+            ALBEDO(I,J)=ALBBCK(I,J)
+            THC(I,J)=THERIN(ISICE,ISN)/100.                              
+            Z0(I,J)=SFZ0(ISICE,ISN)/100.                               
+            ZNT(I,J)=Z0(I,J)
+            EMBCK(I,J)=SFEM(ISICE,ISN)                                 
+            EMISS(I,J)=EMBCK(I,J)                                  
+            MAVAIL(I,J)=SLMO(ISICE,ISN)                               
+          ENDIF
+        ENDDO
+      ENDDO
+    ENDIF
+    if ( wrf_dm_on_monitor() .and. allowed_to_read ) then
+      CLOSE (landuse_unit)
+    endif
+    CALL wrf_debug( 100 , 'returning from of landuse_init' )
+
+! restore LU variables from state
+    curs = 1
+    DO cats = 1, max_cats
+      lu_state(curs) = SCFX(cats)                 ; curs = curs + 1
+      DO seas = 1, max_seas
+        lu_state(curs) = ALBD(cats,seas)          ; curs = curs + 1
+        lu_state(curs) = SLMO(cats,seas)          ; curs = curs + 1
+        lu_state(curs) = SFEM(cats,seas)          ; curs = curs + 1
+        lu_state(curs) = SFZ0(cats,seas)          ; curs = curs + 1
+        lu_state(curs) = SFHC(cats,seas)          ; curs = curs + 1
+        lu_state(curs) = THERIN(cats,seas)        ; curs = curs + 1
+      ENDDO
+    ENDDO
+
+    RETURN
+        
+   END SUBROUTINE landuse_init 
+
+!!!!******MARS MARS MARS
+!!!!******MARS MARS MARS
+!!!!******MARS MARS MARS
+
+!!=====================================================================
+!   SUBROUTINE ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW,       & 
+!                      RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT,    &
+!                      levsiz,XLAT,n_ozmixm,                           &
+!                      cldfra_old,                                     & ! Optional
+!                      ozmixm,pin,                                     & ! Optional
+!                      m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,     & ! Optional
+!                      paerlev,n_aerosolc,                             &
+!                      sfull,shalf,pptop,swrad_scat,                  &
+!                      config_flags,restart,                          & 
+!                      allowed_to_read, start_of_simulation,          &
+!                      ids, ide, jds, jde, kds, kde,                  &
+!                      ims, ime, jms, jme, kms, kme,                  &
+!                      its, ite, jts, jte, kts, kte                   )
+!!---------------------------------------------------------------------
+!   USE module_ra_rrtm
+!   USE module_ra_cam
+!   USE module_ra_sw
+!   USE module_ra_gsfcsw
+!   USE module_ra_gfdleta
+!   USE module_ra_hs
+!   USE module_domain
+!!---------------------------------------------------------------------
+!   IMPLICIT NONE
+!!---------------------------------------------------------------------
+!   INTEGER,  INTENT(IN)           :: id
+!   TYPE (grid_config_rec_type)    :: config_flags
+!   LOGICAL , INTENT(IN)           :: restart
+!   LOGICAL,  INTENT(IN)           :: allowed_to_read
+!
+!   INTEGER , INTENT(IN)           :: ids, ide, jds, jde, kds, kde,   &
+!                                     ims, ime, jms, jme, kms, kme,   &
+!                                     its, ite, jts, jte, kts, kte
+!
+!   INTEGER , INTENT(IN)           :: JULDAY,JULYR
+!   REAL ,    INTENT(IN)           :: DT, RADT, cen_lat, GMT, pptop,  &
+!                                     swrad_scat
+!   LOGICAL,  INTENT(IN)           :: start_of_simulation
+!
+!   INTEGER,      INTENT(IN   )    ::   levsiz, n_ozmixm
+!   INTEGER,      INTENT(IN   )    ::   paerlev, n_aerosolc
+!
+!   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN) ::  XLAT
+!
+!   REAL,  DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL,      &
+!          INTENT(INOUT) ::                                  OZMIXM
+!
+!   REAL,  DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT)  :: m_ps_1,m_ps_2
+!   REAL,  DIMENSION(paerlev), OPTIONAL, INTENT(INOUT)  ::         m_hybi
+!   REAL,  DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL,     &
+!          INTENT(INOUT) ::                      aerosolc_1, aerosolc_2
+!
+!   REAL,  DIMENSION(levsiz), OPTIONAL, INTENT(INOUT)  ::          PIN
+!
+!   INTEGER , INTENT(INOUT)        :: STEPRA
+!   INTEGER :: isn
+!
+!   REAL , DIMENSION( kms:kme ) , INTENT(IN) :: sfull, shalf
+!   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::           &
+!                                                           RTHRATEN, &
+!                                                         RTHRATENLW, &
+!                                                         RTHRATENSW, &
+!                                                             CLDFRA
+!
+!   REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
+!                                                         CLDFRA_OLD
+!
+!   REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: EMISS
+!   LOGICAL :: etalw = .false.
+!   LOGICAL :: camlw = .false.
+!   LOGICAL :: etamp = .false.
+!   integer :: month,iday
+!   INTEGER :: i, j, k, itf, jtf, ktf
+!!---------------------------------------------------------------------
+!
+!   jtf=min0(jte,jde-1)
+!   ktf=min0(kte,kde-1)
+!   itf=min0(ite,ide-1)
+!
+!!---------------------------------------------------------------------
+!
+!!-- calculate radiation time step
+!
+!    STEPRA = nint(RADT*60./DT)
+!    STEPRA = max(STEPRA,1)
+!
+!!-- initialization
+!
+!   IF(start_of_simulation)THEN
+!     DO j=jts,jtf
+!     DO k=kts,ktf
+!     DO i=its,itf
+!        RTHRATEN(i,k,j)=0.
+!        RTHRATENLW(i,k,j)=0.
+!        RTHRATENSW(i,k,j)=0.
+!        CLDFRA(i,k,j)=0.
+!     ENDDO
+!     ENDDO
+!     ENDDO
+!
+!     if( present(cldfra_old) ) then
+!        DO j=jts,jtf
+!        DO k=kts,ktf
+!        DO i=its,itf
+!           cldfra_old(i,k,j) = 0.
+!        ENDDO
+!        ENDDO
+!        ENDDO
+!     end if
+!   ENDIF
+!
+!!-- find out which microphysics option is used first
+!
+!   mp_select: SELECT CASE(config_flags%mp_physics)
+!
+!        CASE (ETAMPNEW)
+!             etamp = .true.
+!
+!   END SELECT mp_select
+!
+!!-- chose long wave radiation scheme
+! 
+!   lwrad_select: SELECT CASE(config_flags%ra_lw_physics)
+!
+!        CASE (RRTMSCHEME)
+!             CALL rrtminit(                                 &
+!                           allowed_to_read ,                &
+!                           ids, ide, jds, jde, kds, kde,    &
+!                           ims, ime, jms, jme, kms, kme,    &
+!                           its, ite, jts, jte, kts, kte     )
+!
+!        CASE (CAMLWSCHEME)
+!#ifdef MAC_KLUDGE
+!             CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
+!#endif
+!             IF ( PRESENT( OZMIXM ) .AND. PRESENT( PIN ) .AND. &
+!                  PRESENT(M_PS_1) .AND. PRESENT(M_PS_2) .AND.  &
+!                  PRESENT(M_HYBI) .AND. PRESENT(AEROSOLC_1)    &
+!                  .AND. PRESENT(AEROSOLC_2)) THEN
+!             CALL camradinit(                                  &
+!                         R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
+!                         ozmixm,pin,levsiz,XLAT,n_ozmixm,      &
+!                         m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
+!                         paerlev, n_aerosolc,              &
+!                         ids, ide, jds, jde, kds, kde,     &
+!                         ims, ime, jms, jme, kms, kme,     &
+!                         its, ite, jts, jte, kts, kte      )
+!             ELSE
+!                CALL wrf_error_fatal ( 'arguments not present for calling cam radiation' )
+!             ENDIF
+!
+!             camlw = .true.
+!
+!        CASE (GFDLLWSCHEME)
+!             CALL nl_get_start_month(id,month)
+!             CALL nl_get_start_day(id,iday)
+!             CALL gfdletainit(emiss,sfull,shalf,pptop,      &
+!                              julyr,month,iday,gmt,         &
+!                              config_flags,allowed_to_read, &
+!                              ids, ide, jds, jde, kds, kde, &
+!                              ims, ime, jms, jme, kms, kme, &
+!                              its, ite, jts, jte, kts, kte  )
+!             etalw = .true.
+!        CASE (HELDSUAREZ)
+!             CALL hsinit(RTHRATEN,restart,             &
+!                         ids, ide, jds, jde, kds, kde, &
+!                         ims, ime, jms, jme, kms, kme, &
+!                         its, ite, jts, jte, kts, kte )
+!        CASE DEFAULT
+!
+!   END SELECT lwrad_select
+!!-- initialize short wave radiation scheme
+! 
+!   swrad_select: SELECT CASE(config_flags%ra_sw_physics)
+!
+!        CASE (SWRADSCHEME)
+!             CALL swinit(                                  &
+!                         swrad_scat,                       &
+!                         allowed_to_read ,                 &
+!                         ids, ide, jds, jde, kds, kde,     &
+!                         ims, ime, jms, jme, kms, kme,     &
+!                         its, ite, jts, jte, kts, kte      )
+!
+!        CASE (CAMSWSCHEME)
+!#ifdef MAC_KLUDGE
+!             CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
+!#endif
+!             IF(.not.camlw)THEN
+!             CALL camradinit(                              &
+!                         R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop,               &
+!                         ozmixm,pin,levsiz,XLAT,n_ozmixm,     &
+!                         m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
+!                         paerlev, n_aerosolc,              &
+!                         ids, ide, jds, jde, kds, kde,     &
+!                         ims, ime, jms, jme, kms, kme,     &
+!                         its, ite, jts, jte, kts, kte      )
+!             ENDIF
+!
+!        CASE (GSFCSWSCHEME)
+!             CALL gsfc_swinit(cen_lat, allowed_to_read )
+!
+!        CASE (GFDLSWSCHEME)
+!             IF(.not.etalw)THEN
+!             CALL nl_get_start_month(id,month)
+!             CALL nl_get_start_day(id,iday)
+!             CALL gfdletainit(emiss,sfull,shalf,pptop,      &
+!                              julyr,month,iday,gmt,         &
+!                              config_flags,allowed_to_read, &
+!                              ids, ide, jds, jde, kds, kde, &
+!                              ims, ime, jms, jme, kms, kme, &
+!                              its, ite, jts, jte, kts, kte  )
+!             ENDIF
+!
+!        CASE DEFAULT
+!
+!   END SELECT swrad_select
+!
+!   END SUBROUTINE ra_init
+!
+!   SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN,  &
+!                RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN,             &
+!                config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS,    &
+!                num_soil_layers,TKE_MYJ,EXCH_H,VEGFRA,          &
+!                SNOW,SNOWC, CANWAT,SMSTAV,                      &
+!                SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM,       &
+!                IVGTYP,ISLTYP,SMOIS,SMFR3D,mavail,              &
+!                SNOWH,SH2O,FNDSOILW, FNDSNOWH,                  &
+!#if  ( NMM_CORE == 1 )
+!                Z0,XLAND,XICE,                                  &
+!#else
+!                ZNT,XLAND,XICE,                                 &
+!#endif
+!                SFCEVP,GRDFLX,                                  &
+!                allowed_to_read,                                &
+!                start_of_simulation,                            &
+!!                num_roof_layers,num_wall_layers,num_road_layers,& !Optional urban
+!                DZR, DZB, DZG,                                  & !Optional urban
+!                TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,   & !Optional urban
+!                XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,    & !Optional urban
+!                TRL_URB3D, TBL_URB3D, TGL_URB3D,                & !Optional urban
+!                SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D,             & !Optional urban
+!                TS_URB2D, FRC_URB2D, UTYPE_URB2D,UCMCALL,       & !Optional urban
+!                ids, ide, jds, jde, kds, kde,                   &
+!                ims, ime, jms, jme, kms, kme,                   &
+!                its, ite, jts, jte, kts, kte,                   &
+!                oml_hml0, omlcall,                              & !Optional oml
+!                TML,T0ML,HML,H0ML,HUML,HVML                     ) !Optional oml
+!!--------------------------------------------------------------------
+!   USE module_sf_sfclay
+!   USE module_sf_slab
+!   USE module_sf_pxsfclay
+!   USE module_bl_ysu
+!   USE module_bl_mrf
+!   USE module_bl_gfs
+!   USE module_bl_acm
+!   USE module_sf_myjsfc
+!   USE module_sf_noahdrv
+!   USE module_sf_urban
+!   USE module_sf_ruclsm
+!   USE module_sf_pxlsm
+!   USE module_bl_myjpbl
+!#if (NMM_CORE == 1)
+!   USE module_sf_lsm_nmm
+!#endif
+!!--------------------------------------------------------------------
+!   IMPLICIT NONE
+!!--------------------------------------------------------------------
+!   TYPE (grid_config_rec_type) ::     config_flags
+!   LOGICAL , INTENT(IN)        :: restart
+!   LOGICAL, INTENT(IN)         ::   FNDSOILW, FNDSNOWH
+!
+!   INTEGER , INTENT(IN)        ::     ids, ide, jds, jde, kds, kde, &
+!                                      ims, ime, jms, jme, kms, kme, &
+!                                      its, ite, jts, jte, kts, kte
+!   INTEGER , INTENT(IN)        ::     num_soil_layers
+!   INTEGER , INTENT(IN)        ::     UCMCALL 
+!
+!   REAL ,    INTENT(IN)        ::     DT, BLDT
+!   INTEGER , INTENT(INOUT)     ::     STEPBL
+!
+!   REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),    &
+!             INTENT(OUT) :: SMFR3D
+!
+!   REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
+!                   INTENT(INOUT) :: SMOIS,SH2O,TSLB 
+!
+!   REAL,    DIMENSION( ims:ime, jms:jme )                     , &
+!            INTENT(INOUT)    ::                           SNOW, &
+!                                                         SNOWH, &
+!                                                         SNOWC, &
+!                                                        CANWAT, &
+!                                                        MAVAIL, &
+!                                                        SMSTAV, &
+!                                                        SMSTOT, &
+!                                                     SFCRUNOFF, &
+!                                                      UDRUNOFF, &
+!                                                        ACSNOW, &
+!                                                        VEGFRA, &
+!                                                        ACSNOM, &
+!                                                        SFCEVP, &
+!                                                        GRDFLX, &
+!                                                           UST, &
+!#if ( NMM_CORE == 1 )
+!                                                            Z0, &
+!#else
+!                                                           ZNT, &
+!#endif
+!                                                         XLAND, &
+!                                                         XICE
+!
+!   INTEGER, DIMENSION( ims:ime, jms:jme )                     , &
+!            INTENT(INOUT)    ::                         IVGTYP, &
+!                                                        ISLTYP, &
+!                                                        LOWLYR
+!
+!
+!   REAL,     DIMENSION(1:num_soil_layers), INTENT(INOUT)  ::  ZS,DZS
+!
+!   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::       &
+!                                                           RUBLTEN, &
+!                                                           RVBLTEN, &
+! 						          EXCH_H,   &
+!                                                          RTHBLTEN, &
+!                                                          RQVBLTEN, &
+!                                                          RQCBLTEN, &
+!                                                          RQIBLTEN, &
+!                                                          TKE_MYJ
+!
+!   REAL,  DIMENSION( ims:ime , jms:jme ) , INTENT(IN) ::     TSK
+!   REAL,  DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::  TMN
+!   LOGICAL,  INTENT(IN)           :: allowed_to_read
+!   INTEGER :: isn, isfc
+!
+!!URBAN
+!!   REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR  !Optional urban
+!!   REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB  !Optional urban
+!!   REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG  !Optional urban
+!    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR  !Optional urban
+!    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB  !Optional urban
+!    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG  !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !Optional urban
+!    INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !Optional urban
+!!    REAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
+!!    REAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
+!!    REAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
+!    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
+!
+!! Optional OML variables
+!   REAL,  DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
+!                                        TML,T0ML,HML,H0ML,HUML,HVML
+!   INTEGER,  OPTIONAL,  INTENT(IN) :: omlcall
+!   REAL,  OPTIONAL,  INTENT(IN) :: oml_hml0
+!   LOGICAL,  INTENT(IN) :: start_of_simulation
+!
+!!-- calculate pbl time step
+!
+!   STEPBL = nint(BLDT*60./DT)
+!   STEPBL = max(STEPBL,1)
+!
+!
+!!-- initialize surface layer scheme
+!
+!   sfclay_select: SELECT CASE(config_flags%sf_sfclay_physics)
+!
+!      CASE (SFCLAYSCHEME)
+!           CALL sfclayinit( allowed_to_read )
+!           isfc = 1
+!      CASE (PXSFCSCHEME)
+!           CALL pxsfclayinit( allowed_to_read )
+!           isfc = 1
+!      CASE (MYJSFCSCHEME)
+!           CALL myjsfcinit(LOWLYR,UST,                         &
+!#if ( NMM_CORE == 1 )
+!                                      Z0,                      &
+!#else
+!                                      ZNT,                     &
+!#endif
+!                                          XLAND,XICE,          &
+!                         IVGTYP,restart,                       &
+!                         allowed_to_read ,                     &
+!                         ids, ide, jds, jde, kds, kde,         &
+!                         ims, ime, jms, jme, kms, kme,         &
+!                         its, ite, jts, jte, kts, kte          )
+!           isfc = 2
+!
+!      CASE (GFSSFCSCHEME)
+!           CALL myjsfcinit(LOWLYR,UST,                         &
+!#if ( NMM_CORE == 1 )
+!                                      Z0,                      &
+!#else
+!                                      ZNT,                     &
+!#endif
+!                                          XLAND,XICE,          &
+!                         IVGTYP,restart,                       &
+!                         allowed_to_read ,                     &
+!                         ids, ide, jds, jde, kds, kde,         &
+!                         ims, ime, jms, jme, kms, kme,         &
+!                         its, ite, jts, jte, kts, kte          )
+!           isfc = 1
+!
+!      CASE DEFAULT
+!
+!   END SELECT sfclay_select
+!
+!
+!!-- initialize surface scheme
+!
+!   sfc_select: SELECT CASE(config_flags%sf_surface_physics)
+!
+!      CASE (SLABSCHEME)
+!
+!           CALL slabinit(TSK,TMN,                              &
+!                         TSLB,ZS,DZS,num_soil_layers,          & 
+!                         allowed_to_read ,start_of_simulation ,&
+!                         ids, ide, jds, jde, kds, kde,         &
+!                         ims, ime, jms, jme, kms, kme,         &
+!                         its, ite, jts, jte, kts, kte,         &
+!                         oml_hml0, omlcall,                    &
+!                         tml, t0ml, hml, h0ml, huml, hvml      )
+!
+!#if (NMM_CORE == 1)
+!      CASE (NMMLSMSCHEME)
+!           CALL nmmlsminit(isn,XICE,VEGFRA,SNOW,SNOWC, CANWAT,SMSTAV, &
+!                     SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,     &
+!                     ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,DZS,SFCEVP,   &
+!                     TMN,                                          &
+!                     num_soil_layers,                              &
+!                     allowed_to_read ,                             &
+!                     ids,ide, jds,jde, kds,kde,                    &
+!                     ims,ime, jms,jme, kms,kme,                    &
+!                     its,ite, jts,jte, kts,kte                     )
+!#endif
+!      CASE (LSMSCHEME)
+!          CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV,  &
+!                     SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,        &
+!                     ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
+!                     FNDSOILW, FNDSNOWH,                       &
+!                     num_soil_layers, restart,                 &
+!                     allowed_to_read ,                         &
+!                     ids,ide, jds,jde, kds,kde,                &
+!                     ims,ime, jms,jme, kms,kme,                &
+!                     its,ite, jts,jte, kts,kte                 )
+!
+!!URBAN
+!          IF(UCMCALL.eq.1) THEN
+!
+!             IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN
+!
+!                CALL urban_param_init(DZR,DZB,DZG,num_soil_layers                    & !urban
+!                                )
+!!                                num_roof_layers,num_wall_layers,road_soil_layers)   !urban
+!                CALL urban_var_init(TSK,TSLB,TMN,IVGTYP,                             & !urban
+!                              ims,ime,jms,jme,num_soil_layers,                 & !urban
+!!                              num_roof_layers,num_wall_layers,num_road_layers, & !urban
+!                              restart,                                         & !urban
+!                              XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,     & !urban
+!                              TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,    & !urban
+!                              TRL_URB3D,TBL_URB3D,TGL_URB3D,                   & !urban
+!                              SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, TS_URB2D,    & ! urban
+!                              FRC_URB2D, UTYPE_URB2D)                            !urban
+!             ELSE
+!                CALL wrf_error_fatal ( 'arguments not present for calling urban model' )
+!             ENDIF
+!          ENDIF
+!
+!
+!      CASE (RUCLSMSCHEME)
+!!          if(isfc .ne. 2)CALL wrf_error_fatal &
+!!           ( 'module_physics_init: use myjsfc and myjpbl scheme for this lsm option' )
+!           CALL lsmrucinit( SMFR3D,TSLB,SMOIS,ISLTYP,mavail,       &
+!                     num_soil_layers, restart,                     &
+!                     allowed_to_read ,                             &
+!                     ids,ide, jds,jde, kds,kde,                    &
+!                     ims,ime, jms,jme, kms,kme,                    &
+!                     its,ite, jts,jte, kts,kte                     )
+!
+!      CASE (PXLSMSCHEME)
+!          CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV,  &
+!                     SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,        &
+!                     ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
+!                     FNDSOILW, FNDSNOWH,                       &
+!                     num_soil_layers, restart,                 &
+!                     allowed_to_read ,                         &
+!                     ids,ide, jds,jde, kds,kde,                &
+!                     ims,ime, jms,jme, kms,kme,                &
+!                     its,ite, jts,jte, kts,kte                 )
+!
+!      CASE DEFAULT
+!
+!   END SELECT sfc_select
+!
+!
+!!-- initialize pbl scheme
+!
+!   pbl_select: SELECT CASE(config_flags%bl_pbl_physics)
+!
+!      CASE (YSUSCHEME)
+!           if(isfc .ne. 1)CALL wrf_error_fatal &
+!            ( 'module_physics_init: use sfclay scheme for this pbl option' )
+!           CALL ysuinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
+!                        RQCBLTEN,RQIBLTEN,P_QI,               &
+!                        PARAM_FIRST_SCALAR,                   &
+!                        restart,                              &
+!                        allowed_to_read ,                     &
+!                        ids, ide, jds, jde, kds, kde,         &
+!                        ims, ime, jms, jme, kms, kme,         &
+!                        its, ite, jts, jte, kts, kte          )
+!      CASE (MRFSCHEME)
+!           if(isfc .ne. 1)CALL wrf_error_fatal &
+!            ( 'module_physics_init: use sfclay scheme for this pbl option' )
+!           CALL mrfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
+!                        RQCBLTEN,RQIBLTEN,P_QI,               &
+!                        PARAM_FIRST_SCALAR,                   &
+!                        restart,                              &
+!                        allowed_to_read ,                     &
+!                        ids, ide, jds, jde, kds, kde,         &
+!                        ims, ime, jms, jme, kms, kme,         &
+!                        its, ite, jts, jte, kts, kte          )
+!      CASE (ACMPBLSCHEME)
+!           if(isfc .ne. 1)CALL wrf_error_fatal &
+!            ( 'module_physics_init: use sfclay scheme for this pbl option' )
+!           CALL acminit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
+!                        RQCBLTEN,RQIBLTEN,P_QI,               &
+!                        PARAM_FIRST_SCALAR,                   &
+!                        restart,                              &
+!                        allowed_to_read ,                     &
+!                        ids, ide, jds, jde, kds, kde,         &
+!                        ims, ime, jms, jme, kms, kme,         &
+!                        its, ite, jts, jte, kts, kte          )
+!      CASE (GFSSCHEME)
+!           if(isfc .ne. 1)CALL wrf_error_fatal &
+!            ( 'module_physics_init: use sfclay scheme for this pbl option' )
+!           CALL gfsinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
+!                        RQCBLTEN,RQIBLTEN,P_QI,               &
+!                        PARAM_FIRST_SCALAR,                   &
+!                        restart,                              &
+!                        allowed_to_read ,                     &
+!                        ids, ide, jds, jde, kds, kde,         &
+!                        ims, ime, jms, jme, kms, kme,         &
+!                        its, ite, jts, jte, kts, kte          )
+!      CASE (MYJPBLSCHEME)
+!           if(isfc .ne. 2)CALL wrf_error_fatal &
+!            ( 'module_physics_init: use myjsfc scheme for this pbl option' )
+!           CALL myjpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
+!                        TKE_MYJ,EXCH_H,restart,               &
+!                        allowed_to_read ,                     &
+!                        ids, ide, jds, jde, kds, kde,         &
+!                        ims, ime, jms, jme, kms, kme,         &
+!                        its, ite, jts, jte, kts, kte          )
+!      CASE DEFAULT
+!
+!   END SELECT pbl_select
+!
+!   END SUBROUTINE bl_init
+!
+!!==================================================================
+!   SUBROUTINE cu_init(STEPCU,CUDT,DT,RTHCUTEN,RQVCUTEN,RQRCUTEN,  &
+!                      RQCCUTEN,RQSCUTEN,RQICUTEN,NCA,RAINC,       &
+!                      RAINCV,W0AVG,config_flags,restart,          &
+!                      CLDEFI,LOWLYR,MASS_FLUX,                    &
+!                      RTHFTEN, RQVFTEN,                           &
+!                      APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
+!                      APR_CAPMA,APR_CAPME,APR_CAPMI,              &
+!                      cugd_tten,cugd_ttens,cugd_qvten,            &
+!                      cugd_qvtens,cugd_qcten,                     &
+!                      allowed_to_read, start_of_simulation,       &
+!                      ids, ide, jds, jde, kds, kde,               &
+!                      ims, ime, jms, jme, kms, kme,               &
+!                      its, ite, jts, jte, kts, kte                )
+!!------------------------------------------------------------------
+!   USE module_cu_kf
+!   USE module_cu_kfeta
+!   USE MODULE_CU_BMJ
+!   USE module_cu_gd,  ONLY : GDINIT
+!   USE module_cu_g3,  ONLY : G3INIT
+!   USE module_cu_sas
+!!------------------------------------------------------------------
+!   IMPLICIT NONE
+!!------------------------------------------------------------------
+!   TYPE (grid_config_rec_type) ::     config_flags
+!   LOGICAL , INTENT(IN)        :: restart
+!
+!
+!   INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,   &
+!                                  ims, ime, jms, jme, kms, kme,   &
+!                                  its, ite, jts, jte, kts, kte
+!
+!   REAL ,    INTENT(IN)        :: DT, CUDT
+!   LOGICAL , INTENT(IN)        :: start_of_simulation
+!   LOGICAL , INTENT(IN)        :: allowed_to_read
+!   INTEGER , INTENT(INOUT)     :: STEPCU
+!
+!   REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) ::    &
+!            RTHCUTEN, RQVCUTEN, RQCCUTEN, RQRCUTEN, RQICUTEN, RQSCUTEN
+!   REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
+!                        cugd_tten,cugd_ttens,cugd_qvten,            &
+!                        cugd_qvtens,cugd_qcten
+!
+!   REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
+!
+!   REAL,    DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
+!            RTHFTEN, RQVFTEN
+!
+!   REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
+!
+!   REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI
+!
+!   REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
+!
+!   REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: MASS_FLUX,   &
+!                                   APR_GR,APR_W,APR_MC,APR_ST,APR_AS,    &
+!                                   APR_CAPMA,APR_CAPME,APR_CAPMI
+!
+!   INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: LOWLYR
+!
+!! LOCAL VAR
+!   
+!  INTEGER :: i,j,itf,jtf
+!
+!!--------------------------------------------------------------------
+!
+!!-- calculate cumulus parameterization time step
+!
+!   itf=min0(ite,ide-1)
+!   jtf=min0(jte,jde-1)
+!!
+!   STEPCU = nint(CUDT*60./DT)
+!   STEPCU = max(STEPCU,1)
+!
+!!-- initialization
+!
+!   IF(start_of_simulation)THEN
+!     DO j=jts,jtf
+!     DO i=its,itf
+!        RAINC(i,j)=0.
+!        RAINCV(i,j)=0.
+!     ENDDO
+!     ENDDO
+!   ENDIF
+!
+!   cps_select: SELECT CASE(config_flags%cu_physics)
+!
+!     CASE (KFSCHEME)
+!          CALL kfinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,        &
+!                      RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS,      &
+!                      PARAM_FIRST_SCALAR,restart,                 &
+!                      allowed_to_read ,                           &
+!                      ids, ide, jds, jde, kds, kde,               &
+!                      ims, ime, jms, jme, kms, kme,               &
+!                      its, ite, jts, jte, kts, kte                )
+!
+!     CASE (BMJSCHEME)
+!          CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,       &
+!                      CLDEFI,LOWLYR,cp,r_d,restart,               &
+!                      allowed_to_read ,                           &
+!                      ids, ide, jds, jde, kds, kde,               &
+!                      ims, ime, jms, jme, kms, kme,               &
+!                      its, ite, jts, jte, kts, kte                )
+!
+!     CASE (KFETASCHEME)
+!          CALL kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,   &
+!                      RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS,      &
+!                      SVP1,SVP2,SVP3,SVPT0,                       &
+!                      PARAM_FIRST_SCALAR,restart,                 &
+!                      allowed_to_read ,                           &
+!                      ids, ide, jds, jde, kds, kde,               &
+!                      ims, ime, jms, jme, kms, kme,               &
+!                      its, ite, jts, jte, kts, kte                )
+!     CASE (GDSCHEME)
+!          CALL gdinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,        &
+!                      MASS_FLUX,cp,restart,                       &
+!                      P_QC,P_QI,PARAM_FIRST_SCALAR,               &
+!                      RTHFTEN, RQVFTEN,                           &
+!                      APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
+!                      APR_CAPMA,APR_CAPME,APR_CAPMI,              &
+!                      allowed_to_read ,                           &
+!                      ids, ide, jds, jde, kds, kde,               &
+!                      ims, ime, jms, jme, kms, kme,               &
+!                      its, ite, jts, jte, kts, kte                )
+!#if ( EM_CORE == 1 )
+!     CASE (G3SCHEME)
+!          CALL g3init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,        &
+!                      MASS_FLUX,cp,restart,                       &
+!                      P_QC,P_QI,PARAM_FIRST_SCALAR,               &
+!                      RTHFTEN, RQVFTEN,                           &
+!                      APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
+!                      APR_CAPMA,APR_CAPME,APR_CAPMI,              &
+!                      cugd_tten,cugd_ttens,cugd_qvten,            &
+!                      cugd_qvtens,cugd_qcten,                     &
+!                      allowed_to_read ,                           &
+!                      ids, ide, jds, jde, kds, kde,               &
+!                      ims, ime, jms, jme, kms, kme,               &
+!                      its, ite, jts, jte, kts, kte                )
+!#endif
+!     CASE (SASSCHEME)
+!          CALL sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,       &
+!                      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 DEFAULT
+!
+!   END SELECT cps_select
+!
+!   END SUBROUTINE cu_init
+!
+!!==================================================================
+!   SUBROUTINE mp_init(RAINNC,config_flags,restart,warm_rain,      &
+!                      adv_moist_cond,                             &
+!                      MPDT, DT, DX, DY, LOWLYR,                   & ! for eta mp
+!                      F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,           & ! for eta mp
+!                      mp_restart_state,tbpvs_state,tbpvs0_state,   & ! eta mp
+!                      allowed_to_read, start_of_simulation,       &
+!                      ids, ide, jds, jde, kds, kde,               &
+!                      ims, ime, jms, jme, kms, kme,               &
+!                      its, ite, jts, jte, kts, kte                )
+!!------------------------------------------------------------------
+!   USE module_mp_wsm3
+!   USE module_mp_wsm5
+!   USE module_mp_wsm6
+!   USE module_mp_etanew
+!   USE module_mp_thompson
+!   USE module_mp_morr_two_moment  
+!!------------------------------------------------------------------
+!   IMPLICIT NONE
+!!------------------------------------------------------------------
+!! Arguments
+!   TYPE (grid_config_rec_type) ::     config_flags
+!   LOGICAL , INTENT(IN)        :: restart
+!   LOGICAL , INTENT(OUT)       :: warm_rain,adv_moist_cond
+!   REAL    , INTENT(IN)        :: MPDT, DT, DX, DY
+!   LOGICAL , INTENT(IN)        :: start_of_simulation
+!
+!   INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,   &
+!                                  ims, ime, jms, jme, kms, kme,   &
+!                                  its, ite, jts, jte, kts, kte
+!
+!   INTEGER , DIMENSION( ims:ime , jms:jme ) ,INTENT(INOUT)  :: LOWLYR
+!   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: RAINNC
+!   REAL,     DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: &
+!                                  F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
+!   REAL , DIMENSION(:) ,INTENT(INOUT)  :: mp_restart_state,tbpvs_state,tbpvs0_state
+!   LOGICAL , INTENT(IN)  :: allowed_to_read
+!
+!! Local
+!   INTEGER :: i, j, itf, jtf
+!
+!   warm_rain = .false.
+!   adv_moist_cond = .true.
+!   itf=min0(ite,ide-1)
+!   jtf=min0(jte,jde-1)
+!
+!   IF(start_of_simulation)THEN
+!     DO j=jts,jtf
+!     DO i=its,itf
+!        RAINNC(i,j) = 0.
+!     ENDDO
+!     ENDDO
+!   ENDIF
+!
+!   mp_select: SELECT CASE(config_flags%mp_physics)
+!
+!     CASE (KESSLERSCHEME)
+!          warm_rain = .true.
+!     CASE (WSM3SCHEME)
+!          CALL wsm3init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
+!     CASE (WSM5SCHEME)
+!          CALL wsm5init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
+!     CASE (WSM6SCHEME)
+!          CALL wsm6init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
+!     CASE (ETAMPNEW)
+!         adv_moist_cond = .false.
+!         CALL etanewinit (MPDT,DT,DX,DY,LOWLYR,restart,           &
+!                          F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,       &
+!                          mp_restart_state,tbpvs_state,tbpvs0_state,&
+!                          allowed_to_read,                        &
+!                          ids, ide, jds, jde, kds, kde,           &
+!                          ims, ime, jms, jme, kms, kme,           &
+!                          its, ite, jts, jte, kts, kte            )
+!     CASE (THOMPSON)
+!         CALL thompson_init
+!     CASE (MORR_TWO_MOMENT)          
+!         CALL morr_two_moment_init  
+!
+!     CASE DEFAULT
+!
+!   END SELECT mp_select
+!
+!   END SUBROUTINE mp_init
+!
+!#if  ( EM_CORE == 1 )
+!!==========================================================
+!   SUBROUTINE fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN,    &
+!                RTHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN,               &
+!                config_flags,restart,                           &
+!                allowed_to_read ,                               &
+!                ids, ide, jds, jde, kds, kde,                   &
+!                ims, ime, jms, jme, kms, kme,                   &
+!                its, ite, jts, jte, kts, kte                    )
+!
+!
+!!--------------------------------------------------------------------
+!   USE module_fdda_psufddagd
+!!--------------------------------------------------------------------
+!   IMPLICIT NONE
+!!--------------------------------------------------------------------
+!   TYPE (grid_config_rec_type) ::     config_flags
+!   LOGICAL , INTENT(IN)        :: restart
+!
+!   INTEGER , INTENT(IN)        ::     ids, ide, jds, jde, kds, kde, &
+!                                      ims, ime, jms, jme, kms, kme, &
+!                                      its, ite, jts, jte, kts, kte
+!
+!   REAL ,    INTENT(IN)        ::     DT, FGDT
+!   INTEGER , INTENT(IN)        ::     id
+!   INTEGER , INTENT(INOUT)     ::     STEPFG
+!   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::       &
+!                                                           RUNDGDTEN, &
+!                                                           RVNDGDTEN, &
+!                                                          RTHNDGDTEN, &
+!                                                          RQVNDGDTEN
+!   REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: RMUNDGDTEN
+!
+!   LOGICAL,  INTENT(IN)           :: allowed_to_read
+!!--------------------------------------------------------------------
+!
+!!-- calculate pbl time step
+!
+!   STEPFG = nint(FGDT*60./DT)
+!   STEPFG = max(STEPFG,1)
+!
+!
+!!-- initialize fdda scheme
+!
+!   fdda_select: SELECT CASE(config_flags%grid_fdda)
+!
+!      CASE (PSUFDDAGD)
+!           CALL fddagdinit(id,rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten,&
+!               config_flags%run_hours, &
+!               config_flags%if_no_pbl_nudging_uv, &
+!               config_flags%if_no_pbl_nudging_t, &
+!               config_flags%if_no_pbl_nudging_q, &
+!               config_flags%if_zfac_uv, &
+!               config_flags%k_zfac_uv, &
+!               config_flags%if_zfac_t, &
+!               config_flags%k_zfac_t, &
+!               config_flags%if_zfac_q, &
+!               config_flags%k_zfac_q, &
+!               config_flags%guv, &
+!               config_flags%gt, config_flags%gq, &
+!               config_flags%if_ramping, config_flags%dtramp_min, &
+!               config_flags%gfdda_end_h, &
+!                      restart, allowed_to_read,                    &
+!                      ids, ide, jds, jde, kds, kde,                &
+!                      ims, ime, jms, jme, kms, kme,                &
+!                      its, ite, jts, jte, kts, kte                 )
+!      CASE DEFAULT
+!
+!   END SELECT fdda_select
+!
+!   END SUBROUTINE fg_init
+!
+!!-------------------------------------------------------------------
+!   SUBROUTINE fdob_init(obs_nudge_opt, maxdom, inest, parid,       &
+!                        idynin, dtramp, fdaend, restart,           &
+!                        obs_twindo_cg, obs_twindo, itimestep,      &
+!                        cen_lat, cen_lon, stand_lon,               &
+!                        true_lat1, true_lat2, map_proj,            &
+!                        xlat, xlong,                               &
+!                        s_sn_cg, e_sn_cg, s_we_cg, e_we_cg,        &
+!                        fdob, ipf_init,                            &
+!                        ids, ide, jds, jde, kds, kde,              &
+!                        ims, ime, jms, jme, kms, kme,              &
+!                        its, ite, jts, jte, kts, kte               )
+!
+!!--------------------------------------------------------------------
+!   USE module_domain
+!   USE module_fddaobs_rtfdda
+!   USE module_llxy
+!!--------------------------------------------------------------------
+!   IMPLICIT NONE
+!!--------------------------------------------------------------------
+!   INTEGER , INTENT(IN)    :: maxdom
+!   INTEGER , INTENT(IN)    :: obs_nudge_opt(maxdom)
+!   INTEGER , INTENT(IN)    :: ids,ide, jds,jde, kds,kde,           &
+!                              ims,ime, jms,jme, kms,kme,           &
+!                              its,ite, jts,jte, kts,kte
+!   INTEGER , INTENT(IN)    :: inest
+!   INTEGER , INTENT(IN)    :: parid(maxdom)
+!   INTEGER , INTENT(IN)    :: idynin          ! flag for dynamic initialization
+!   REAL    , INTENT(IN)    :: dtramp          ! time period for ramping (idynin)
+!   REAL    , INTENT(IN)    :: fdaend(maxdom)  ! nudging end time for domain (min)
+!   LOGICAL , INTENT(IN)    :: restart
+!   REAL    , INTENT(IN)    :: obs_twindo_cg   ! twindo on course grid
+!   REAL    , INTENT(IN)    :: obs_twindo
+!   INTEGER , INTENT(IN)    :: itimestep
+!   REAL    , INTENT(IN)    :: cen_lat      ! domain center latitude
+!   REAL    , INTENT(IN)    :: cen_lon      ! domain center longitude
+!   REAL    , INTENT(IN)    :: stand_lon    ! domain longitude
+!   REAL    , INTENT(IN)    :: true_lat1    ! domain standard parallel 
+!   REAL    , INTENT(IN)    :: true_lat2    ! domain second standard parallel
+!   INTEGER , INTENT(IN)    :: map_proj     ! map projection
+!   REAL, DIMENSION( ims:ime, jms:jme ),                            &
+!         INTENT(IN )       :: xlat, xlong  ! lat/long locations on mass point grid
+!   INTEGER, intent(in)     :: s_sn_cg      ! starting north-south coarse-grid index
+!   INTEGER, intent(in)     :: e_sn_cg      ! ending   north-south coarse-grid index
+!   INTEGER, intent(in)     :: s_we_cg      ! starting west-east   coarse-grid index
+!   INTEGER, intent(in)     :: e_we_cg      ! ending   west-east   coarse-grid index
+!
+!   TYPE(fdob_type), INTENT(INOUT)  :: fdob
+!
+!   INTEGER                 :: e_sn         ! ending   north-south grid index
+!   LOGICAL                 :: ipf_init     ! print warnings detected at initialzn
+!!--------------------------------------------------------------------
+!!-- initialize fdda obs-nudging scheme
+!
+!      IF ( obs_nudge_opt(inest) .eq. 0 ) RETURN
+!
+!      e_sn = jde
+!      CALL fddaobs_init(obs_nudge_opt, maxdom, inest, parid,       &  
+!                        idynin, dtramp, fdaend, restart,           &
+!                        obs_twindo_cg,                             &
+!                        obs_twindo, itimestep,                     &
+!                        cen_lat, cen_lon, stand_lon,               &
+!                        true_lat1, true_lat2, map_proj,            &
+!                        xlat, xlong,                               &
+!                        e_sn, s_sn_cg, e_sn_cg, s_we_cg, e_we_cg,  &
+!                        fdob, ipf_init,                            &
+!                        ids,ide, jds,jde, kds,kde,                 &  
+!                        ims,ime, jms,jme, kms,kme,                 &  
+!                        its,ite, jts,jte, kts,kte)
+!
+!   END SUBROUTINE fdob_init
+!#endif
+
+!--------------------------------------------------------------------
+   SUBROUTINE z2sigma(zf,zh,sf,sh,p_top,pptop,config_flags, &
+                allowed_to_read , &
+                kds,kde,kms,kme,kts,kte)
+   IMPLICIT NONE
+! Arguments
+   INTEGER, INTENT(IN) :: kds,kde,kms,kme,kts,kte
+   REAL , DIMENSION( kms:kme ), INTENT(IN) :: zf,zh
+   REAL , DIMENSION( kms:kme ), INTENT(OUT):: sf,sh
+   REAL , INTENT(IN) :: p_top
+   REAL , INTENT(OUT) :: pptop
+   TYPE (grid_config_rec_type)              :: config_flags
+   LOGICAL , INTENT(IN) :: allowed_to_read
+! Local
+   REAL R, G, TS, GAMMA, PS, ZTROP, TSTRAT, PTROP, Z, T, P, ZTOP, PTOP
+   INTEGER K
+
+   IF(zf(kde/2) .GT. 1.0)THEN
+! Height levels assumed (zeta coordinate)
+! Convert to sigma using standard atmosphere for pressure-height relation
+! constants for standard atmosphere definition
+      r=287.05
+      g=9.80665
+      ts=288.15
+      gamma=-6.5/1000.
+      ps=1013.25
+      ztrop=11000.
+      tstrat=ts+gamma*ztrop
+      ptrop=ps*(tstrat/ts)**(-g/(gamma*r))
+
+      do k=kde,kds,-1
+! full levels
+        z=zf(k)
+        if(z.le.ztrop)then
+          t=ts+gamma*z
+          p=ps*(t/ts)**(-g/(gamma*r))
+        else
+          t=tstrat
+          p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
+        endif
+        if(k.eq.kde)then
+          ztop=zf(k)
+          ptop=p
+        endif
+        sf(k)=(p-ptop)/(ps-ptop)
+! half levels
+        if(k.ne.kds)then
+        z=0.5*(zf(k)+zf(k-1))
+        if(z.le.ztrop)then
+          t=ts+gamma*z
+          p=ps*(t/ts)**(-g/(gamma*r))
+        else
+          t=tstrat
+          p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
+        endif
+        sh(k-1)=(p-ptop)/(ps-ptop)
+        endif
+      enddo
+      pptop=ptop/10.
+   ELSE
+!  Levels are already sigma/eta
+      do k=kde,kds,-1
+!        sf(k)=zf(kde-k+kds)
+!        if(k .ne. kde)sh(k)=zh(kde-1-k+kds)
+         sf(k)=zf(k)
+         if(k .ne. kde)sh(k)=zh(k)
+      enddo
+      pptop=p_top/1000.
+
+   ENDIF
+
+   END SUBROUTINE z2sigma
+
+END MODULE module_physics_init
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/extract_turb
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/extract_turb	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/extract_turb	(revision 142)
@@ -0,0 +1,24 @@
+#! /bin/bash
+
+
+ycoord=20
+
+
+#echo coord
+#ncrcat -O -v HGT,XLAT,XLONG 	-d Time,0,0,1 		     ../wrfout*   coord.nc
+
+echo v
+ncrcat -O -v V     -d south_north_stag,${ycoord},${ycoord},1 ./wrfout*   v${ycoord}.nc
+
+echo u
+ncrcat -O -v U     -d south_north,${ycoord},${ycoord},1      ./wrfout*   u${ycoord}.nc
+echo w
+ncrcat -O -v W     -d south_north,${ycoord},${ycoord},1      ./wrfout*   w${ycoord}.nc
+echo p
+ncrcat -O -v PTOT  -d south_north,${ycoord},${ycoord},1      ./wrfout*   p${ycoord}.nc
+echo ph
+ncrcat -O -v PHTOT -d south_north,${ycoord},${ycoord},1      ./wrfout*  ph${ycoord}.nc
+echo t
+ncrcat -O -v T     -d south_north,${ycoord},${ycoord},1      ./wrfout*   t${ycoord}.nc
+
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/extract_turb2
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/extract_turb2	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/extract_turb2	(revision 142)
@@ -0,0 +1,24 @@
+#! /bin/bash
+
+
+#ycoord=20
+#ycoord=30
+
+#echo coord
+#ncrcat -O -v HGT,XLAT,XLONG 	-d Time,0,0,1 		     ../wrfout*   coord.nc
+
+echo v
+#ncrcat -O -v V     ./wrfout*   v${ycoord}.nc
+
+echo u
+#ncrcat -O -v U     ./wrfout*   u${ycoord}.nc
+echo w
+#ncrcat -O -v W     ./wrfout*   w${ycoord}.nc
+echo p
+ncrcat -O -v PTOT  ./wrfout*   p${ycoord}.nc
+echo ph
+ncrcat -O -v PHTOT ./wrfout*  ph${ycoord}.nc
+echo t
+ncrcat -O -v T     ./wrfout*   t${ycoord}.nc
+
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/getcdf.pro
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/getcdf.pro	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/getcdf.pro	(revision 142)
@@ -0,0 +1,15 @@
+pro getcdf, $
+	file=file, $
+	charvar=charvar, $
+	invar=invar	
+
+T = SYSTIME(1)
+
+cdfid = ncdf_open(file)
+varid=ncdf_varid(cdfid,charvar)
+ncdf_varget, cdfid, varid, invar
+
+print, 'got '+charvar+' in '+file+' within ', SYSTIME(1) - T, ' seconds'
+
+
+end
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/getget.pro
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/getget.pro	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/getget.pro	(revision 142)
@@ -0,0 +1,122 @@
+function getget, name, charvar, count=count, offset=offset, stride=stride, coordmean=coordmean, anomaly=anomaly
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; name: char
+; charvar: char
+; count: 4 elements array   ; The dimensions of the sub-image
+; offset: 4 elements array  ; A variable that contains the offset for the sub-image
+; stride: 4 elements array  ; Create a variable to be used as a value for the STRIDE keyword
+; coordmean: 1 to 4 elements array (dimension 1 is 1)
+; anomaly: a non-null element that would be filled with mean
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+nosave = 1  ;; comment to get an IDL data file
+notime = 1  ;; comment to get mention of time taken
+if (n_elements(notime) eq 0) then timetime = SYSTIME(1)
+
+;
+; MINIMAL ARGUMENTS
+;
+if (n_elements(name) eq 0) then stop
+if (n_elements(charvar) eq 0) then stop
+
+;
+; IDL DATA DIRECTORY
+;
+name_idl = charvar+name+'.idl'
+  if (n_elements(coordmean) ne 0) then begin
+    nc = n_elements(coordmean)
+    for i=0,nc-1 do begin
+     name_idl = string(coordmean(i),'(I0)')+name_idl   
+    endfor
+  endif
+name_idl = './idl_dat/'+name_idl
+
+;
+; TEST IF FILE EXISTS
+;
+openr,unit,name_idl,/get_lun,error=err
+
+;
+; IF IDL FILE EXISTS, THAT IS RATHER SIMPLE
+;
+IF (err EQ 0) THEN BEGIN
+
+   print, 'read from file'
+   free_lun,unit
+   restore, filename=name_idl
+
+;
+; IF IDL FILE DOES NOT EXIST, WELL, READ NETCDF
+;
+ENDIF ELSE BEGIN
+
+  ;
+  ; check save directory
+  ;
+  if (n_elements(nosave) eq 0) then SPAWN, 'mkdir -p idl_dat'  
+
+  ;
+  ; open file
+  ;
+  id=ncdf_open(name) 
+
+  ;
+  ; get dimensions
+  ;
+  var = intarr(4)
+  NCDF_DIMINQ, id, NCDF_DIMID(id, 'west_east'    ), toto, titi & var(0) = titi
+  NCDF_DIMINQ, id, NCDF_DIMID(id, 'south_north'  ), toto, titi & var(1) = titi 
+  NCDF_DIMINQ, id, NCDF_DIMID(id, 'bottom_top'   ), toto, titi & var(2) = titi
+  NCDF_DIMINQ, id, NCDF_DIMID(id, 'Time'         ), toto, titi & var(3) = titi 
+  ;print, var
+
+  ;
+  ; define default data windows
+  ;
+  if (n_elements(offset) le 3) then offset=[0,0,0,0]
+  if (n_elements(stride) le 3) then stride=[1,1,1,1]
+  if (n_elements(count) le 3) then count=intarr(4)
+  w = where(count eq 0) & if (w(0) ne -1) then count[w] = var[w] / stride[w]
+
+  ;
+  ; read variable
+  ;
+  varid=ncdf_varid(id,charvar) ;& print, 'get '+charvar 
+  if (n_elements(notime) eq 0) then timetime = SYSTIME(1) ;& help, /memory
+  ncdf_varget, id, varid, invar, count=count, offset=offset, stride=stride & if (n_elements(notime) eq 0) then print, SYSTIME(1) - timetime, ' s' ;& help, /memory
+  ncdf_close, id
+
+  ;
+  ; OPTIONAL: ANOMALY (value is returned in the keyword)
+  ; 
+  if (n_elements(anomaly) ne 0) then begin
+    anomaly=TOTAL(TOTAL(invar,1),1)/float(var[0])/float(var[1])
+    for i=0,var[0]-1 do for j=0,var[1]-1 do invar(i,j,*,*) = TEMPORARY(invar(i,j,*,*)) - anomaly  ; coute cher
+  endif
+
+  ;
+  ; OPTIONAL: MEAN 
+  ;
+  if (n_elements(coordmean) ne 0) then begin
+  for i=0,nc-1 do begin
+   print, 'mean over dimension '+string(coordmean(i),'(I0)')+' - '+string(var(coordmean(i)),'(I0)')+' elements'
+   invar=total(TEMPORARY(invar),coordmean(i))/var(coordmean(i))
+  endfor
+  endif
+
+  ;
+  ; SAVE
+  ;
+  if (n_elements(nosave) eq 0) then save, invar, filename=name_idl
+
+ENDELSE
+
+if (n_elements(notime) eq 0) then print, SYSTIME(1) - timetime, ' s'
+
+;
+; RETURN FIELD
+;
+return, invar
+
+end
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/getturb.pro
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/getturb.pro	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/getturb.pro	(revision 142)
@@ -0,0 +1,429 @@
+pro getturb, saveps=saveps
+
+
+
+;----------------------------------
+; USE: getturb
+;      getturb, saveps='false'     
+;----------------------------------
+
+
+history_interval_s = 400. ;100.
+smoothampl=3700/history_interval_s
+smoothampl=0.
+
+;
+; constantes
+;
+p0=610. & t0=220. & r_cp=1/4.4 & grav=3.72 & R=192.
+
+;
+; graphics definition
+;
+if (n_elements(saveps) eq 0) then saveps='true'
+if (saveps eq 'false') then begin
+   ;!p.multi=[0,3,2] 
+   !P.CHARSIZE=2.
+   WINDOW, /PIXMAP & WDELETE & DEVICE,BYPASS_TRANSLATION=0,DECOMPOSED=0,RETAIN=2
+endif else begin
+   PREF_SET, 'IDL_PATH', '/home/spiga/Save/Save/SOURCES/IDL/fsc_psconfig:<IDL_DEFAULT>', /COMMIT
+endelse
+
+;
+; retrieve fields
+;
+openr,unit,'getturb.dat',/get_lun,error=err
+IF (err ne 0) THEN BEGIN
+
+;
+; input files
+;
+OPENR, 22, 'input_coord' & READF, 22, lonu & READF, 22, latu & READF, 22, lsu & READF, 22, lctu & CLOSE, 22
+OPENR, 23, 'input_more' & READF, 23, hgtu, tsurfu & CLOSE, 23
+
+;
+; get fields
+;
+domain='d01' & filesWRF = FindFile('wrfout_'+domain+'_????-??-??_??:??:??') & nf=n_elements(filesWRF)
+
+;
+; get dimensions
+;
+id=ncdf_open(filesWRF(0))
+NCDF_DIMINQ, id, NCDF_DIMID(id, 'west_east'    ), toto, nx & NCDF_DIMINQ, id, NCDF_DIMID(id, 'south_north'  ), toto, ny
+NCDF_DIMINQ, id, NCDF_DIMID(id, 'bottom_top'   ), toto, nz & NCDF_DIMINQ, id, NCDF_DIMID(id, 'Time'         ), toto, nt
+NCDF_CLOSE, id 
+
+;
+; prepare loop
+;
+nloop1 = nf-1 & nloop2 = nt & yeye = 0 
+localtime = lctu + history_interval_s*findgen(nloop1*nloop2)/3700.
+wt  = fltarr(nz,nloop1*nloop2) & tke = fltarr(nz,nloop1*nloop2) & ztke = fltarr(nz,nloop1*nloop2) & t = fltarr(nz,nloop1*nloop2)
+p = fltarr(nz) & ph = fltarr(nz) & pht = fltarr(nz,nloop1*nloop2) & pt = fltarr(nz,nloop1*nloop2) & stst = fltarr(nz,nloop1*nloop2)
+
+;
+; loop loop
+;
+for loop  = 0, nloop1-1 do begin
+                                          timetime = SYSTIME(1)
+for loop2 = 0, nloop2-1 do begin
+
+   ; t' = t - <t>
+   ; ------------
+ yeyeye = 1.
+ tprime = getget(filesWRF(loop), 'T', anomaly=yeyeye, count=[0,0,0,1], offset=[0,0,0,loop2])  ;; t' = t - <t>
+ t(*,yeye) = t0 + TEMPORARY(yeyeye)
+   ; w' = w   
+   ; ------
+ wprime  = getget(filesWRF(loop), 'W', count=[0,0,0,1], offset=[0,0,0,loop2])     
+   ; tke = 0.5 ( <u'^2> + <v'^2> + <w'^2> ) ; u' = u ; v' = v  
+   ; --------------------------------------------------------
+ ztke(*,yeye) = 0.5 * TOTAL(TOTAL(wprime^2,1),1) / float(nx) / float(ny)
+ tke(*,yeye) = ztke(*,yeye) + $
+               0.5 * ( $
+        TOTAL(TOTAL(getget(filesWRF(loop), 'U', count=[0,0,0,1], offset=[0,0,0,loop2])^2,1),1) + $  
+        TOTAL(TOTAL(getget(filesWRF(loop), 'V', count=[0,0,0,1], offset=[0,0,0,loop2])^2,1),1)   $  
+        ) / float(nx) / float(ny)  
+   ; <w't'>
+   ; ------
+ wt(*,yeye)  = TOTAL(TOTAL(TEMPORARY(tprime)  * TEMPORARY(wprime),1),1) / float(nx) / float(ny)  
+   ; p & ph
+   ; ------
+ if (loop + loop2 eq 0) then nloopbeware = nloop2-1 else nloopbeware = nloop2  ; 1ere valeur vaut 0
+ pht(*,yeye) = TOTAL(TOTAL(getget(filesWRF(loop), 'PHTOT',  count=[0,0,0,1], offset=[0,0,0,loop2]),1),1) / float(nx) / float(ny) / 1000. / 3.72
+ pt(*,yeye)  = TOTAL(TOTAL(getget(filesWRF(loop), 'PTOT' ,  count=[0,0,0,1], offset=[0,0,0,loop2]),1),1) / float(nx) / float(ny)
+ ph = TEMPORARY(ph) + pht(*,yeye) / nloopbeware / nloop1
+ p  = TEMPORARY(p ) + pt(*,yeye) / nloop2 / nloop1
+   ; static stability
+   ; ----------------
+ stst(*,yeye) = DERIV( reform(pht(*,yeye)) - hgtu/1000. , reform(t(*,yeye)) * ( reform(pt(*,yeye)) /p0 )^r_cp ) + 1000.*grav / (R / r_cp)  ;; 4.9 dans Hinson
+   ; loop count
+   ; ---------
+ yeye = TEMPORARY(yeye) + 1 
+
+endfor
+                                          print, 'file '+string(loop+1,'(I0)'), SYSTIME(1) - timetime, ' s'
+endfor
+h  = TEMPORARY(ph)  - hgtu/1000.  ;; altitude above ground
+ht = TEMPORARY(pht) - hgtu/1000.  
+;
+; save
+;
+save, wt, tke, ztke, h, ht, t, p, pt, stst, localtime, filename='getturb.dat'
+
+ENDIF ELSE BEGIN
+
+print, 'OK, file is here'
+restore, filename='getturb.dat'
+
+ENDELSE
+
+;
+; smooth smooth
+;
+wt  = SMOOTH(TEMPORARY(wt),  [0,smoothampl], /EDGE_TRUNCATE)
+tke = SMOOTH(TEMPORARY(tke), [0,smoothampl], /EDGE_TRUNCATE)
+ztke = SMOOTH(TEMPORARY(ztke), [0,smoothampl], /EDGE_TRUNCATE)
+
+
+;*******************;
+;*******************;
+; PLOTS PLOTS PLOTS ;
+;*******************;
+;*******************;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+zefield       =  transpose(tke) 
+zex           =  localtime 
+zey           =  h
+set_name      =  'TKE.ps'
+set_title     =  "Turbulent Kinetic Energy 0.5[<u'!U2!N>+<v'!U2!N>+<w'!U2!N>] (m!U2!N.s!U-2!N)"
+set_titlex    =  'Local Time (h)'
+set_titley    =  'Altitude above surface (km)'
+set_subtitle  =  'Mean over the simulation domain'
+set_xrange    =  [8.,18.]
+set_yrange    =  [0.,10.]
+set_tickx     =  1.
+set_ticky     =  1.
+minval        =  0.
+maxval        =  15.
+nlev          =  maxval-minval
+pal           =  22
+rrr           =  'no'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then PS_Start, FILENAME=set_name
+!P.Charsize = 1.2
+;; 0. levels
+lev = minval + (maxval-minval)*findgen(nlev+1)/float(nlev) & if (minval ne 0.) then lev = lev[where(lev ne 0.)]
+;;; 1. background
+loadct, 0 & contour, /NODATA, zefield, zex, zey, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0 
+;; 2. color field
+loadct, pal & if (rrr eq 'yes') then TVLCT, r, g, b, /Get & if (rrr eq 'yes') then TVLCT, Reverse(r), Reverse(g), Reverse(b) 
+            contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /overplot, /cell_fill
+;; 3. contour field
+loadct, 0 & contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /noerase, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, C_LINESTYLE = (lev LT 0.0)
+;; 4. choose output
+if (saveps eq 'true') then PS_End, /PNG
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+zefield       =  transpose(ztke)
+;zefield       =  100.*transpose(ztke)/transpose(tke) & zefield[where(transpose(tke) lt 1.)]=0.
+zex           =  localtime
+zey           =  h
+set_name      =  'zTKE.ps'
+set_title     =  "Vertical Turbulent Kinetic Energy 0.5[<w'!U2!N>] (m!U2!N.s!U-2!N)"
+set_titlex    =  'Local Time (h)'
+set_titley    =  'Altitude above surface (km)'
+set_subtitle  =  'Mean over the simulation domain'
+set_xrange    =  [8.,18.]
+set_yrange    =  [0.,10.]
+set_tickx     =  1.
+set_ticky     =  1.
+minval        =  0.
+maxval        =  10.
+nlev          =  maxval-minval
+pal           =  22
+rrr           =  'no'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then PS_Start, FILENAME=set_name
+!P.Charsize = 1.2
+;; 0. levels
+lev = minval + (maxval-minval)*findgen(nlev+1)/float(nlev) & if (minval ne 0.) then lev = lev[where(lev ne 0.)]
+;;; 1. background
+loadct, 0 & contour, /NODATA, zefield, zex, zey, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0
+;; 2. color field
+loadct, pal & if (rrr eq 'yes') then TVLCT, r, g, b, /Get & if (rrr eq 'yes') then TVLCT, Reverse(r), Reverse(g), Reverse(b)
+            contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /overplot, /cell_fill
+;; 3. contour field
+loadct, 0 & contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /noerase, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, C_LINESTYLE = (lev LT 0.0)
+;; 4. choose output
+if (saveps eq 'true') then PS_End, /PNG
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+zefield       =  transpose(wt)
+zex           =  localtime
+zey           =  h
+set_name      =  'HF.ps'
+set_title     =  "Vertical Eddy Heat Flux <w'!7h!3'> (K.m.s!U-1!N)"
+set_titlex    =  'Local Time (h)'
+set_titley    =  'Altitude above surface (km)'
+set_subtitle  =  'Mean over the simulation domain'
+set_xrange    =  [8.,18.]
+set_yrange    =  [0.,10.]
+set_tickx     =  1.
+set_ticky     =  1.
+minval        =  -2.
+maxval        =  2.
+nlev          =  floor(maxval-minval)*10
+pal           =  33 ;4 
+rrr           =  'no'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then PS_Start, FILENAME=set_name
+!P.Charsize = 1.2
+;; 0. levels
+lev = minval + (maxval-minval)*findgen(nlev+1)/float(nlev) & if (minval ne 0.) then lev = lev[where(lev ne 0.)]
+;;; 1. background
+loadct, 0 & contour, /NODATA, zefield, zex, zey, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0
+;; 2. color field
+loadct, pal & if (rrr eq 'yes') then TVLCT, r, g, b, /Get & if (rrr eq 'yes') then TVLCT, Reverse(r), Reverse(g), Reverse(b)
+            ;;;--------------------------------------------------------------------------------------------------------------------------------
+            ;;; WHITE ZONE - 1. get location of interval in the CT - 2. change the CT to have a white zone
+            ulim=0.09 & dlim=-0.09 & w=where(lev le dlim) & n1=w[n_elements(w)-1] & w=where(lev ge ulim) & n2=w[0] & yy=BYTSCL(lev) & nd=yy[n1] & nu=yy[n2]-5
+            nu = nd + (nu-nd)/2  ;; otherwise the interval is too large (because we removed 0)
+            TVLCT, r, g, b, /Get & r[nd:nu]=255 & g[nd:nu]=255 & b[nd:nu]=255 & TVLCT, r, g, b
+            ;;;--------------------------------------------------------------------------------------------------------------------------------
+            contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /overplot, /cell_fill
+;; 3. contour field
+loadct, 0 & contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /noerase, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, C_LINESTYLE = (lev LT 0.0)
+;; 4. choose output
+if (saveps eq 'true') then PS_End, /PNG
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+zefield       =  t
+zey           =  ht 
+set_name      =  'T.ps'
+set_title     =  "Potential Temperature (K)"
+set_titlex    =  'Potential Temperature (K)'
+set_titley    =  'Altitude above surface (km)'
+set_subtitle  =  'Mean over the simulation domain'
+set_xrange    =  [min(t),max(t)]
+set_yrange    =  [0.,10.]
+set_tickx     =  5.
+set_ticky     =  1.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+localtimes = [9,10,11,12,13,14,15,16,17,18]
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then PS_Start, FILENAME=set_name
+!P.Charsize = 1.2
+altlin=0 & loadct, 0
+user_lt=localtimes[0] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0)
+plot, zefield(*,nntt), zey(*,nntt), xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, linestyle=altlin
+for ll = 1, n_elements(localtimes)-1 do begin
+  CASE altlin OF
+  0: altlin=1
+  1: altlin=0
+  ENDCASE  
+  user_lt=localtimes[ll] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0)
+  if (nntt ne -1) then oplot, zefield(*,nntt), zey(*,nntt), linestyle=altlin
+endfor
+if (saveps eq 'true') then PS_End, /PNG
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+zefield       =  stst
+zey           =  ht 
+set_name      =  'STST.ps'
+set_title     =  "Static stability (K.m!U-1!N)"
+set_titlex    =  'Static stability (K.m!U-1!N)'
+set_titley    =  'Altitude above surface (km)'
+set_subtitle  =  'Mean over the simulation domain'
+set_xrange    =  [-5.,5.]
+set_yrange    =  [0.,10.]
+set_tickx     =  1.
+set_ticky     =  1.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+localtimes = [9,11,13,15,17]
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then PS_Start, FILENAME=set_name
+!P.Charsize = 1.2
+altlin=0 & loadct, 0
+user_lt=localtimes[0] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0)
+plot, zefield(*,nntt), zey(*,nntt), xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, linestyle=altlin
+oplot, zefield(*,nntt), zey(*,nntt), psym=5
+for ll = 1, n_elements(localtimes)-1 do begin
+  CASE altlin OF
+  0: altlin=1 
+  1: altlin=0
+  ENDCASE
+  user_lt=localtimes[ll] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0)
+  if (nntt ne -1) then oplot, zefield(*,nntt), zey(*,nntt), linestyle=altlin
+  if (nntt ne -1) then oplot, zefield(*,nntt), zey(*,nntt), psym=5
+endfor
+oplot, 0.*zefield(*,nntt) + 1.5, zey(*,nntt), linestyle=2  
+if (saveps eq 'true') then PS_End, /PNG
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+stop
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+goto, no_staticstab
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then begin
+  device, /close
+  set_plot, 'ps' & device, filename='plot/staticstab.ps'
+endif
+
+user_lt=17. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+
+   ;;; recompute height @ given local time 
+   caca=heightp+hgtu/1000.
+   height=reform(ph(*,0,*,*))
+   height=total(height,1)/n_elements(height(*,0,0))
+   height=reform(height)
+   height=reform(height(*,yeah(0)))
+   height=height/1000./3.72
+   heightp=height(0:n_elements(height(*))-2) 
+   print, 'new minus old', heightp - caca
+   ;;; recompute height @ given local time 
+
+        press=reform(p(*,0,*,*))
+        press=total(press,1)/n_elements(press(*,0,0))
+        press=reform(press)
+        press=reform(press(*,yeah(0)))
+        press=press(0:n_elements(press(*))-2)
+
+staticstab = DERIV( heightp , reform(what_I_plot5(*,yeah(0))) ) + 1000.*3.72/844.6  ;; 4.9 dans Hinson
+   staticstab = staticstab(0:n_elements(staticstab)-5)
+   heightp = heightp(0:n_elements(heightp)-5)
+
+plot, $
+        staticstab, $
+        heightp,$
+        xtitle='Static stability (K/km)',$
+        xrange=[-1.,5.], $
+        xtickinterval=0.5, $
+        ytitle='Altitude above surface (km)', $
+        yrange=[min(heightp),max(heightp)], $
+        ytickinterval=1., $
+        title="LMD LES Static stability @ LT 17h (K/km)", $
+        subtitle='zonal average at lat. '+latwrite
+oplot, $
+        staticstab, $
+        heightp,$
+        psym=5
+oplot, $
+       findgen(n_elements(heightp))*0. + 1.,$
+       heightp,$
+       linestyle=2
+oplot, $
+       findgen(n_elements(heightp))*0. + 2.,$
+       heightp,$
+       linestyle=2
+
+;;;;;;;;;;
+w = where((staticstab gt 1.5) and ((heightp- hgtu/1000.) gt 1.))
+t_top_plus = what_I_plot5(w(0),yeah(0))
+z_top_plus = heightp(w(0))
+p_top_plus = press(w(0))
+t_top_moins = what_I_plot5(w(0)-1,yeah(0))
+z_top_moins = heightp(w(0)-1)
+p_top_moins = press(w(0)-1)
+pbl_depth = (z_top_plus*alog(p_top_plus) + z_top_moins*alog(p_top_moins))/(alog(p_top_plus) + alog(p_top_moins)) - hgtu/1000.
+xyouts, 3., 1.5 + (max(heightp) + min(heightp)) / 3., 'Ls = '+string(lsu,'(F5.1)')+'!Uo!N', CHARSIZE=1
+xyouts, 3., 1. + (max(heightp) + min(heightp)) / 3., 'Lat = '+string(latu,'(F5.1)')+'!Uo!N', CHARSIZE=1
+xyouts, 3., 0.5 + (max(heightp) + min(heightp)) / 3., 'LonE = '+string(lonu,'(F6.1)')+'!Uo!N', CHARSIZE=1
+xyouts, 3., (max(heightp) + min(heightp)) / 3., 'T!Dt!N = '+string(t_top_plus,'(I0)')+'/'+string(t_top_moins,'(I0)')+' K ', CHARSIZE=1
+xyouts, 3., -0.5 + (max(heightp) + min(heightp)) / 3., 'p!Dt!N = '+string(p_top_plus,'(I0)')+'/'+string(p_top_moins,'(I0)')+' Pa', CHARSIZE=1
+xyouts, 3., -1. + (max(heightp) + min(heightp)) / 3., 'z!Dt!N = '+string(z_top_plus,'(F4.1)')+'/'+string(z_top_moins,'(F4.1)')+' km', CHARSIZE=1
+xyouts, 3., -1.5 + (max(heightp) + min(heightp)) / 3., 'z!Ds!N = '+string(hgtu/1000.,'(F4.1)')+' km', CHARSIZE=1
+xyouts, 3., -2. + (max(heightp) + min(heightp)) / 3., 'D = '+string(pbl_depth,'(F4.1)')+' km', CHARSIZE=1
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+no_staticstab:
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then begin
+  device, /close
+endif
+stop
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+user_lt=13.
+yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+
+user_h=0.1
+walt=where(abs(heightp-user_h) eq (min(abs(heightp-user_h))))
+
+;mapfield=reform(t[*,*,walt(0),w(0)])
+;help, mapfield
+;contour, mapfield
+
+section=reform(w[*,0,*,yeah(0)])
+
+section=reform(w[*,0,*,160])
+
+lev=[-12.,-8.,-4.,4.,8.,12.]
+lev=[-5.,-4.,-3.,-2.,-1.,1.,2.,3.,4.,5.]
+contour, $
+	section, $
+	(lon(*,0)-lon(0,0))*59., $
+	heightp, $
+	levels=lev , $
+	C_LINESTYLE = (lev LT 0.0)
+
+device, /close
+
+end
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/pause.pro
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/pause.pro	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/pause.pro	(revision 142)
@@ -0,0 +1,76 @@
+pro pause,up=up,xcrs=xcrs,ycrs=ycrs,on_screen=on_screen
+;+
+; routine:        pause
+;
+; useage:         pause
+;                 pause,up=up,xcrs=xcrs,ycrs=ycrs,on_screen=on_screen
+;
+; input:          none
+;
+; keyword input:  
+;   up
+;     if set, don't return until a upward button transition is
+;     detected.  This is useful when pause is used between plots which
+;     draw quickly.  Setting this keyword ensures that no plots are
+;     skipped but also requires that each new plot be accompanied by a
+;     downward and upward button transition.  The default is to skip
+;     to the next plot as long a mouse button is pressed down.
+;
+;
+; xcrs,ycrs
+;     pixel location to put cursor while waiting
+;
+; on_screen
+;     if set, don't pause if cursor not in plot window
+;
+; output:         none
+;
+; PURPOSE:
+;     Momentarily stop execution until a mouse key is pressed.  While
+;     in the paused state the cursor is changed to what looks like an
+;     arrow pointing down on a button.  When any of the mouse buttons
+;     are pressed the cursor returns to its original form and
+;     execution continues.
+;     
+;     PAUSE will only interrupt execution if the output device is 'X'
+;     and plot system variable !p.multi(0) eq 0.  The first condition
+;     disables PAUSE when output is directed to a postscript file.
+;     The second condition ensures that pauses occur only just before
+;     the screen is erased for a new plot.
+;     
+;     NOTE: After PAUSE returns to the calling program different
+;     actions can be performed depending on whether the left, middle
+;     or right mouse button was pressed.  Just test on the !err system
+;     variable: !err=1 => left !err=2 => middle !err=4 => right.
+;
+; COMMON BLOCKS: pause_blk
+;                       
+; EXAMPLE:        
+;
+;x=findgen(201)/10.-10. 
+;for a=-2.,2.,.1 do begin & plot,x,1/(x^2*10.^a+1),tit=string(a) & pause & end
+;
+;for a=-2.,2.,.1 do begin & plot,x,1/(x^2*10.^a+1),tit=string(a) &$
+;   pause,/u & end
+;
+;  author:  Paul Ricchiazzi                            22sep92
+;           Institute for Computational Earth System Science
+;           University of California, Santa Barbara
+;-
+
+
+if !d.name eq 'X' and !p.multi(0) eq 0 then begin
+  cursor,xw,yw,/nowait,/device
+  
+  if xw eq -1 then begin
+    if keyword_set(on_screen) then return
+    if n_elements(xcrs) eq 0 then xcrs=.9*!d.x_vsize 
+    if n_elements(ycrs) eq 0 then ycrs=.9*!d.y_vsize 
+    tvcrs,xcrs,ycrs
+  endif
+  device,cursor_standard=16
+  cursor,xdum,ydum,/wait,/device
+  if keyword_set(up) then cursor,xdum,ydum,/up,/device
+  device,cursor_standard=30
+endif
+end
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/scr
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/scr	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/scr	(revision 142)
@@ -0,0 +1,32 @@
+#! /bin/bash
+
+## use: scr U V W
+## les fichiers deja crees ne sont pas recrees
+
+## IDL remplit la memoire et devient plus lent...
+
+mean='1'
+mean='[1,2]'
+
+count='[1,1,0,0]'
+offset='[20,20,0,0]'
+
+count='0'
+offset='0'
+
+\rm log 2> /dev/null
+touch log
+
+for fich in $(ls wrfout*) ; do
+ for param in "$@" ; do
+
+  echo $param $fich
+  unset limits 
+#  echo "ye = getget('"${fich}"', '"${param}"',coordmean="$mean") & DELVAR, ye & exit" | /distrib/local/rsi/idl_6.1/bin/idl >> log 2>> log
+  echo "ye = getget('"${fich}"', '"${param}"',count="$count",offset="$offset") & DELVAR, ye & exit" | /distrib/local/rsi/idl_6.1/bin/idl >> log 2>> log
+
+ done 
+done
+
+
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/turbulence.pro
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/turbulence.pro	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/turbulence.pro	(revision 142)
@@ -0,0 +1,549 @@
+pro turbulence
+
+;;----------------------------------------------------
+;;----------------------------------------------------
+;;----------------------------------------------------
+
+
+retrieve='true'
+;retrieve='false'
+
+
+
+;; CALCUL DE LA MOYENNE
+;; 18 pas assez 74 trop
+meansmooth=37
+;meansmooth=18
+;meansmooth=74
+
+;; CALCUL DE LA MOYENNE DES FLUX
+;smoothampl=74
+;smoothampl=2
+;smoothampl=10
+;smoothampl=18
+smoothampl=meansmooth
+
+saveps='false'
+;saveps='true'
+
+yu=20
+
+;;----------------------------------------------------
+;;----------------------------------------------------
+;;----------------------------------------------------
+
+
+p0=610. & t0=220. & r_cp=1/4.4 & grav=3.72 & R=192.
+
+;
+; graphics definition
+;
+if (saveps eq 'false') then begin
+   !p.multi=[0,3,2]
+   !P.CHARSIZE=2.
+endif else begin
+   !p.charthick = 2.0
+   !p.thick = 3.0
+   !x.thick = 2.0
+   !y.thick = 2.0
+endelse
+
+;
+; input files
+;
+OPENR, 22, 'input_coord' & READF, 22, lonu & READF, 22, latu & READF, 22, lsu & READF, 22, lctu & CLOSE, 22
+OPENR, 23, 'input_more' & READF, 23, hgtu, tsurfu & CLOSE, 23
+print, lonu, latu, lsu, lctu, hgtu, tsurfu
+
+
+;
+; retrieve
+;
+if (retrieve eq 'true') then begin
+
+
+;
+; get fields
+;
+getcdf, file='u'+string(yu,'(I0)')+'.nc', charvar='U', invar=u
+getcdf, file='v'+string(yu,'(I0)')+'.nc', charvar='V', invar=v
+getcdf, file='t'+string(yu,'(I0)')+'.nc', charvar='T', invar=t
+getcdf, file='w'+string(yu,'(I0)')+'.nc', charvar='W', invar=w
+getcdf, file='p'+string(yu,'(I0)')+'.nc', charvar='PTOT', invar=p
+	;
+	; no vertical staggering for w
+	;
+	wplus=shift(w,0,0,-1,0)
+	w=(w+wplus)/2.
+	w=w(*,*,0:n_elements(w(0,0,*,0))-2,*)
+
+
+ndim=n_elements(t(*,0,0,0))
+lat=fltarr(ndim,ndim)
+lon=fltarr(ndim,ndim)
+  for i=0,ndim-1 do begin
+  for j=0,ndim-1 do begin
+    lat(i,j)=latu+float(j)*100./59000.
+    lon(i,j)=lonu+float(i)*100./59000.
+  endfor
+  endfor
+what_I_plot=0. & what_I_plot2=0. & what_I_plot3=0. & what_I_plot4=0. & what_I_plot5=0. & what_I_plot6=0.
+maxwhat_I_plot=0. & maxwhat_I_plot2=0. & maxwhat_I_plot3=0.
+minwhat_I_plot=0.
+
+
+;
+; loop on west-east coordinate
+;
+nloop=n_elements(t(*,0,0,0))
+for i=0,nloop-1 do begin
+
+	indp=[i,0]	;;indp=[75,0]
+
+	;
+	; 2D field for plot
+	;
+	t2=reform(t(indp[0],indp[1],*,*))
+t2_save=t0+reform(t(indp[0],indp[1],*,*))
+treal2_save=t2_save*(reform(p(indp[0],indp[1],*,*))/p0)^r_cp
+	u2=reform(u(indp[0],indp[1],*,*))
+	v2=reform(v(indp[0],indp[1],*,*))
+	w2=reform(w(indp[0],indp[1],*,*))
+	nz=n_elements(t2(*,0))
+	nt=n_elements(t2(0,*))
+
+nt=nt-2
+t2=t2[*,0:nt-1]
+u2=u2[*,0:nt-1]
+v2=v2[*,0:nt-1]
+w2=w2[*,0:nt-1]
+
+        	;;
+        	;; local time
+        	;;
+        	;localtime=21.+100.*findgen(nt)/3700.+lon(indp[0],indp[1])/15.-24. 
+                localtime=lctu+100.*findgen(nt)/3700.
+		;;print, localtime
+		
+	;
+	; 1. perturbations
+	;
+	for k=0,nz-1 do begin
+		t2(k,*)=t2(k,*)-SMOOTH(reform(t2(k,*)),meansmooth,/EDGE_TRUNCATE)
+		u2(k,*)=u2(k,*)-SMOOTH(reform(u2(k,*)),meansmooth,/EDGE_TRUNCATE)
+		v2(k,*)=v2(k,*)-SMOOTH(reform(v2(k,*)),meansmooth,/EDGE_TRUNCATE)
+		w2(k,*)=w2(k,*);-SMOOTH(reform(w2(k,*)),meansmooth,/EDGE_TRUNCATE)
+		;treal2_save(k,*)=treal2_save(k,*)-SMOOTH(reform(treal2_save(k,*)),meansmooth,/EDGE_TRUNCATE)
+	endfor
+	;
+	; 2. nonlinear products
+	;
+	vertical_eddy_heat_flux=w2*t2
+	uprime2=u2^2
+	vprime2=v2^2
+	wprime2=w2^2
+	;
+	; 3. Reynolds averaging
+	;
+	for k=0,nz-1 do begin
+		vertical_eddy_heat_flux(k,*)=SMOOTH(reform(vertical_eddy_heat_flux(k,*)),smoothampl,/EDGE_TRUNCATE)
+	        uprime2(k,*)=SMOOTH(reform(uprime2(k,*)),smoothampl,/EDGE_TRUNCATE)
+	        vprime2(k,*)=SMOOTH(reform(vprime2(k,*)),smoothampl,/EDGE_TRUNCATE)
+	        wprime2(k,*)=SMOOTH(reform(wprime2(k,*)),smoothampl,/EDGE_TRUNCATE)
+	endfor
+	tke=0.5*(uprime2+vprime2+wprime2)
+
+
+what_I_plot=what_I_plot+vertical_eddy_heat_flux/nloop
+what_I_plot2=what_I_plot2+tke/nloop
+what_I_plot3=what_I_plot3+wprime2/nloop
+what_I_plot4=what_I_plot4+t2_save/nloop
+what_I_plot5=what_I_plot5+treal2_save/nloop
+if (i eq nloop-1) then  what_I_plot6=t2
+
+;;help, t2
+;;help, treal2_save
+;treal2_save=treal2_save(0:n_elements(t2(*,0))-1,0:n_elements(t2(0,*))-1)
+;if (i eq nloop-1) then  what_I_plot6=treal2_save
+
+yeah=max(vertical_eddy_heat_flux)
+yeah2=max(tke)
+yeah3=max(wprime2)
+yeah4=min(vertical_eddy_heat_flux)
+
+if (yeah gt maxwhat_I_plot) then maxwhat_I_plot=yeah
+if (yeah2 gt maxwhat_I_plot2) then maxwhat_I_plot2=yeah2
+if (yeah3 gt maxwhat_I_plot3) then maxwhat_I_plot3=yeah3
+if (yeah4 lt minwhat_I_plot) then minwhat_I_plot=yeah4
+
+endfor
+
+
+
+
+
+;
+; get model height
+;
+getcdf, file='ph'+string(yu,'(I0)')+'.nc', charvar='PHTOT', invar=ph
+height=reform(ph(*,0,*,*))   
+height=total(height,1)/n_elements(height(*,0,0))
+height=reform(height)
+height=total(height(*,1:nt-1),2)/(nt-1)
+height=height/1000./3.72
+heightp=height(0:n_elements(height(*))-2) 
+	;
+	; altitude above ground
+	;	
+        heightp=heightp-hgtu/1000.
+
+
+;
+; save
+;
+save, what_I_plot, $
+	what_I_plot2, $
+	what_I_plot3, $
+	what_I_plot4, $
+	what_I_plot5, $
+	what_I_plot6, $
+	localtime, $
+	heightp, $
+	lat, $
+	lon, $
+	hgtu, $
+	filename='turbulence.dat' 
+
+endif else begin
+	restore, filename='turbulence.dat'	
+endelse	
+
+help, what_I_plot
+help, localtime
+help, heightp
+
+
+latwrite=string(lat(0,yu),'(F5.1)')
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then begin
+  set_plot, 'ps' & device, filename='plot/TKE.ps'
+endif
+
+lev=findgen(15)+1.
+contour, $
+        transpose(what_I_plot2), $
+        localtime, $
+        heightp, $
+        xtitle='Local Time (h)', $
+        xrange=[8.,18.], $
+        xtickinterval=1., $
+        ytitle='Altitude above surface (km)', $
+        yrange=[0.,10.], $
+        ytickinterval=1., $
+        title="Turbulent Kinetic Energy 0.5[<u'!U2!N>+<v'!U2!N>+<w'!U2!N>] (m!U2!N.s!U-2!N)", $
+        levels=lev, $
+        c_labels=findgen(n_elements(lev))*0.+1., $
+	subtitle='zonal average at lat. '+latwrite+' (max value is '+string(maxwhat_I_plot2,'(F4.1)')+' m!U2!N.s!U-2!N)'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then begin
+  device, /close
+  set_plot, 'ps' & device, filename='plot/zTKE.ps'
+endif
+
+lev=findgen(15)+1.
+contour, $
+        0.5*transpose(what_I_plot3), $
+        localtime, $
+        heightp, $
+        xtitle='Local Time (h)', $
+        xrange=[8.,18.], $
+        xtickinterval=1., $
+        ytitle='Altitude above surface (km)', $
+        yrange=[0.,10.], $
+        ytickinterval=1., $
+        title="Vertical TKE 0.5<w'!U2!N> (m!U2!N.s!U-2!N)", $
+        levels=lev, $
+        c_labels=findgen(n_elements(lev))*0.+1., $
+        subtitle='zonal average at lat. '+latwrite+' (max value is '+string(0.5*maxwhat_I_plot3,'(F4.1)')+' m!U2!N.s!U-2!N)'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+
+if (saveps eq 'true') then begin
+  device, /close
+  set_plot, 'ps' & device, filename='plot/HF.ps'
+endif
+
+;lev=[-0.15,-0.05,-0.02,0.05,0.15,0.25,0.35,0.45,0.55,0.65,0.75,0.85,0.95]
+lev = -1. + findgen(20)/10.
+contour, $
+        transpose(what_I_plot), $
+        localtime, $
+        heightp, $ 
+	xtitle='Local Time (h)', $
+	xrange=[8.,18.], $
+	xtickinterval=1., $
+	ytitle='Altitude above surface (km)', $
+	yrange=[0.,10.], $
+	ytickinterval=1., $
+	title="Vertical Eddy Heat Flux <w'!7h!3'> (K.m.s!U-1!N)", $
+	levels=lev, $	
+	C_LINESTYLE = (lev LT 0.0), $
+	c_labels=findgen(n_elements(lev))*0.+1., $
+        subtitle='zonal average at lat. '+latwrite+' (min/max values are '+string(minwhat_I_plot,'(F5.1)')+'/'+string(maxwhat_I_plot,'(F3.1)')+' K.m.s!U-1!N)'
+
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+goto, no_pert_temp
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then begin
+  device, /close
+  set_plot, 'ps' & device, filename='plot/pert_temp.ps'
+endif
+
+lev=[-4.,-2.,-1.,-0.5,0.5,1.,2.,4.]
+contour, $
+	transpose(what_I_plot6), $
+        localtime, $
+        heightp, $
+        xtitle='Local Time (h)', $
+        xrange=[13.5,14.], $
+        xtickinterval=0.1, $
+        ytitle='Altitude above surface (km)', $
+        yrange=[0.,0.5], $
+        ytickinterval=0.1, $
+        title="Potential Temperature Perturbation !7h!3' (K)", $
+        levels=lev, $
+;nlevels=20, $
+        C_LINESTYLE = (lev LT 0.0), $
+        c_labels=findgen(n_elements(lev))*0.+1., $
+;/cell_fill, $
+        subtitle='latitude '+latwrite+' longitude '+string(lon(nloop-1,0),'(F6.1)')
+;xyouts, 14.007, heightp(0), '1'
+;xyouts, 14.016, heightp(1), '2'
+;xyouts, 14.007, heightp(2), '3'
+;xyouts, 14.007, heightp(3), '4'
+;xyouts, 14.007, heightp(4), '5'
+;xyouts, 14.007, heightp(5), '6'
+;xyouts, 14.007, heightp(6), '7'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+no_pert_temp:
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+
+
+if (saveps eq 'true') then begin
+  device, /close
+  set_plot, 'ps' & device, filename='plot/temp_pot.ps'
+endif
+
+user_lt=10. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+plot, $
+        what_I_plot4(*,yeah(0)), $
+        heightp,$
+	xtitle='Potential Temperature (K)',$
+;	xrange=[215,240], $
+        xtickinterval=5., $
+        ytitle='Altitude above surface (km)', $
+	yrange=[0.,10.], $
+        ytickinterval=1., $
+	title="Potential Temperature !7h!3 profile (K)", $
+        subtitle='zonal average at lat. '+latwrite
+user_lt=12. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+        oplot, what_I_plot4(*,yeah(0)), heightp, linestyle=1
+user_lt=14. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+        oplot, what_I_plot4(*,yeah(0)), heightp
+user_lt=16. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+        oplot, what_I_plot4(*,yeah(0)), heightp, linestyle=1
+user_lt=18. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+        oplot, what_I_plot4(*,yeah(0)), heightp
+
+;xyouts, 217.3, 0.5, '10:00'
+;xyouts, 225.8, 1.5, '12:00'
+;xyouts, 231.8, 3.0, '14:00'
+;xyouts, 234.8, 0.7, '16:00'
+;xyouts, 232.3, 2.0, '18:00'
+
+
+if (saveps eq 'true') then begin
+  device, /close
+  set_plot, 'ps' & device, filename='plot/temp.ps'
+endif
+
+user_lt=14.+55./60. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+plot, $
+        what_I_plot5(*,yeah(0)), $
+        heightp,$
+        xtitle='Temperature (K)',$
+        xrange=[210,250], $
+        xtickinterval=5., $
+        ytitle='Altitude above surface (km)', $
+        yrange=[0.,2.], $
+        ytickinterval=0.2, $
+        title="LMD LES Near-surface T profile (K)", $
+        subtitle='zonal average at lat. '+latwrite, $
+	linestyle=2	
+user_lt=10.+24./60. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+	oplot, what_I_plot5(*,yeah(0)), heightp
+user_lt=10.+59./60. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+	oplot, what_I_plot5(*,yeah(0)), heightp, linestyle=2
+user_lt=11.+59./60. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+	oplot, what_I_plot5(*,yeah(0)), heightp
+user_lt=15.+22./60. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+	oplot, what_I_plot5(*,yeah(0)), heightp
+user_lt=17.+13./60. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+        oplot, what_I_plot5(*,yeah(0)), heightp, linestyle=2
+
+;xyouts, 221,   0.2,  '10:24'
+;xyouts, 226.5,   0.4,  '10:59'
+;xyouts, 231.8, 0.2,  '11:59'
+;xyouts, 233,   0.8,  '14:55'
+;xyouts, 241,   0.1,  '15:22'
+;xyouts, 236.5, 0.05, '17:13'
+ 
+
+;;
+;xyouts, 250.05, heightp(0), '1'
+;xyouts, 250.45, heightp(1), '2'
+;xyouts, 251.00, heightp(2), '3'
+;xyouts, 250.45, heightp(3), '4'
+;xyouts, 250.45, heightp(4), '5'
+;xyouts, 250.45, heightp(5), '6'
+;xyouts, 250.45, heightp(6), '7'
+;xyouts, 250.45, heightp(7), '8'
+;xyouts, 250.45, heightp(8), '9'
+;xyouts, 250.25, heightp(9), '10'
+;xyouts, 250.25, heightp(10), '11'
+;xyouts, 250.25, heightp(11), '12'
+;xyouts, 250.25, heightp(12), '13'
+;xyouts, 250.25, heightp(13), '14'
+;xyouts, 250.25, heightp(14), '15'
+;xyouts, 250.25, heightp(15), '16'
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;goto, no_staticstab
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then begin
+  device, /close
+  set_plot, 'ps' & device, filename='plot/staticstab.ps'
+endif
+
+user_lt=17. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+
+   ;;; recompute height @ given local time 
+   caca=heightp+hgtu/1000.
+   height=reform(ph(*,0,*,*))
+   height=total(height,1)/n_elements(height(*,0,0))
+   height=reform(height)
+   height=reform(height(*,yeah(0)))
+   height=height/1000./3.72
+   heightp=height(0:n_elements(height(*))-2) 
+   print, 'new minus old', heightp - caca
+   ;;; recompute height @ given local time 
+
+        press=reform(p(*,0,*,*))
+        press=total(press,1)/n_elements(press(*,0,0))
+        press=reform(press)
+        press=reform(press(*,yeah(0)))
+        press=press(0:n_elements(press(*))-2)
+
+staticstab = DERIV( heightp , reform(what_I_plot5(*,yeah(0))) ) + 1000.*3.72/844.6  ;; 4.9 dans Hinson
+   staticstab = staticstab(0:n_elements(staticstab)-5)
+   heightp = heightp(0:n_elements(heightp)-5)
+
+plot, $
+        staticstab, $
+        heightp,$
+        xtitle='Static stability (K/km)',$
+        xrange=[-1.,5.], $
+        xtickinterval=0.5, $
+        ytitle='Altitude above surface (km)', $
+        yrange=[min(heightp),max(heightp)], $
+        ytickinterval=1., $
+        title="LMD LES Static stability @ LT 17h (K/km)", $
+        subtitle='zonal average at lat. '+latwrite
+oplot, $
+        staticstab, $
+        heightp,$
+        psym=5
+oplot, $
+       findgen(n_elements(heightp))*0. + 1.,$
+       heightp,$
+       linestyle=2
+oplot, $
+       findgen(n_elements(heightp))*0. + 2.,$
+       heightp,$
+       linestyle=2
+
+;;;;;;;;;;
+w = where((staticstab gt 1.5) and ((heightp- hgtu/1000.) gt 1.))
+t_top_plus = what_I_plot5(w(0),yeah(0))
+z_top_plus = heightp(w(0))
+p_top_plus = press(w(0))
+t_top_moins = what_I_plot5(w(0)-1,yeah(0))
+z_top_moins = heightp(w(0)-1)
+p_top_moins = press(w(0)-1)
+pbl_depth = (z_top_plus*alog(p_top_plus) + z_top_moins*alog(p_top_moins))/(alog(p_top_plus) + alog(p_top_moins)) - hgtu/1000.
+xyouts, 3., 1.5 + (max(heightp) + min(heightp)) / 3., 'Ls = '+string(lsu,'(F5.1)')+'!Uo!N', CHARSIZE=1
+xyouts, 3., 1. + (max(heightp) + min(heightp)) / 3., 'Lat = '+string(latu,'(F5.1)')+'!Uo!N', CHARSIZE=1
+xyouts, 3., 0.5 + (max(heightp) + min(heightp)) / 3., 'LonE = '+string(lonu,'(F6.1)')+'!Uo!N', CHARSIZE=1
+xyouts, 3., (max(heightp) + min(heightp)) / 3., 'T!Dt!N = '+string(t_top_plus,'(I0)')+'/'+string(t_top_moins,'(I0)')+' K ', CHARSIZE=1
+xyouts, 3., -0.5 + (max(heightp) + min(heightp)) / 3., 'p!Dt!N = '+string(p_top_plus,'(I0)')+'/'+string(p_top_moins,'(I0)')+' Pa', CHARSIZE=1
+xyouts, 3., -1. + (max(heightp) + min(heightp)) / 3., 'z!Dt!N = '+string(z_top_plus,'(F4.1)')+'/'+string(z_top_moins,'(F4.1)')+' km', CHARSIZE=1
+xyouts, 3., -1.5 + (max(heightp) + min(heightp)) / 3., 'z!Ds!N = '+string(hgtu/1000.,'(F4.1)')+' km', CHARSIZE=1
+xyouts, 3., -2. + (max(heightp) + min(heightp)) / 3., 'D = '+string(pbl_depth,'(F4.1)')+' km', CHARSIZE=1
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+no_staticstab:
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+if (saveps eq 'true') then begin
+  device, /close
+endif
+stop
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+user_lt=13.
+yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+
+user_h=0.1
+walt=where(abs(heightp-user_h) eq (min(abs(heightp-user_h))))
+
+;mapfield=reform(t[*,*,walt(0),w(0)])
+;help, mapfield
+;contour, mapfield
+
+section=reform(w[*,0,*,yeah(0)])
+
+section=reform(w[*,0,*,160])
+
+lev=[-12.,-8.,-4.,4.,8.,12.]
+lev=[-5.,-4.,-3.,-2.,-1.,1.,2.,3.,4.,5.]
+contour, $
+	section, $
+	(lon(*,0)-lon(0,0))*59., $
+	heightp, $
+	levels=lev , $
+	C_LINESTYLE = (lev LT 0.0)
+
+device, /close
+
+end
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/turbulence2.pro
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/turbulence2.pro	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/plot_util_bak/turbulence2.pro	(revision 142)
@@ -0,0 +1,250 @@
+pro turbulence2
+
+
+retrieve='true'
+
+fast='true'
+;fast='false'
+
+
+p0=610. & t0=220. & r_cp=1/4.4 & grav=3.72 & R=192. & g_cp=1000.*grav/844.6
+;;;;;;;;;;;;;;;;;;;;;;;
+;                     ;
+; HINSON - HINSON !!! ;
+;                     ;
+r_cp = 0.25           ; 
+;g_cp = 4.9           ;
+;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+;
+; input files
+;
+OPENR, 22, 'input_coord' & READF, 22, lonu & READF, 22, latu & READF, 22, lsu & READF, 22, lctu & CLOSE, 22
+OPENR, 23, 'input_more' & READF, 23, hgtu, tsurfu & CLOSE, 23
+print, lonu, latu, lsu, lctu, hgtu, tsurfu
+
+;
+; retrieve
+;
+if (retrieve eq 'true') then begin
+
+;
+; get fields and dimensions
+;
+getcdf, file='t.nc', charvar='T', invar=t
+getcdf, file='p.nc', charvar='PTOT', invar=p
+getcdf, file='ph.nc', charvar='PHTOT', invar=ph
+nx=n_elements(t(*,0,0,0))
+ny=n_elements(t(0,*,0,0))
+nz=n_elements(t(0,0,*,0))
+nt=n_elements(t(0,0,0,*))
+   ;;;; pour eviter de detecter des fluctuations plus basses que PBL top ;;;
+     smooth_gridpoint = 2 & smooth_time = 2 & smooth_vert = 2  
+     ;smooth_gridpoint = 0 & smooth_time = 0 & smooth_vert = 0  
+     t = smooth(t,[smooth_gridpoint,smooth_gridpoint,smooth_vert,smooth_time],/EDGE_TRUNCATE)
+     p = smooth(p,[smooth_gridpoint,smooth_gridpoint,smooth_vert,smooth_time],/EDGE_TRUNCATE)
+     ;ph = smooth(ph,[smooth_gridpoint,smooth_gridpoint,smooth_vert,smooth_time],/EDGE_TRUNCATE)
+   ;;;; pour eviter de detecter des fluctuations plus basses que PBL top ;;;
+
+;
+; localtime loop
+;
+localtime = lctu + 100.*findgen(nt)/3700.
+  ;
+  ; radio-occultations
+  ;
+  user_lt=17.0 & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+  user_lt=17.5 & yeah2=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+  ;;
+  ;; PBL growth
+  ;;
+  ;user_lt=14.5 & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+  ;user_lt=18.0 & yeah2=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+  ;
+
+  user_lt=14.0 & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+  user_lt=14.5 & yeah2=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt))))
+
+
+
+deb=yeah(0)
+fin=yeah2(0)
+
+;
+; calculate over domain
+;
+pbl_depth_tab=findgen(nx,ny,fin-deb+1)
+nloop = nx*ny
+
+;
+; LOOOOOOP
+;
+for tt=deb,fin do begin
+
+ tprof_mean = 0.
+ heightp_mean = 0.
+ staticstab_mean = 0.
+ nbad = 0
+
+for i=0,nx-1 do begin
+for j=0,ny-1 do begin
+
+ height=reform( ph( i,j,*,tt ) ) / 1000. / grav
+ heightp=height(0:nz-1) ;no stagger
+
+ thprof = t0 + reform( t( i,j,*,tt ) )
+ pprof = reform( p( i,j,*,tt ) )
+ tprof = thprof * ( pprof/p0 )^r_cp
+
+ staticstab = DERIV( heightp , tprof ) + g_cp  
+
+if (fast eq 'true') then begin
+
+; MOINS BON mais PLUS RAPIDE
+tprof_mean = tprof_mean + tprof/nloop
+heightp_mean = heightp_mean + heightp/nloop
+staticstab_mean = staticstab_mean + staticstab/nloop
+
+endif else begin
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+  z_in = heightp
+  profile_in = staticstab
+  resol = 500.  ;200 un peu juste
+  ;********************************************************************
+  ; ---- numerical recipes in C - section 3.3 ----
+  ;
+  ; Calculate interpolating cubic spline 
+        yspline = SPL_INIT(z_in,profile_in)
+  ; Define the X values P at which we desire interpolated Y values
+        xspline=min(z_in)+findgen(floor(max(z_in)-min(z_in))*resol)/resol
+  ; Calculate the interpolated Y values
+        result=spl_interp(z_in,profile_in,yspline,xspline)
+  ;********************************************************************
+  staticstab = result
+  heightp = xspline
+
+  heightp_mean = heightp_mean + heightp/nloop
+  staticstab_mean = staticstab_mean + staticstab/nloop
+    yspline = SPL_INIT(z_in,tprof)
+    tprof = spl_interp(z_in,tprof,yspline,xspline)
+  tprof_mean = tprof_mean + tprof/nloop
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+endelse
+
+lim=3.
+lim=1.5
+w = where( (staticstab ge lim) and (heightp-heightp(0) ge lim) )
+pbl_depth_tab(i,j,tt-deb) = heightp(w(0)) - heightp(0)
+
+   ; garde-fou supplementaire
+   if (heightp(w(0)) - heightp(0) lt 2.) then begin
+     pbl_depth_tab(i,j,tt-deb) = !VALUES.F_NAN
+     ;plot, profile_in, z_in, xrange=[-1.,5.], psym=5, title='bad!' & oplot, staticstab, heightp & oplot, staticstab, findgen(nz)*0. + heightp(w(0)), linestyle=2
+     print, heightp(w) - heightp(0)
+     nbad = nbad+1
+   endif
+
+;plot, profile_in, z_in, xrange=[-1.,5.], psym=5 & oplot, staticstab, heightp & oplot, staticstab, findgen(nz)*0. + heightp(w(0)), linestyle=2 
+;pause
+
+endfor
+;print, i
+endfor
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+  print, '-------------------------------------------------------'
+  print, 'Local Time : ', localtime(tt)
+  print, 'nbad ', nbad
+  print, 'PBL height - min ', min(pbl_depth_tab(*,*,tt-deb))
+  print, 'PBL height - max ', max(pbl_depth_tab(*,*,tt-deb))
+  print, 'PBL height - mean ', mean(pbl_depth_tab(*,*,tt-deb))
+    ;; static stability of mean profile
+    staticstab = DERIV( heightp_mean , tprof_mean ) + g_cp
+
+	  ;z_in = heightp_mean
+	  ;profile_in = staticstab
+	  ;resol = 500  ;200 un peu juste
+	  ;;********************************************************************
+	  ;; ---- numerical recipes in C - section 3.3 ----
+	  ;;
+	  ;; Calculate interpolating cubic spline 
+	  ;      yspline = SPL_INIT(z_in,profile_in)
+	  ;; Define the X values P at which we desire interpolated Y values
+	  ;      xspline=min(z_in)+findgen(floor(max(z_in))*resol)/resol
+	  ;; Calculate the interpolated Y values
+	  ;      result=spl_interp(z_in,profile_in,yspline,xspline)
+	  ;;********************************************************************
+	  ;staticstab = result
+	  ;w = where((staticstab ge 1.5) and (xspline-xspline(0) gt 2.))
+	  ;print, 'PBL height - mean profile', xspline(w(0)) - xspline(0)
+
+    w = where((staticstab ge 1.5) and (heightp_mean-heightp_mean(0) gt 1.5))
+    print, 'PBL height - mean profile', heightp_mean(w(0))-heightp_mean(0)
+    ;; mean static stability
+    w = where((staticstab_mean ge 1.5) and (heightp_mean-heightp_mean(0) gt 1.5))
+    print, 'PBL height - mean static stability', heightp_mean(w(0)) - heightp_mean(0)
+
+   ;plot, staticstab, heightp_mean, xrange=[-1.,5.]
+   ;oplot, staticstab, findgen(nz)*0. + heightp_mean(w(0)), linestyle=2
+   ;oplot, staticstab_mean, heightp_mean
+   ;oplot, staticstab_mean, findgen(nz)*0. + heightp_mean(w(0)), linestyle=2
+   ;pause
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+endfor
+endif
+
+  print, '-------------------------------------------------------'
+  print, 'PBL height - min ', min(pbl_depth_tab(*,*,*))
+  print, 'PBL height - max ', max(pbl_depth_tab(*,*,*))
+  print, 'PBL height - mean ', mean(pbl_depth_tab(*,*,*))
+  print, '-------------------------------------------------------'
+
+stop
+
+!p.charthick = 2.0
+!p.thick = 3.0
+!x.thick = 2.0
+!y.thick = 2.0
+set_plot, 'ps' & device, filename='plot/map.ps', /color
+;map_latlon, reform(pbl_depth_tab(*,*,0))
+
+
+what_I_plot = reform(pbl_depth_tab(*,*,0))
+pal=4
+colors=128
+title_user='PBL depth'
+map_latlon, $
+        what_I_plot, $                          ; 2D field
+        lon, $                                  ; 1D latitude
+        lat, $                                  ; 1D longitude
+;        minfield=minfield_init, $               ; minimum value of plotted field (=0: calculate)
+;        maxfield=maxfield_init, $               ; maximum value of plotted field (=0: calculate)
+;        overcontour=overcontour, $              ; another 2D field to overplot with contour lines (=0: no)
+;        overvector_x=overvector_x, $            ; wind vector - x component (=0: no)
+;        overvector_y=overvector_y, $            ; wind vector - y component (=0: no)
+        ct=pal, $                               ; color table (33-rainbow is default)
+        colors=colors, $                        ; number of colors/levels (32 is default)
+        title=title_user;, $                     ; title of the plot ('' is default)
+;        format=format                           ; format of colorbar annotations ('(F6.2)' is default)
+
+
+
+device, /close
+end
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/callphys.def
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/callphys.def	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/callphys.def	(revision 142)
@@ -0,0 +1,94 @@
+General options
+~~~~~~~~~~~~~~~
+tracer    (Run with or without tracer transport ?)
+F
+diurnal   (Diurnal cycle ?  if diurnal=F, diurnal averaged solar heating)
+T
+season    (Seasonal cycle ? if season=F, Ls stays constant like in "start")
+T
+lwrite    (want some more output on the screen ?) 
+F
+stats     (Saving statistics in file "cumul" ?) -- noWRF
+F
+calleofdump (Saving EOF profiles in file "profiles" for Climate Database ?) -- noWRF
+F
+Dust scenario. Used if the dust is prescribed (i.e. if tracer=F or active=F)
+~~~~~~~~~~~~~
+iaervar  (=1 Dust opt.deph read in startfi; =2 Viking scenario; =3 MGS scenario 
+1        (=4 Mars Year 24 from TES assimilation)
+iddist  (Dust vertical distribution: =0: old distrib. (Pollack90) 
+3       (=1: top set by "topdustref"; =2: Viking scenario; =3 MGS scenario )
+topdustref (Dust top altitude (km). Matter only if iddist=1)
+55.
+Physical Parameterizations :
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+callrad   (call radiative transfer ?)
+T
+callnlte (call NLTE radiative schemes ?   matter only if callrad=T)
+F
+callnirco2 (call CO2 NIR absorption ?   matter only if callrad=T)
+F
+calldifv  (call turbulent vertical diffusion ?)
+T
+calladj   (call convective adjustment ?)
+F
+callcond  (call CO2 condensation ?)
+F
+callsoil  (call thermal conduction in the soil ?)
+T
+calllott  (call Lott's gravity wave/subgrid topography scheme ?) -- noWRF
+F
+Radiative transfer options :
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+iradia    (the rad.transfer is computed every "iradia" physical timestep)
+10 
+callg2d   (Output of the exchange coefficient mattrix ? for diagnostic only)
+F
+rayleigh  (Rayleigh scattering : should be =F for now)
+F
+Tracer (dust water, ice and/or chemical species) options (use if tracer=T) :
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+dustbin    (DUST: Transported dust ? (if >0, uses q(1) to q(dustbin))
+0
+active     (DUST: Radiatively active dust ? (uses q(1) to q(dustbin))
+F
+doubleq    (DUST: needs dustbin=1, use mass (q(1)) and number (q(2)) mixing ratio to predict dust size ?)
+F
+lifting    (DUST: lifted by GCM surface winds ?)
+F
+dustdevil  (DUST: lifted by dust devils ?)
+F
+scavenging (DUST: Scavenging by CO2 snowfall ?)
+F
+sedimentation (DUST/WATERICE: Gravitationnal sedimentation ?)
+F
+iceparty   (WATERICE: Water cycle includes water ice mixing ratio q(nqmx-1))
+F
+activice   (WATERICE: Radiatively active transported atmospheric water ice ?)
+F
+water      (WATER: Compute water cycle using q(nqmx) )
+F
+caps       (WATER: put the current permanent caps at both poles)
+F
+photochem  (PHOTOCHEMISTRY: chemical species included)
+F
+Thermospheric options (relevant if tracer=T) :
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+callthermos  (call thermosphere ?)
+F
+thermoswater  (WATER: included without cycle	only if water=F)
+F
+callconduct  (call thermal conduction ?     matter only if callthermos=T)
+F
+calleuv  (call EUV heating ?                matter only if callthermos=T)
+F
+callmolvis  (call molecular viscosity ?     matter only if callthermos=T)
+F
+callmoldiff  (call molecular diffusion ?    matter only if callthermos=T)
+F
+thermochem  (call thermospheric photochemistry ?  matter only if callthermos=T)
+F
+solarcondate (date for solar flux calculation: 1985 < date < 2002))
+1993.4       (Solar min=1996.4 ave=1993.4 max=1990.6)
+
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/dustopacity.def
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/dustopacity.def	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/dustopacity.def	(revision 142)
@@ -0,0 +1,1 @@
+0.3
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input/input_coord
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input/input_coord	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input/input_coord	(revision 142)
@@ -0,0 +1,6 @@
+35.   lon  
+40.   lat   
+0.    ls 
+12.   lct  
+150.  ztop 
+200.  nz  
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input/input_more
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input/input_more	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input/input_more	(revision 142)
@@ -0,0 +1,1 @@
+  -1018.50    275.63
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input/input_sounding
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input/input_sounding	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input/input_sounding	(revision 142)
@@ -0,0 +1,208 @@
+      6.38      272.84        0.00
+  -1018.50      272.84        0.00        0.00        0.00
+  -1017.50      264.93        0.00        5.12        1.21
+  -1013.50      233.27        0.00        6.90        1.63
+  -1008.50      221.99        0.00        7.48        1.77
+   -998.50      221.15        0.00        8.32        1.97
+   -968.50      220.86        0.00        9.44        2.24
+   -918.50      220.83        0.00       10.27        2.44
+   -818.50      220.77        0.00       11.18        2.66
+    -65.74      220.35        0.00       13.74        3.12
+    687.03      220.15        0.00       15.28        2.71
+   1439.79      220.76        0.00       16.43        2.40
+   2192.56      222.16        0.00       17.27        2.34
+   2945.32      223.55        0.00       18.11        2.29
+   3698.08      225.76        0.00       19.82        2.31
+   4450.85      228.41        0.00       21.99        2.36
+   5203.61      231.10        0.00       24.15        2.41
+   5956.37      233.79        0.00       26.27        2.46
+   6709.14      236.46        0.00       28.23        2.47
+   7461.90      239.16        0.00       30.19        2.49
+   8214.67      241.88        0.00       32.15        2.50
+   8967.43      244.62        0.00       34.11        2.51
+   9720.20      247.37        0.00       35.50        2.68
+  10473.00      250.13        0.00       36.69        2.89
+  11225.70      252.92        0.00       37.87        3.11
+  11978.50      255.73        0.00       39.06        3.33
+  12731.20      258.56        0.00       40.24        3.54
+  13484.00      261.41        0.00       41.43        3.76
+  14236.80      264.62        0.00       41.85        3.95
+  14989.50      267.87        0.00       42.27        4.15
+  15742.30      271.15        0.00       42.69        4.35
+  16495.10      274.47        0.00       43.11        4.54
+  17247.80      277.81        0.00       43.53        4.74
+  18000.60      281.19        0.00       43.95        4.93
+  18753.40      284.74        0.00       44.39        5.15
+  19506.10      288.72        0.00       44.90        5.44
+  20258.90      292.76        0.00       45.40        5.73
+  21011.70      296.85        0.00       45.91        6.02
+  21764.40      300.99        0.00       46.41        6.31
+  22517.20      305.18        0.00       46.92        6.59
+  23269.90      309.42        0.00       47.43        6.88
+  24022.70      313.72        0.00       47.93        7.17
+  24775.50      318.27        0.00       48.32        8.04
+  25528.20      322.92        0.00       48.69        9.01
+  26281.00      327.63        0.00       49.06        9.98
+  27033.80      332.41        0.00       49.43       10.96
+  27786.50      337.25        0.00       49.80       11.93
+  28539.30      342.15        0.00       50.17       12.90
+  29292.10      347.12        0.00       50.54       13.87
+  30044.80      352.12        0.00       50.88       14.87
+  30797.60      356.80        0.00       50.95       16.20
+  31550.30      361.52        0.00       51.03       17.52
+  32303.10      366.28        0.00       51.10       18.85
+  33055.90      371.10        0.00       51.17       20.17
+  33808.60      375.97        0.00       51.24       21.50
+  34561.40      380.88        0.00       51.31       22.83
+  35314.20      385.85        0.00       51.38       24.15
+  36066.90      390.82        0.00       51.45       25.23
+  36819.70      395.60        0.00       51.52       25.18
+  37572.50      400.42        0.00       51.60       25.13
+  38325.20      405.28        0.00       51.67       25.08
+  39078.00      410.16        0.00       51.74       25.02
+  39830.70      415.07        0.00       51.81       24.97
+  40583.50      420.02        0.00       51.88       24.92
+  41336.30      424.99        0.00       51.96       24.87
+  42089.00      430.75        0.00       51.91       23.99
+  42841.80      437.58        0.00       51.72       22.04
+  43594.60      444.51        0.00       51.53       20.10
+  44347.30      451.53        0.00       51.34       18.15
+  45100.10      458.65        0.00       51.15       16.20
+  45852.90      465.86        0.00       50.96       14.25
+  46605.60      473.17        0.00       50.77       12.31
+  47358.40      480.59        0.00       50.58       10.36
+  48111.10      492.92        0.00       49.08        7.72
+  48863.90      505.71        0.00       47.55        5.06
+  49616.70      518.82        0.00       46.01        2.39
+  50369.40      532.26        0.00       44.48       -0.27
+  51122.20      546.04        0.00       42.94       -2.93
+  51875.00      560.16        0.00       41.41       -5.59
+  52627.70      574.64        0.00       39.87       -8.25
+  53380.50      589.51        0.00       37.91      -11.20
+  54133.30      604.80        0.00       35.52      -14.45
+  54886.00      620.45        0.00       33.13      -17.69
+  55638.80      636.51        0.00       30.74      -20.93
+  56391.60      652.95        0.00       28.35      -24.18
+  57144.30      669.81        0.00       25.96      -27.42
+  57897.10      687.09        0.00       23.57      -30.66
+  58649.80      704.79        0.00       21.18      -33.91
+  59402.60      719.79        0.00       18.84      -34.10
+  60155.40      733.98        0.00       16.52      -33.23
+  60908.10      748.45        0.00       14.21      -32.35
+  61660.90      763.21        0.00       11.89      -31.48
+  62413.70      778.26        0.00        9.57      -30.60
+  63166.40      793.60        0.00        7.25      -29.72
+  63919.20      809.25        0.00        4.94      -28.85
+  64672.00      825.21        0.00        2.62      -27.97
+  65424.70      842.16        0.00        0.13      -21.15
+  66177.50      859.64        0.00       -2.41      -12.92
+  66930.20      877.47        0.00       -4.94       -4.68
+  67683.00      895.68        0.00       -7.48        3.55
+  68435.80      914.27        0.00      -10.01       11.78
+  69188.50      933.23        0.00      -12.54       20.01
+  69941.30      952.60        0.00      -15.08       28.25
+  70694.10      972.36        0.00      -17.61       36.48
+  71446.80      988.28        0.00      -18.44       41.99
+  72199.60     1003.64        0.00      -18.95       46.99
+  72952.40     1019.21        0.00      -19.46       52.00
+  73705.10     1035.00        0.00      -19.97       57.00
+  74457.90     1051.01        0.00      -20.48       62.01
+  75210.60     1067.25        0.00      -20.99       67.01
+  75963.40     1083.70        0.00      -21.50       72.01
+  76716.20     1100.39        0.00      -22.01       77.02
+  77468.90     1115.82        0.00      -22.88       78.49
+  78221.70     1131.39        0.00      -23.76       79.92
+  78974.50     1147.11        0.00      -24.64       81.34
+  79727.20     1162.99        0.00      -25.53       82.77
+  80480.00     1179.02        0.00      -26.41       84.20
+  81232.80     1195.21        0.00      -27.29       85.62
+  81985.50     1211.55        0.00      -28.17       87.05
+  82738.30     1230.83        0.00      -28.68       87.64
+  83491.00     1253.55        0.00      -28.76       87.31
+  84243.80     1276.67        0.00      -28.85       86.97
+  84996.60     1300.21        0.00      -28.93       86.64
+  85749.30     1324.16        0.00      -29.02       86.30
+  86502.10     1348.53        0.00      -29.10       85.96
+  87254.90     1373.33        0.00      -29.19       85.63
+  88007.60     1397.47        0.00      -28.44       84.15
+  88760.40     1418.47        0.00      -25.09       79.08
+  89513.20     1439.70        0.00      -21.74       74.01
+  90265.90     1461.15        0.00      -18.38       68.94
+  91018.70     1482.83        0.00      -15.03       63.87
+  91771.40     1504.72        0.00      -11.68       58.80
+  92524.20     1526.84        0.00       -8.32       53.73
+  93277.00     1550.99        0.00       -6.28       49.22
+  94029.70     1580.34        0.00       -7.74       46.18
+  94782.50     1610.21        0.00       -9.20       43.13
+  95535.30     1640.60        0.00      -10.66       40.09
+  96288.00     1671.52        0.00      -12.11       37.05
+  97040.80     1702.98        0.00      -13.57       34.01
+  97793.60     1734.99        0.00      -15.03       30.97
+  98546.30     1770.81        0.00      -17.53       30.51
+  99299.50     1809.75        0.00      -20.77       31.89
+ 100051.50     1849.47        0.00      -24.00       33.26
+ 100804.50     1890.11        0.00      -27.24       34.64
+ 101557.50     1931.63        0.00      -30.48       36.02
+ 102310.50     1974.04        0.00      -33.72       37.40
+ 103062.50     2017.22        0.00      -36.94       38.81
+ 103815.50     2058.20        0.00      -39.74       41.27
+ 104568.50     2099.97        0.00      -42.53       43.73
+ 105321.50     2142.54        0.00      -45.33       46.19
+ 106073.50     2185.86        0.00      -48.12       48.65
+ 106826.50     2230.07        0.00      -50.91       51.11
+ 107579.50     2275.13        0.00      -53.71       53.57
+ 108332.50     2316.71        0.00      -56.35       55.75
+ 109085.50     2355.88        0.00      -58.87       57.74
+ 109837.50     2395.48        0.00      -61.40       59.73
+ 110590.50     2435.59        0.00      -63.92       61.71
+ 111343.50     2476.17        0.00      -66.45       63.70
+ 112096.50     2517.22        0.00      -68.98       65.69
+ 112848.50     2574.57        0.00      -71.23       67.46
+ 113601.50     2659.08        0.00      -73.04       68.91
+ 114354.50     2746.23        0.00      -74.85       70.36
+ 115107.50     2836.13        0.00      -76.66       71.80
+ 115859.50     2928.72        0.00      -78.47       73.25
+ 116612.50     3024.33        0.00      -80.29       74.69
+ 117365.50     3136.39        0.00      -82.01       75.93
+ 118118.50     3309.24        0.00      -83.39       76.31
+ 118870.50     3488.11        0.00      -84.77       76.69
+ 119623.50     3673.68        0.00      -86.16       77.06
+ 120376.50     3865.90        0.00      -87.54       77.44
+ 121129.50     4064.98        0.00      -88.92       77.82
+ 121882.50     4271.15        0.00      -90.30       78.19
+ 122634.50     4483.65        0.00      -91.63       78.49
+ 123387.50     4699.28        0.00      -92.69       78.31
+ 124140.50     4921.19        0.00      -93.75       78.13
+ 124893.50     5149.55        0.00      -94.82       77.95
+ 125645.50     5384.20        0.00      -95.88       77.77
+ 126398.50     5625.92        0.00      -96.94       77.59
+ 127151.50     5874.58        0.00      -98.00       77.41
+ 127904.50     6130.34        0.00      -99.07       77.23
+ 128656.50     6393.02        0.00     -100.13       77.05
+ 129409.50     6649.73        0.00     -101.13       76.83
+ 130162.50     6853.02        0.00     -101.87       76.43
+ 130915.50     7060.74        0.00     -102.62       76.03
+ 131667.50     7272.68        0.00     -103.36       75.63
+ 132420.50     7489.50        0.00     -104.11       75.23
+ 133173.50     7711.01        0.00     -104.85       74.82
+ 133926.50     7937.29        0.00     -105.60       74.42
+ 134678.50     8168.13        0.00     -106.34       74.02
+ 135431.50     8404.23        0.00     -107.09       73.62
+ 136184.50     8645.38        0.00     -107.84       73.22
+ 136937.50     8891.68        0.00     -108.58       72.82
+ 137690.50     9143.22        0.00     -109.33       72.42
+ 138442.50     9334.35        0.00     -109.77       72.01
+ 139195.50     9520.31        0.00     -110.17       71.61
+ 139948.50     9709.37        0.00     -110.57       71.21
+ 140701.50     9901.58        0.00     -110.97       70.81
+ 141453.50    10096.72        0.00     -111.37       70.40
+ 142206.50    10295.37        0.00     -111.77       70.00
+ 142959.50    10497.31        0.00     -112.17       69.60
+ 143712.50    10702.60        0.00     -112.57       69.19
+ 144464.50    10911.01        0.00     -112.97       68.79
+ 145217.50    11123.14        0.00     -113.38       68.39
+ 145970.50    11338.77        0.00     -113.78       67.99
+ 146723.50    11557.95        0.00     -114.18       67.58
+ 147475.50    11780.45        0.00     -114.58       67.18
+ 148228.50    11982.78        0.00     -114.88       66.82
+ 148981.50    12153.19        0.00     -115.02       66.51
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input_coord
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input_coord	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input_coord	(revision 142)
@@ -0,0 +1,6 @@
+35.   lon  
+40.   lat   
+0.    ls 
+12.   lct  
+150.  ztop 
+200.  nz  
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input_more
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input_more	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input_more	(revision 142)
@@ -0,0 +1,1 @@
+  -1018.50    275.63
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input_sounding
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input_sounding	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/input_sounding	(revision 142)
@@ -0,0 +1,208 @@
+      6.38      272.84        0.00
+  -1018.50      272.84        0.00        0.00        0.00
+  -1017.50      264.93        0.00        5.12        1.21
+  -1013.50      233.27        0.00        6.90        1.63
+  -1008.50      221.99        0.00        7.48        1.77
+   -998.50      221.15        0.00        8.32        1.97
+   -968.50      220.86        0.00        9.44        2.24
+   -918.50      220.83        0.00       10.27        2.44
+   -818.50      220.77        0.00       11.18        2.66
+    -65.74      220.35        0.00       13.74        3.12
+    687.03      220.15        0.00       15.28        2.71
+   1439.79      220.76        0.00       16.43        2.40
+   2192.56      222.16        0.00       17.27        2.34
+   2945.32      223.55        0.00       18.11        2.29
+   3698.08      225.76        0.00       19.82        2.31
+   4450.85      228.41        0.00       21.99        2.36
+   5203.61      231.10        0.00       24.15        2.41
+   5956.37      233.79        0.00       26.27        2.46
+   6709.14      236.46        0.00       28.23        2.47
+   7461.90      239.16        0.00       30.19        2.49
+   8214.67      241.88        0.00       32.15        2.50
+   8967.43      244.62        0.00       34.11        2.51
+   9720.20      247.37        0.00       35.50        2.68
+  10473.00      250.13        0.00       36.69        2.89
+  11225.70      252.92        0.00       37.87        3.11
+  11978.50      255.73        0.00       39.06        3.33
+  12731.20      258.56        0.00       40.24        3.54
+  13484.00      261.41        0.00       41.43        3.76
+  14236.80      264.62        0.00       41.85        3.95
+  14989.50      267.87        0.00       42.27        4.15
+  15742.30      271.15        0.00       42.69        4.35
+  16495.10      274.47        0.00       43.11        4.54
+  17247.80      277.81        0.00       43.53        4.74
+  18000.60      281.19        0.00       43.95        4.93
+  18753.40      284.74        0.00       44.39        5.15
+  19506.10      288.72        0.00       44.90        5.44
+  20258.90      292.76        0.00       45.40        5.73
+  21011.70      296.85        0.00       45.91        6.02
+  21764.40      300.99        0.00       46.41        6.31
+  22517.20      305.18        0.00       46.92        6.59
+  23269.90      309.42        0.00       47.43        6.88
+  24022.70      313.72        0.00       47.93        7.17
+  24775.50      318.27        0.00       48.32        8.04
+  25528.20      322.92        0.00       48.69        9.01
+  26281.00      327.63        0.00       49.06        9.98
+  27033.80      332.41        0.00       49.43       10.96
+  27786.50      337.25        0.00       49.80       11.93
+  28539.30      342.15        0.00       50.17       12.90
+  29292.10      347.12        0.00       50.54       13.87
+  30044.80      352.12        0.00       50.88       14.87
+  30797.60      356.80        0.00       50.95       16.20
+  31550.30      361.52        0.00       51.03       17.52
+  32303.10      366.28        0.00       51.10       18.85
+  33055.90      371.10        0.00       51.17       20.17
+  33808.60      375.97        0.00       51.24       21.50
+  34561.40      380.88        0.00       51.31       22.83
+  35314.20      385.85        0.00       51.38       24.15
+  36066.90      390.82        0.00       51.45       25.23
+  36819.70      395.60        0.00       51.52       25.18
+  37572.50      400.42        0.00       51.60       25.13
+  38325.20      405.28        0.00       51.67       25.08
+  39078.00      410.16        0.00       51.74       25.02
+  39830.70      415.07        0.00       51.81       24.97
+  40583.50      420.02        0.00       51.88       24.92
+  41336.30      424.99        0.00       51.96       24.87
+  42089.00      430.75        0.00       51.91       23.99
+  42841.80      437.58        0.00       51.72       22.04
+  43594.60      444.51        0.00       51.53       20.10
+  44347.30      451.53        0.00       51.34       18.15
+  45100.10      458.65        0.00       51.15       16.20
+  45852.90      465.86        0.00       50.96       14.25
+  46605.60      473.17        0.00       50.77       12.31
+  47358.40      480.59        0.00       50.58       10.36
+  48111.10      492.92        0.00       49.08        7.72
+  48863.90      505.71        0.00       47.55        5.06
+  49616.70      518.82        0.00       46.01        2.39
+  50369.40      532.26        0.00       44.48       -0.27
+  51122.20      546.04        0.00       42.94       -2.93
+  51875.00      560.16        0.00       41.41       -5.59
+  52627.70      574.64        0.00       39.87       -8.25
+  53380.50      589.51        0.00       37.91      -11.20
+  54133.30      604.80        0.00       35.52      -14.45
+  54886.00      620.45        0.00       33.13      -17.69
+  55638.80      636.51        0.00       30.74      -20.93
+  56391.60      652.95        0.00       28.35      -24.18
+  57144.30      669.81        0.00       25.96      -27.42
+  57897.10      687.09        0.00       23.57      -30.66
+  58649.80      704.79        0.00       21.18      -33.91
+  59402.60      719.79        0.00       18.84      -34.10
+  60155.40      733.98        0.00       16.52      -33.23
+  60908.10      748.45        0.00       14.21      -32.35
+  61660.90      763.21        0.00       11.89      -31.48
+  62413.70      778.26        0.00        9.57      -30.60
+  63166.40      793.60        0.00        7.25      -29.72
+  63919.20      809.25        0.00        4.94      -28.85
+  64672.00      825.21        0.00        2.62      -27.97
+  65424.70      842.16        0.00        0.13      -21.15
+  66177.50      859.64        0.00       -2.41      -12.92
+  66930.20      877.47        0.00       -4.94       -4.68
+  67683.00      895.68        0.00       -7.48        3.55
+  68435.80      914.27        0.00      -10.01       11.78
+  69188.50      933.23        0.00      -12.54       20.01
+  69941.30      952.60        0.00      -15.08       28.25
+  70694.10      972.36        0.00      -17.61       36.48
+  71446.80      988.28        0.00      -18.44       41.99
+  72199.60     1003.64        0.00      -18.95       46.99
+  72952.40     1019.21        0.00      -19.46       52.00
+  73705.10     1035.00        0.00      -19.97       57.00
+  74457.90     1051.01        0.00      -20.48       62.01
+  75210.60     1067.25        0.00      -20.99       67.01
+  75963.40     1083.70        0.00      -21.50       72.01
+  76716.20     1100.39        0.00      -22.01       77.02
+  77468.90     1115.82        0.00      -22.88       78.49
+  78221.70     1131.39        0.00      -23.76       79.92
+  78974.50     1147.11        0.00      -24.64       81.34
+  79727.20     1162.99        0.00      -25.53       82.77
+  80480.00     1179.02        0.00      -26.41       84.20
+  81232.80     1195.21        0.00      -27.29       85.62
+  81985.50     1211.55        0.00      -28.17       87.05
+  82738.30     1230.83        0.00      -28.68       87.64
+  83491.00     1253.55        0.00      -28.76       87.31
+  84243.80     1276.67        0.00      -28.85       86.97
+  84996.60     1300.21        0.00      -28.93       86.64
+  85749.30     1324.16        0.00      -29.02       86.30
+  86502.10     1348.53        0.00      -29.10       85.96
+  87254.90     1373.33        0.00      -29.19       85.63
+  88007.60     1397.47        0.00      -28.44       84.15
+  88760.40     1418.47        0.00      -25.09       79.08
+  89513.20     1439.70        0.00      -21.74       74.01
+  90265.90     1461.15        0.00      -18.38       68.94
+  91018.70     1482.83        0.00      -15.03       63.87
+  91771.40     1504.72        0.00      -11.68       58.80
+  92524.20     1526.84        0.00       -8.32       53.73
+  93277.00     1550.99        0.00       -6.28       49.22
+  94029.70     1580.34        0.00       -7.74       46.18
+  94782.50     1610.21        0.00       -9.20       43.13
+  95535.30     1640.60        0.00      -10.66       40.09
+  96288.00     1671.52        0.00      -12.11       37.05
+  97040.80     1702.98        0.00      -13.57       34.01
+  97793.60     1734.99        0.00      -15.03       30.97
+  98546.30     1770.81        0.00      -17.53       30.51
+  99299.50     1809.75        0.00      -20.77       31.89
+ 100051.50     1849.47        0.00      -24.00       33.26
+ 100804.50     1890.11        0.00      -27.24       34.64
+ 101557.50     1931.63        0.00      -30.48       36.02
+ 102310.50     1974.04        0.00      -33.72       37.40
+ 103062.50     2017.22        0.00      -36.94       38.81
+ 103815.50     2058.20        0.00      -39.74       41.27
+ 104568.50     2099.97        0.00      -42.53       43.73
+ 105321.50     2142.54        0.00      -45.33       46.19
+ 106073.50     2185.86        0.00      -48.12       48.65
+ 106826.50     2230.07        0.00      -50.91       51.11
+ 107579.50     2275.13        0.00      -53.71       53.57
+ 108332.50     2316.71        0.00      -56.35       55.75
+ 109085.50     2355.88        0.00      -58.87       57.74
+ 109837.50     2395.48        0.00      -61.40       59.73
+ 110590.50     2435.59        0.00      -63.92       61.71
+ 111343.50     2476.17        0.00      -66.45       63.70
+ 112096.50     2517.22        0.00      -68.98       65.69
+ 112848.50     2574.57        0.00      -71.23       67.46
+ 113601.50     2659.08        0.00      -73.04       68.91
+ 114354.50     2746.23        0.00      -74.85       70.36
+ 115107.50     2836.13        0.00      -76.66       71.80
+ 115859.50     2928.72        0.00      -78.47       73.25
+ 116612.50     3024.33        0.00      -80.29       74.69
+ 117365.50     3136.39        0.00      -82.01       75.93
+ 118118.50     3309.24        0.00      -83.39       76.31
+ 118870.50     3488.11        0.00      -84.77       76.69
+ 119623.50     3673.68        0.00      -86.16       77.06
+ 120376.50     3865.90        0.00      -87.54       77.44
+ 121129.50     4064.98        0.00      -88.92       77.82
+ 121882.50     4271.15        0.00      -90.30       78.19
+ 122634.50     4483.65        0.00      -91.63       78.49
+ 123387.50     4699.28        0.00      -92.69       78.31
+ 124140.50     4921.19        0.00      -93.75       78.13
+ 124893.50     5149.55        0.00      -94.82       77.95
+ 125645.50     5384.20        0.00      -95.88       77.77
+ 126398.50     5625.92        0.00      -96.94       77.59
+ 127151.50     5874.58        0.00      -98.00       77.41
+ 127904.50     6130.34        0.00      -99.07       77.23
+ 128656.50     6393.02        0.00     -100.13       77.05
+ 129409.50     6649.73        0.00     -101.13       76.83
+ 130162.50     6853.02        0.00     -101.87       76.43
+ 130915.50     7060.74        0.00     -102.62       76.03
+ 131667.50     7272.68        0.00     -103.36       75.63
+ 132420.50     7489.50        0.00     -104.11       75.23
+ 133173.50     7711.01        0.00     -104.85       74.82
+ 133926.50     7937.29        0.00     -105.60       74.42
+ 134678.50     8168.13        0.00     -106.34       74.02
+ 135431.50     8404.23        0.00     -107.09       73.62
+ 136184.50     8645.38        0.00     -107.84       73.22
+ 136937.50     8891.68        0.00     -108.58       72.82
+ 137690.50     9143.22        0.00     -109.33       72.42
+ 138442.50     9334.35        0.00     -109.77       72.01
+ 139195.50     9520.31        0.00     -110.17       71.61
+ 139948.50     9709.37        0.00     -110.57       71.21
+ 140701.50     9901.58        0.00     -110.97       70.81
+ 141453.50    10096.72        0.00     -111.37       70.40
+ 142206.50    10295.37        0.00     -111.77       70.00
+ 142959.50    10497.31        0.00     -112.17       69.60
+ 143712.50    10702.60        0.00     -112.57       69.19
+ 144464.50    10911.01        0.00     -112.97       68.79
+ 145217.50    11123.14        0.00     -113.38       68.39
+ 145970.50    11338.77        0.00     -113.78       67.99
+ 146723.50    11557.95        0.00     -114.18       67.58
+ 147475.50    11780.45        0.00     -114.58       67.18
+ 148228.50    11982.78        0.00     -114.88       66.82
+ 148981.50    12153.19        0.00     -115.02       66.51
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/launch
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/launch	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/launch	(revision 142)
@@ -0,0 +1,10 @@
+#! /bin/bash
+
+nproc=4
+
+ideal.exe
+mv rsl.out.0000 ideal_rsl.out.0000
+
+\rm rsl.*
+\rm wrfout*
+mpirun -np $nproc wrf.exe < /dev/null &
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/namelist.input
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/namelist.input	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/LES/namelist.input	(revision 142)
@@ -0,0 +1,128 @@
+ &time_control
+ run_days                            = 0,
+ run_hours                           = 1,
+ run_minutes                         = 00,
+ run_seconds                         = 00,
+ start_year                          = 2024, 0001, 0001,
+ start_month                         = 01,   01,   01,
+ start_day                           = 01,   01,   01,
+ start_hour                          = 12,   01,   00,
+ start_minute                        = 00,   30,   00,
+ start_second                        = 00,   00,   00,
+ end_year                            = 2024, 0001, 0001,
+ end_month                           = 01,   01,   01,
+ end_day                             = 01,   01,   01,
+ end_hour                            = 13,   02,   00,
+ end_minute                          = 00,   30,   00,
+ end_second                          = 00,   00,   00,
+ history_interval_m                  = 00,   10,   1,
+ history_interval_s                  = 37,   00,   1,
+ frames_per_outfile                  = 100, 1000, 1000,
+ restart                             = .false.,
+ restart_interval_m                  = 60,
+ io_form_history                     = 2
+ io_form_restart                     = 2
+ io_form_input                       = 2
+ io_form_boundary                    = 2
+ debug_level                         = 0
+ /
+
+ &domains
+ time_step                           = 0,
+ time_step_fract_num                 = 1,
+ time_step_fract_den                 = 2,
+ max_dom                             = 1,
+ s_we                                = 1,     1,     1,
+ e_we                                = 153,   100,    151,
+ s_sn                                = 1,     1,     1,
+ e_sn                                = 153,   100,    151,
+ s_vert                              = 1,     1,     1,
+ e_vert                              = 71,   100,    41,
+ dx                                  = 100,   50,    16.6667, 
+ dy                                  = 100,   50,    16.6667, 
+ ztop                                = 11000,  2000,  2000,
+ grid_id                             = 1,     2,     3,
+ parent_id                           = 0,     1,     2,
+ i_parent_start                      = 0,     10,    15,
+ j_parent_start                      = 0,     10,    15,
+ parent_grid_ratio                   = 1,     3,     3,
+ parent_time_step_ratio              = 1,     3,     3,
+ feedback                            = 0,
+ smooth_option                       = 0
+ /
+
+ &physics
+ mp_physics                          = 0,     0,     0,
+ ra_lw_physics                       = 0,     0,     0,
+ ra_sw_physics                       = 0,     0,     0,
+ radt                                = 148,   0,     0,
+ sf_sfclay_physics                   = 0,     1,     1,
+ sf_surface_physics                  = 0,     0,     0,
+ bl_pbl_physics                      = 0,     0,     0,
+ bldt                                = 0,     0,     0,
+ cu_physics                          = 0,     0,     0,
+ cudt                                = 0,     0,     0,
+ isfflx                              = 2,
+ ifsnow                              = 0,
+ icloud                              = 0,
+ num_soil_layers                     = 5,
+ mp_zero_out                         = 0,
+ !!!
+ init_TI = 100.,             !! Define constant thermal inertia value
+ init_AL = 0.27,             !! Define constant albedo value
+ num_soil_layers = 10.
+ /
+
+ &fdda
+ /
+
+ &dynamics
+ rk_ord                              = 3,
+ diff_opt                            = 2,
+ km_opt                              = 2,
+ damp_opt                            = 0,
+ zdamp                               = 15000.,  5000.,  5000.,
+ dampcoef                            = 0.1,    0.2,    0.2
+! khdif                               = 1.,      1.,    .05,
+! kvdif                               = 1.,      1.,    .05,
+ c_s                                 = 0.18
+ c_k                                 = 0.10
+! mix_isotropic                       = 1
+ smdiv                               = 0.1,    0.1,    0.1,
+ emdiv                               = 0.01,   0.01,   0.01,
+ epssm                               = 0.1,    0.1,    0.1
+! tke_heat_flux                       = 0.24,   0.24,   0.24,
+ time_step_sound                     = 6,      6,      6,
+ h_mom_adv_order                     = 5,      5,      5,
+ v_mom_adv_order                     = 3,      3,      3,
+ h_sca_adv_order                     = 5,      5,      5,
+ v_sca_adv_order                     = 3,      3,      3,
+! mix_full_fields                     = .true., .true., .true.,
+ non_hydrostatic                     = .true., .true., .true.,
+! pert_coriolis                       = .true., .true., .true.,
+! base_pres = 610.
+! base_temp = 220.
+! base_lapse = 30.
+ /
+
+ &bdy_control
+ periodic_x                          = .true., .false.,.false.,
+ symmetric_xs                        = .false.,.false.,.false.,
+ symmetric_xe                        = .false.,.false.,.false.,
+ open_xs                             = .false.,.false.,.false.,
+ open_xe                             = .false.,.false.,.false.,
+ periodic_y                          = .true., .false.,.false.,
+ symmetric_ys                        = .false.,.false.,.false.,
+ symmetric_ye                        = .false.,.false.,.false.,
+ open_ys                             = .false.,.false.,.false.,
+ open_ye                             = .false.,.false.,.false.,
+ nested                              = .false., .true., .true.,
+ /
+
+ &grib2
+ /
+
+ &namelist_quilt
+ nio_tasks_per_group = 0,
+ nio_groups = 1,
+ /
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/README.les
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/README.les	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/README.les	(revision 142)
@@ -0,0 +1,42 @@
+The ideal em_les test case:
+
+This test case produces a large-eddy simulation (LES) of a free
+convective boundary layer (CBL).  The environmental wind (or
+the initial wind profile) is set to zero in this default case.  
+The turbulence of the free CBL is driven/maintained by the surface 
+heat flux, which is specified in the namelist as tke_heat_flux=0.24 
+(in MKS units).
+
+A random perturbation is imposed initially on the mean temperature 
+field at the lowest four grid levels to kick off the
+turbulent motion. Double periodic boundary condition
+is used in x and y.
+
+The default version uses a grid resolution of
+dx=dy=100m and dz=50m, which is considered to be rather coarse 
+for an LES of the CBL.  A typical grid mesh for an LES
+of the CBL is dx=dy=50m and dz=20m.  An LES flow field is more
+accurate when the grid resolution is finer because it resolves
+more turbulent scales.  
+
+This LES version uses the Deardorff's TKE scheme to compute the SGS
+eddy viscosity and eddy diffusivity for turbulent mixing, that is
+diff_opt=2 and km_opt = 2 in the namelist.  The Coriolis parameter
+is set to f = 10^-4/s.
+
+It takes at least 30 minutes of simulation time to spin up the
+turbulent flow field; only after the spin-up, the turbulence inside
+the CBL is considered well established.  A sign of well-established
+turbulence is that the total (i.e., the resolved-scale plus the
+subgrid-scale) heat flux profile should decrease linearly with height
+within the CBL.
+
+To simulate a CBL with a mean wind, change the initial wind
+profile in the input sounding.   
+When pert_coriolis= true is set in the namelist, there is no need to 
+include the geostrophic wind terms in the right-hand sides of
+the u and v equations for LESs with non-zero geostrophic wind. 
+
+Note, parameterization constants, c_s and c_k in this namelist are
+different from the defaults and are the ones recommended to use with LES.
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/Registry.EM_example
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/Registry.EM_example	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/Registry.EM_example	(revision 142)
@@ -0,0 +1,1507 @@
+## WARNING: this file is autogenerated from Registry/Registry.EM. Changes may be lost
+# Registry file, EM
+#                                               
+# At the present time this file is managed manually and edited by hand.                                         
+#                                               
+################################################################################
+# Dimension specifications
+#
+# This section of the Registry file is used to specify the dimensions
+# that will be used to define arrays. Dim is the one-letter name of the
+# dimension.  How defined can either be "standard_domain", which means
+# that the dimension (1) is one of the three spatial dimensions and (2)
+# it will be set using the standard namelist mechanism and domain data
+# structure dimension fields (e.g. sd31,ed31,sd32...).
+#
+# Order refers to which of the three sets of just-mentioned internal
+# dimension variables the dimension is referred to by in the driver.
+# That is, is it the first, second, or third dimension.  The registry
+# infers the mapping of its internal dimensions according to the
+# combination of Order and Coord-axis that are specified in this table.
+# 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
+# to maintain the three physical domain dimensions.
+# 
+# "How defined" can also specify the name of a namelist variable from which
+# the definition for the dimension will come; this is specified as
+# "namelist=<variable name>".  The namelist variable must have been
+# defined as an integer and with only one entry in the rconfig table. Or
+# a constant can be specified.  The coordinate axis for the dimension is
+# either X, Y, Z, or C (for "not a spatial dimension").  The Dimname is
+# the descriptive name of the dimension that will be included in the
+# metadata in data sets.  Note that the b, f, and t modifiers that appear
+# as the last characters of dimension strings used # in state and # i1
+# registry definitions are not dimensions and do not need to be declared
+# here.
+#
+
+# Available characters for dimspec: 0123456789@%+=|?.!&[{}]
+
+#<Table>  <Dim>  <Order> <How defined>         <Coord-axis>  <Dimname in Datasets>
+dimspec    i      1     standard_domain              x          west_east
+dimspec    j      3     standard_domain              y          south_north
+dimspec    k      2     standard_domain              z          bottom_top
+dimspec    l      2     namelist=num_soil_layers     z          soil_layers
+dimspec    u      2     namelist=num_land_cat        z          land_cat
+dimspec    s      2     namelist=num_soil_cat        z          soil_cat
+dimspec    p      -     constant=7501                c          microphysics_rstrt_state
+dimspec    w      -     namelist=spec_bdy_width      c          spec_bdy_width
+dimspec    e      3     namelist=ensdim              z          ensemble dimension
+dimspec    z      -     namelist=max_obs          c          max_obs
+dimspec    h      -     namelist=nobs_err_flds    c          nobs_err_flds
+dimspec    r      -     namelist=nobs_ndg_vars    c          nobs_ndg_vars
+dimspec    g      2     namelist=num_metgrid_levels  z          num_metgrid_levels
+dimspec    m      2     constant=12                  z          months_per_year
+dimspec    a      -     namelist=cam_abs_dim1     c          cam_abs_dim1
+dimspec    c      -     namelist=cam_abs_dim2     z          cam_abs_dim2
+dimspec    q      2     namelist=levsiz           z          levsiz
+dimspec    d      2     namelist=paerlev          z          paerlev
+dimspec    v      -     constant=1                z          one
+
+
+################################################################################
+################################################################################
+################################################################################
+
+
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+#### 
+#### variables physiques ecrites dans les fichiers WRF
+#### - h indique l'ecriture
+#### - en commentaire, les variables physiques dans physiq.F
+#### - utiliser le script automatique Registry.bash
+####
+#### YOU CAN OUTPUT ANY 2D OR 3D VARIABLE THAT IS AVAILABLE IN MESO_PHYSIQ.F
+####
+state  real  TSURF     ij   misc  1  -  rhd  "TSURF"     "SURF TEMPERATURE"                "K"       #SAVEMARS2 tsurf
+state  real  CO2ICE    ij   misc  1  -  rd   "CO2ICE"    "CO2 GROUND ICE"                  "kg"      #SAVEMARS2 co2ice
+state  real  EMISSIV   ij   misc  1  -  rd   "EMISSIV"   "EMISSIVITY"                      ""        #SAVEMARS2 emis
+state  real  THETA     ij   misc  1  -  rd   "THETA"     "SLOPE INCLINATION"               "deg"     #SAVEMARS2 theta_sl
+state  real  PSI       ij   misc  1  -  rd   "PSI"       "SLOPE ORIENTATION"               "deg"     #SAVEMARS2 psi_sl
+state  real  TAU_DUST  ij   misc  1  -  rhd  "TAU_DUST"  "REFERENCE VISIBLE DUST OPACITY"  ""        #SAVEMARS2 tauref
+state  real  SWDOWN    ij   misc  1  -  rhd  "SWDOWN"    "DOWNWARD SW FLUX AT SURFACE"     "W m-2"   #SAVEMARS2 fluxsurf_sw_tot      
+state  real  LWDOWN    ij   misc  1  -  rhd  "LWDOWN"    "DOWNWARD LW FLUX AT SURFACE"     "W m-2"   #SAVEMARS2 fluxsurf_lw
+state  real  SWUP      ij   misc  1  -  rhd  "SWUP"      "UPWARD SW FLUX AT TOP"           "W m-2"   #SAVEMARS2 fluxtop_sw_tot    
+state  real  LWUP      ij   misc  1  -  rhd  "LWUP"      "UPWARD LW FLUX AT TOP"           "W m-2"   #SAVEMARS2 fluxtop_lw
+state  real  MTOT      ij   misc  1  -  rd   "MTOT"      "TOTAL MASS WATER VAPOR"          "kg m-2"  #SAVEMARS2 mtot
+state  real  ICETOT    ij   misc  1  -  rd   "ICETOT"    "TOTAL MASS WATER ICE"            "kg m-2"  #SAVEMARS2 icetot
+state  real  RAVE      ij   misc  1  -  rd   "RAVE"      "MEAN ICE RADIUS"                 "m"       #SAVEMARS2 rave
+state  real  RICE      ikj  misc  1  -  rd   "RICE"      "ICE RADIUS"                      "m"       #SAVEMARS3 rice
+####
+####
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+####
+####
+#### TRACEURS: POUR L'INSTANT NE PAS CHANGER L'ORDRE (>> mais l'ordre n'est-il pas defini plus bas ? dans les options mars ?)
+#### - effacer le h si l'on veut eviter les sorties
+####
+state  real  -         ikjftb  scalar  1  -  -                         -
+state  real  QH2O      ikjftb  scalar  1  -  i01rhusdf=(bdy_interp:dt) "QH2O"       "Water vapor mixing ratio"   "kg kg-1"
+state  real  QH2O_ICE  ikjftb  scalar  1  -  i01rhusdf=(bdy_interp:dt) "QH2O_ICE"   "Water ice mixing ratio"     "kg kg-1"
+state  real  QDUST     ikjftb  scalar  1  -  i01rhusdf=(bdy_interp:dt) "QDUST"      "Dust mixing ratio"          "kg kg-1"
+####
+####
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+
+
+
+################################################################################
+################################################################################
+################################################################################
+
+
+
+# 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> <Type> <Sym>         <Dims>   <Use>   <NumTLev> <Stagger> <IO>     <DNAME>             <DESCRIP>     <UNITS>   
+#
+
+# It is required that LU_INDEX appears before any variable that is
+# interpolated with a mask, as lu_index supplies that mask.
+# this next 1 is for the HFSoLE/PET demo; writing these to auxhist1 output over MCEL for coupling
+# with wave model, only if compiled with -DMCELIO, JM 2003/05/29
+state    real  LU_INDEX         ij      misc        1         -     ir01d=(interp_fcnm)u=(copy_fcnm)   "LU_INDEX"              "LAND USE CATEGORY"         ""
+state    real  LU_MASK          ij      misc        1         -     i3h1     "LU_MASK"              "0 land 1 water"         ""
+
+#
+# Variables from WPS
+#
+state    real   u_gc           igj      dyn_em      1        XZ    i1  "UU"     "x-wind component"    "m s-1"
+state    real   v_gc           igj      dyn_em      1        YZ    i1  "VV"     "y-wind component"    "m s-1"
+state    real   t_gc           igj      dyn_em      1        Z     i1  "TT"     "temperature"         "K"
+state    real   rh_gc          igj      dyn_em      1        Z     i1  "RH"    "relative humidity"   "%"
+state    real   ght_gc         igj      dyn_em      1        Z     i1  "GHT"   "geopotential height" "m"
+state    real   p_gc           igj      dyn_em      1        Z     i1  "PRES"   "pressure"            "Pa"
+state    real   xlat_gc        ij       dyn_em      1        -     i1  "XLAT_M" "latitude, positive north" "degrees"
+state    real   xlong_gc       ij       dyn_em      1        -     i1  "XLONG_M" "longitude, positive east" "degrees"
+state    real   ht_gc          ij       dyn_em      1        -     i1  "HGT_M" "topography elevation" "m"
+state    real   tsk_gc         ij       dyn_em      1        -     i1  "SKINTEMP"  "skin temperature"  "K"
+state    real   tavgsfc        ij       dyn_em      1        -     i1  "TAVGSFC"  "daily mean of surface air temperature"  "K"
+state    real   tmn_gc         ij       dyn_em      1        -     i1  "SOILTEMP"  "annual mean deep soil temperature"  "K"
+state    real   pslv_gc        ij       dyn_em      1        -     i1  "PMSL"  "sea level pressure"  "Pa"
+state    real   greenfrac      imj      dyn_em      1        Z     i1  "GREENFRAC" "monthly greenness fraction" "0 - 1 fraction"
+state    real   albedo12m      imj      dyn_em      1        Z     i1  "ALBEDO12M" "background albedo" "0 - 1 fraction"
+state    real   pd_gc          igj      dyn_em      1        Z     -   "PD"    "dry pressure"        "Pa"
+state    real   psfc_gc        ij       dyn_em      1        -      -  "PSFC_GC"     "surface pressure"            "Pa"
+state    real   intq_gc        ij       dyn_em      1        -     -   "INTQ"  "integrated mixing ratio" "Pa"
+state    real   pdhs           ij       dyn_em      1        -     -   "PDHS"  "hydrostatic dry surface pressure" "Pa"
+state    real   qv_gc          igj      dyn_em      1        Z     i1  "QV"     "mixing ratio"        "kg kg-1"
+#state    real   qr_gc          igj      dyn_em      1        Z     i1  "QR"    "rain water mixing ratio"   "kg kg-1"
+#state    real   qc_gc          igj      dyn_em      1        Z     i1  "QC"    "cloud water mixing ratio"   "kg kg-1"
+#state    real   qs_gc          igj      dyn_em      1        Z     i1  "QS"    "snow mixing ratio"   "kg kg-1"
+#state    real   qi_gc          igj      dyn_em      1        Z     i1  "QI"    "cloud ice mixing ratio"   "kg kg-1"
+#state    real   qg_gc          igj      dyn_em      1        Z     i1  "QG"    "graupel mixing ratio"   "kg kg-1"
+
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS     
+####
+#### INITIALISATION
+####
+#### variables dans real
+####
+state  real   albedo_gcm_gc   ij   dyn_em  1  -  i1  "ALBEDO_GCM"       "albedo of naked ground"  "0 - 1 fraction"
+state  real   therm_inert_gc  ij   dyn_em  1  -  i1  "THERMAL_INERTIA"  "thermal inertia"         "J/m2/K/s0.5"
+state  real   slpx_gc         ij   dyn_em  1  -  i1  "SLPX"             "slope x direction"       "rad"
+state  real   slpy_gc         ij   dyn_em  1  -  i1  "SLPY"             "slope y direction"       "rad"
+state  real   hv_gc          igj   dyn_em  1  Z  i1  "HV"               "water vapor"             "kg/kg" 
+state  real   hi_gc          igj   dyn_em  1  Z  i1  "HI"               "water ice"               "kg/kg"
+state  real   tsoil_gc       igj   dyn_em  1  Z  i1  "TSOIL"            "soil temperatures"       "K"
+####
+#### variables dans wrf
+####
+state  real   albedo_gcm      ij   misc  1  -  i012rd  "MARS_ALB"    "albedo of naked ground"  "0 - 1 fraction"
+state  real   therm_inert     ij   misc  1  -  i012rd  "MARS_TI"     "thermal inertia"         "J/m2/K/s0.5"
+state  real   slpx            ij   misc  1  -  i012rd  "SLOPEX"      "slope x direction"       "rad"
+state  real   slpy            ij   misc  1  -  i012rd  "SLOPEY"      "slope y direction"       "rad"
+state  real   mars_emiss      ij   misc  1  -  i012rd  "MARS_EMISS"  "emissivity"              "0 - 1 fraction"
+state  real   mars_cice       ij   misc  1  -  i012rd  "MARS_CICE"   "co2 ice"                 "kg"
+state  real   mars_tsoil     ilj   misc  1  -  i012rd  "MARS_TSOIL"  "soil temperatures"       "K"
+state  real   mars_gw        ilj   misc  1  -  i012rd  "MARS_GW"     "gwparam"                 " "
+####
+####
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+
+
+
+#-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+#                                               
+# Variables for Eulerian mass coordinate dynamics                                            
+#                                               
+
+# Velocities
+#
+# U Vel
+state    real   u              ikjb     dyn_em      2         X     \
+     i01rhusdf=(bdy_interp:dt)       "U"                      "x-wind component"   "m s-1"
+state    real   ru             ikj     dyn_em      1         X      -        "MU_U"        "mu-coupled u"   "Pa m s-1"
+state    real   ru_m           ikj     dyn_em      1         X      -        "ru_m"        ""   ""
+state    real   ru_tend        ikj     dyn_em      1         X      -        "ru_tend"        ""   ""                                   
+i1       real   ru_tendf       ikj     dyn_em      1         X                                          
+state    real   u_save         ikj     dyn_em      1         X      -        "u_save"
+#                                               
+# V Vel
+state    real   v              ikjb     dyn_em      2         Y     \
+     i01rhusdf=(bdy_interp:dt)        "V"                     "y-wind component"   "m s-1"
+state    real   rv             ikj     dyn_em      1         Y      -        "MU_V"        "mu-coupled v"   "Pa m s-1"
+state    real   rv_m           ikj     dyn_em      1         Y      -        "rv_m"
+state    real   rv_tend        ikj     dyn_em      1         Y      -        "rv_tend"
+i1       real   rv_tendf       ikj     dyn_em      1         Y                                          
+state    real   v_save         ikj     dyn_em      1         Y      -        "v_save"                   
+#                                               
+# Vertical Vel                                          
+state    real   w              ikjb     dyn_em      2         Z     \
+        irhusdf=(bdy_interp:dt)  "w"                          "z-wind component"   "m s-1"
+state    real   ww             ikj     dyn_em      1         Z      r         "ww"   "mu-coupled eta-dot"    "Pa s-1"
+state    real   rw             ikj     dyn_em      1         Z      -         "rw"   "mu-coupled w"          "Pa m s-1"
+i1       real   ww1            ikj     dyn_em      1         Z                                          
+state    real   ww_m           ikj     dyn_em      1         Z      r         "ww_m"   "time-avg mu-coupled eta-dot"    "Pa s-1"
+i1       real   wwp            ikj     dyn_em      1         Z                                          
+i1       real   rw_tend        ikj     dyn_em      1         Z                                          
+i1       real   rw_tendf       ikj     dyn_em      1         Z                                          
+i1       real   w_save         ikj     dyn_em      1         Z                                          
+
+# Geopotential
+state    real   ph             ikjb     dyn_em      2         Z     \
+       irusdf=(bdy_interp:dt)   "ph"   "perturbation geopotential"  "m2 s-2"
+state    real   phb            ikj     dyn_em      1         Z     irdus  "phb"  "base-state geopotential"  "m2 s-2"
+state    real   phb_fine       ikj     dyn_em      1         Z      -     "phb_fine"  "for nesting, temp holding interpolated coarse grid phb"  "m2 s-2"
+state    real   ph0            ikj     dyn_em      1         Z      r     "ph0"  "initial geopotential"     "m2 s-2"
+state    real   php            ikj     dyn_em      1         Z      r     "php"  "geopotential"             "m2 s-2"
+i1       real   ph_tend        ikj     dyn_em      1         Z 
+i1       real   ph_tendf       ikj     dyn_em      1         Z 
+i1       real   ph_save        ikj     dyn_em      1         Z 
+##
+## MARS: TO GET LIGHTER HISTORY FILES
+##
+state    real   phtot          ikj     dyn_em      1         Z     irh       "PHTOT"        "total geopotential"      "m2 s-2"
+
+# Potential Temperature
+state    real   t              ikjb     dyn_em      2         -     \
+       i01rhusdf=(bdy_interp:dt)   "t"      "perturbation potential temperature (theta-t0)" "K"
+
+state    real   t_init         ikj     dyn_em      1         -      ir       "t_init" "initial potential temperature" "K"
+i1       real   t_tend         ikj     dyn_em      1         -  
+i1       real   t_tendf        ikj     dyn_em      1         -  
+state    real   tp             ikj     dyn_em      2         -  
+i1       real   t_2save        ikj     dyn_em      1         -   
+state    real   t_save         ikj     dyn_em      1         -               "t_save"
+#                                               
+
+
+# Mass
+state    real   mu              ijb     dyn_em      2         -     \
+     irusdf=(bdy_interp:dt)   "mu"  "perturbation dry air mass in column" "Pa"
+state    real   mub             ij     dyn_em      1         -     irdus        "mub" "base state dry air mass in column" "Pa"
+state    real   mub_fine        ij     dyn_em      1         -      -           "mub_fine" "nest temp, holds interpolated coarse grid mub" "Pa"
+state    real   mu0             ij     dyn_em      1         -     i01rdu       "mu0" "initial dry mass in column" "Pa"
+state    real   mudf            ij     dyn_em      1         -      -           "mudf" "" ""
+state    real   muu             ij     dyn_em      1          -                 "muu"
+i1       real   muus            ij     dyn_em      1          -     
+state    real   muv             ij     dyn_em      1          -                 "muv"
+i1       real   muvs            ij     dyn_em      1          -     
+state    real   mut             ij     dyn_em      1          -                 "mut"
+state    real   muts            ij     dyn_em      1          -                 "muts"
+i1       real   muave           ij     dyn_em      1          -     
+i1       real   mu_save         ij     dyn_em      1          -     
+i1       real   mu_tend         ij     dyn_em      1          -     
+i1       real   mu_tendf        ij     dyn_em      1          -     
+
+#diagnostic for looking at nest position in output. A mungy version of terrain height.
+state    real   nest_pos        ij     misc        1   -   rhu=(mark_domain)  "NEST_POS"
+state    real   nest_mask       ij     misc        1   -   ru=(mark_domain)   "NEST_MASK"     "LOCATION OF NEST IF ANY"
+state    real   ht_coarse       ij     misc        1   -     r                -              "STORAGE FOR LOW-RES TERRAIN"
+
+
+# TKE
+state    real   tke            ikj     dyn_em      2         -       r        "tke"          "TURBULENCE KINETIC ENERGY"     "m2 s-2"
+i1       real   tke_tend       ikj     dyn_em      1         -      
+
+# Pressure and Density
+state    real   p              ikj     dyn_em      1         -      r         "p"           "perturbation pressure"         "Pa"
+state    real   al             ikj     dyn_em      1         -      r         "al"          "inverse perturbation density"  "m3 kg-1"
+state    real   alt            ikj     dyn_em      1         -      r         "alt"         "inverse density"               "m3 kg-1"
+state    real   alb            ikj     dyn_em      1         -      rdus      "alb"         "inverse base density"          "m3 kg-1"
+state    real   zx             ikj     dyn_em      1         X      -         " "  " "  " "    
+state    real   zy             ikj     dyn_em      1         Y      -         " "  " "  " "   
+state    real   rdz            ikj     dyn_em      1         Z      -         " "  " "  " "   
+state    real   rdzw           ikj     dyn_em      1         Z       -        " "  " "  " "   
+state    real   pb             ikj     dyn_em      1         -      rdus      "pb"          "BASE STATE PRESSURE "          "Pa"
+##
+## MARS: TO GET LIGHTER HISTORY FILES
+##
+state    real   ptot           ikj     dyn_em      1         -      irh       "PTOT"        "total pressure"      "Pa"
+
+#                                               
+# Other dyn                                             
+#                                               
+i1       real   advect_tend    ikj     dyn_em      1         -                                          
+i1       real   alpha          ikj     dyn_em      1         -                                                  
+i1       real   a              ikj     dyn_em      1         -                                                  
+i1       real   gamma          ikj     dyn_em      1         -                                                  
+i1       real   c2a            ikj     dyn_em      1         -     -
+i1       real   rho            ikj     dyn_em      1         -     -
+i1       real   phm            ikj     dyn_em      1         -     -
+i1       real   cqu            ikj     dyn_em      1         -     -
+i1       real   cqv            ikj     dyn_em      1         -     -
+i1       real   cqw            ikj     dyn_em      1         -     -
+i1       real   pm1            ikj     dyn_em      1         -     -
+#
+# sortie desactivée
+# 
+state    real   sr             ij      dyn_em      1         -      ir         "sr" "fraction of frozen precipitation"
+state    real   potevp         ij      dyn_em      1         -                 "potevp" "whatever"
+state    real   snopcx         ij      dyn_em      1         -                 "snopcx" "whatever"
+state    real   soiltb         ij      dyn_em      1         -      ir         "soiltb" "whatever"
+state    real    fnm            k       dyn_em      1         -     irh       "fnm"  "upper weight for vertical stretching"  ""
+state    real    fnp            k       dyn_em      1         -     irh       "fnp"  "lower weight for vertical stretching"  ""
+state    real    rdnw           k       dyn_em      1         -     irh       "rdnw"  "inverse d(eta) values between full (w) levels"   ""
+state    real    rdn            k       dyn_em      1         -     irh       "rdn"  "inverse d(eta) values between half (mass) levels"   ""
+state    real    dnw            k       dyn_em      1         -     irh       "dnw" "d(eta) values between full (w) levels"   ""
+state    real    dn             k       dyn_em      1         -     irh       "dn " "d(eta) values between half (mass) levels"   ""
+state    real    znu            k       dyn_em      1         -     irh       "znu"  "eta values on half (mass) levels"  ""
+state    real    znw            k       dyn_em      1         Z     i01rh     "znw"  "eta values on full (w) levels"  ""
+state    real    t_base         k       dyn_em      1         -     ir        "t_base"               "BASE STATET T IN IDEALIZED CASES"         "K"      
+state    real    z              ikj     dyn_em      1         -     -         " " " " " "
+i1       real    mu_3d          ikj     dyn_em      1         -                                          
+i1       real    z_at_w         ikj     dyn_em      1         Z 
+state    real    cfn            -       misc      -         -     irh       "cfn"    "extrapolation constant"  ""
+state    real    cfn1           -       misc      -         -     irh       "cfn1"   "extrapolation constant"  ""
+state    integer step_number    -       misc      -         -     ir        "step_number"  ""
+
+#
+# UN BON EXEMPLE: irhd et i01rh
+#
+# 2m and 10m output diagnostics
+state    real   Q2               ij     misc        1         -     ird      "Q2"                   "QV at 2 M"         "kg kg-1"
+state    real   T2               ij     misc        1         -     ird      "T2"                   "TEMP at 2 M"       "K"
+state    real   TH2              ij     misc        1         -     ird      "TH2"                  "POT TEMP at 2 M"   "K"
+state    real   PSFC             ij     misc        1         -     i01rh     "PSFC"                 "SFC PRESSURE"      "Pa"
+
+#
+# ICI irh01d
+#
+# these next 2 are for the HFSoLE/PET demo; writing these to auxhist1 output over MCEL for coupling
+# with wave model, only if compiled with -DMCELIO, JM 2003/05/29
+state    real   U10              ij     misc        1         -     ir01d      "U10"                "U at 10 M"         "m s-1"
+state    real   V10              ij     misc        1         -     ir01d      "V10"                "V at 10 M"         "m s-1"
+
+# these next 4 are for observational nudging
+state    real   uratx           ij      misc        1         -     ir          "URATX"            "Ratio of U over U10 on mass points "         "dimensionless"
+state    real   vratx           ij      misc        1         -     ir          "VRATX"            "Ratio of V over V10 on mass points "         "dimensionless"   
+state    real   tratx           ij      misc        1         -     ir          "TRATX"            "Ratio of T over TH2 on mass points "         "dimensionless"   
+state    real   obs_savwt      hikj     dyn_em      1         X      -       "OBS_SAVWT"
+
+# Other
+state   real    rdx            -        misc      -         -     irh       "rdx"                   "INVERSE X GRID LENGTH"         ""      
+state   real    rdy            -        misc      -         -     irh       "rdy"                   "INVERSE Y GRID LENGTH"         ""      
+state   real    dts            -        misc      -         -     ir        "dts"                   "SMALL TIMESTEP"         ""      
+state   real    dtseps         -        misc      -         -     ir        "dtseps"                "TIME WEIGHT CONSTANT FOR SMALL STEPS"         ""      
+state   real    resm           -        misc      -         -     irh       "resm"                  "TIME WEIGHT CONSTANT FOR SMALL STEPS"         ""      
+state   real    zetatop        -        misc      -         -     irh       "zetatop"               "ZETA AT MODEL TOP"         ""      
+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 for derived time quantities.  
+state   integer itimestep      -        -          -         -     rh         "itimestep"             ""         ""      
+state   real    xtime          -        -          -         -     rh         "xtime"                 "minutes since simulation start"         ""      
+state   real    julian         -        -          -         -     -          "julian"                "day of year, 0.0 at 0Z on 1 Jan."         "days"      
+
+
+# input file descriptor for lbcs on parent domain                                               
+state   integer lbc_fid        -        -          -         -     -         "lbc_fid"               ""         ""      
+# indicates if tiling has been computed                                         
+state   logical tiled          -        -          -         -     -         "tiled"                 ""         ""      
+# indicates if patches have been computed                                               
+state   logical patched        -        -          -         -     -         "patched"               ""         ""      
+# indicates whether to read input from file or generate                                         
+#state   logical input_from_file        -        -          -         -     -         "input_from_file"         ""         ""    
+
+# Mask for moving nest interpolations
+state    integer imask_nostag         ij      misc     1     -
+state    integer imask_xstag          ij      misc     1     X
+state    integer imask_ystag          ij      misc     1     Y
+state    integer imask_xystag         ij      misc     1     XY 
+# vortex center indices; need for restarts of moving nests
+state    real    xi                   -       misc     -     -    r
+state    real    xj                   -       misc     -     -    r
+state    real    vc_i                 -       misc     -     -    r
+state    real    vc_j                 -       misc     -     -    r
+
+#-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+# Scalar (4D) arrays
+
+# 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                                                
+# dry code will will still link properly)                                               
+#      
+#-----------------------------
+# afin d eviter les mic macs terrestres, ceux là ne sont pas a utiliser
+# reglés a zero 
+#-----------------------------                                         
+state   real    -              ikjftb   moist       1         -     -    -
+state   real    qv             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QVAPOR"           "Water vapor mixing ratio"      "kg kg-1"
+state   real    qc             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QCLOUD"           "Cloud water mixing ratio"      "kg kg-1"
+state   real    qr             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QRAIN"            "Rain water mixing ratio"       "kg kg-1"
+state   real    qi             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QICE"             "Ice mixing ratio"              "kg kg-1"
+state   real    qs             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QSNOW"            "Snow mixing ratio"             "kg kg-1"
+state   real    qg             ikjftb   moist       1         -     \
+   i01rusdf=(bdy_interp:dt)  "QGRAUP"           "Graupel mixing ratio"          "kg kg-1"
+
+# Chem Scalars
+state   real    -              ikjftb   chem        1         -     -    -                                       
+
+# Other Scalars: see also above
+state   real    qni             ikjftb  scalar      1         -     \
+   i01rusdf=(bdy_interp:dt)    "QNICE"         "Ice Number concentration" "# kg(-1)"
+state   real    qt             ikjftb  scalar      1         -     \
+   i01rusdf=(bdy_interp:dt)    "CWM"           "Total condensate mixing ratio"      "kg kg-1"
+
+#-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+# Arrays for Specified LBCs  (lbc arrays REMOVED; Boundary arrays are now specified with the state array; see above, 20050413 JM )
+
+state    real   fcx            w         misc     -         -      ir       "fcx"                  "RELAXATION TERM FOR BOUNDARY ZONE"         ""
+state    real   gcx            w         misc     -         -      ir       "gcx"                  "2ND RELAXATION TERM FOR BOUNDARY ZONE"         ""
+state    real   dtbc            -        misc     -         -      ir       "dtbc"                 "TIME SINCE BOUNDARY READ"         ""
+
+#-------------------------------------------------------------------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------------------------------------------------------------------
+# Physics Related State Varibles
+
+#-------------------------------------------------------------------------------------------------------------------------------------------
+# SI - start variables from netCDF format from Standard Initialization, most eventually for use in LSM schemes
+#-------------------------------------------------------------------------------------------------------------------------------------------
+
+state   real   sm000007            ij    misc          1     -     i1      "SM000007"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm007028            ij    misc          1     -     i1      "SM007028"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm028100            ij    misc          1     -     i1      "SM028100"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm100255            ij    misc          1     -     i1      "SM100255"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   st000007            ij    misc          1     -     i1      "ST000007"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st007028            ij    misc          1     -     i1      "ST007028"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st028100            ij    misc          1     -     i1      "ST028100"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st100255            ij    misc          1     -     i1      "ST100255"      "LAYER SOIL TEMPERATURE" "K"
+state   real   sm000010            ij    misc          1     -     i1      "SM000010"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm010040            ij    misc          1     -     i1      "SM010040 "     "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm040100            ij    misc          1     -     i1      "SM040100 "     "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm100200            ij    misc          1     -     i1      "SM100200 "     "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm010200            ij    misc          1     -     i1      "SM010200"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm000            ij    misc          1     -     i1      "SOILM000"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm005            ij    misc          1     -     i1      "SOILM005"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm020            ij    misc          1     -     i1      "SOILM020"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm040            ij    misc          1     -     i1      "SOILM040"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm160            ij    misc          1     -     i1      "SOILM160"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm300            ij    misc          1     -     i1      "SOILM300"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sw000010            ij    misc          1     -     i1      "SW000010"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw010040            ij    misc          1     -     i1      "SW010040"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw040100            ij    misc          1     -     i1      "SW040100"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw100200            ij    misc          1     -     i1      "SW100200"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw010200            ij    misc          1     -     i1      "SW010200"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw000            ij    misc          1     -     i1      "SOILW000"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw005            ij    misc          1     -     i1      "SOILW005"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw020            ij    misc          1     -     i1      "SOILW020"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw040            ij    misc          1     -     i1      "SOILW040"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw160            ij    misc          1     -     i1      "SOILW160"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw300            ij    misc          1     -     i1      "SOILW300"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   st000010            ij    misc          1     -     i1      "ST000010"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st010040            ij    misc          1     -     i1      "ST010040"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st040100            ij    misc          1     -     i1      "ST040100"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st100200            ij    misc          1     -     i1      "ST100200"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st010200            ij    misc          1     -     i1      "ST010200"      "LAYER SOIL TEMPERATURE" "K"
+state   real   soilt000            ij    misc          1     -     i1      "SOILT000"      "LAYER SOIL TEMPERATURE" "K"
+state   real   soilt005            ij    misc          1     -     i1      "SOILT005"      "LAYER SOIL TEMPERATURE" "K"
+state   real   soilt020            ij    misc          1     -     i1      "SOILT020"      "LAYER SOIL TEMPERATURE" "K"
+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     -     i012rd=(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     -     i12     "TOPOSLPX"      "ELEVATION X SLOPE"  ""
+state   real   toposlpy            ij    misc          1     -     i12     "TOPOSLPY"      "ELEVATION Y SLOPE"  ""
+state   real   shdmax              ij    misc          1     -     i012r   "SHDMAX"        "ANNUAL MAX VEG FRACTION" ""
+state   real   shdmin              ij    misc          1     -     i012r   "SHDMIN"        "ANNUAL MIN VEG FRACTION" ""
+state   real   snoalb              ij    misc          1     -     i012r   "SNOALB"        "ANNUAL MAX SNOW ALBEDO IN FRACTION" ""
+state   real   slopecat            ij    misc          1     -     i12     "SLOPECAT"      "SLOPE CATEGORY"  ""
+state   real   toposoil            ij    misc          1     -     i12     "SOILHGT"       "ELEVATION OF LSM DATA"  "m"
+state   real   landusef            iuj   misc          1     Z     i12     "LANDUSEF"      "LANDUSE FRACTION BY CATEGORY"  ""
+state   real   soilctop            isj   misc          1     Z     i12     "SOILCTOP"      "SOIL CAT FRACTION (TOP)"  ""
+state   real   soilcbot            isj   misc          1     Z     i1      "SOILCBOT"      "SOIL CAT FRACTION (BOTTOM)"  ""
+state   real   soilcat             ij    misc          1     -     i12     "SOILCAT"       "SOIL CAT DOMINANT TYPE" ""
+state   real   vegcat              ij    misc          1     -     i12     "VEGCAT"        "VEGETATION CAT DOMINANT TYPE" ""
+
+#---------------------------------------------------------------------------------------------------------------------------------------
+# SI - end variables from netCDF format from Standard Initialization
+#---------------------------------------------------------------------------------------------------------------------------------------
+
+# soil model variables  (Note that they are marked as staggered in the vertical dimension
+# because they are "fully dimensioned" -- they use every element in that dim
+state    real   TSLB           ilj       misc      1         Z     i02rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)           "TSLB"     "SOIL TEMPERATURE"   "K"
+state    real   ZS              l        misc      -         Z     irh       "ZS"                    "DEPTHS OF CENTERS OF SOIL LAYERS"         "m"
+state    real   DZS             l        misc      -         Z     irh       "DZS"                   "THICKNESSES OF SOIL LAYERS"               "m"
+
+# urban model variables
+state    real   DZR             l        em      -            Z     r        "DZR"            "THICKNESSES OF ROOF LAYERS"                      "m"
+state    real   DZB             l        em      -            Z     r        "DZB"            "THICKNESSES OF WALL LAYERS"                      "m"
+state    real   DZG             l        em      -            Z     r        "DZG"            "THICKNESSES OF ROAD LAYERS"                      "m"
+
+# lsm State Variables
+
+#
+# sortie desactivé, mais peut servir pour le modèle de sol
+#
+state    real   SMOIS            ilj     -          1         Z     i02rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SMOIS"            "SOIL MOISTURE"     "m3 m-3"
+state    real   SH2O             ilj     -          1         Z     i02rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SH2O"             "SOIL LIQUID WATER" "m3 m-3"
+state    real   XICE             ij     misc        1         -     i012rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)  "XICE"             "SEA ICE FLAG"  ""
+state    real   SMSTAV           ij     misc        1         -      rd=(interp_mask_land_field:lu_index)       "SMSTAV"           "MOISTURE AVAILABILITY" ""
+state    real   SMSTOT           ij     misc        1         -      r                                          "SMSTOT"           "TOTAL SOIL MOISTURE" "m3 m-3"
+
+state    real   SFCRUNOFF        ij     misc        1         -      rd=(interp_mask_land_field:lu_index)      "SFROFF"           "SURFACE RUNOFF"     "mm"
+state    real   UDRUNOFF         ij     misc        1         -      rd=(interp_mask_land_field:lu_index)      "UDROFF"           "UNDERGROUND RUNOFF" "mm"
+state  integer  IVGTYP           ij     misc        1         -     i02rd=(interp_fcni)u=(copy_fcni)            "IVGTYP"           "DOMINANT VEGETATION CATEGORY" ""
+state  integer  ISLTYP           ij     misc        1         -     i02rd=(interp_fcni)u=(copy_fcni)            "ISLTYP"           "DOMINANT SOIL CATEGORY"       ""
+state    real   VEGFRA           ij     misc        1         -     i0125rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)   "VEGFRA"           "VEGETATION FRACTION" ""
+state    real   SFCEVP           ij     misc        1         -      r                                          "SFCEVP"           "SURFACE EVAPORATION" "kg m-2"
+state    real   GRDFLX           ij     misc        1         -      r                                         "GRDFLX"           "GROUND HEAT FLUX" "W m-2"
+state    real   SFCEXC           ij     misc        1         -      r                                          "SFCEXC "          "SURFACE EXCHANGE COEFFICIENT"   "m s-1"
+
+state    real   ACSNOW           ij     misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "ACSNOW"           "ACCUMULATED SNOW"         "kg m-2"
+state    real   ACSNOM           ij     misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "ACSNOM"           "ACCUMULATED MELTED SNOW"  "kg m-2"
+#
+# ici sortie désactivée
+#
+state    real   SNOW             ij     misc        1         -     i01rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SNOW"             "SNOW WATER EQUIVALENT"    "kg m-2"
+state    real   SNOWH            ij     misc        1         -     i01rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SNOWH"            "PHYSICAL SNOW DEPTH"      "m"
+state    real   RHOSN            ij     misc        1         -     i01rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "RHOSN"            " SNOW DENSITY"      "kg m-3" 
+state    real   CANWAT           ij     misc        1         -     i01rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "CANWAT"           "CANOPY WATER"             "kg m-2"
+state    real   SST              ij     misc        1         -     i0125rd=(interp_mask_water_field:lu_index)   "SST"              "SEA SURFACE TEMPERATURE" "K"
+state  integer  IFNDSNOWH        -      misc        1         -     i         "FNDSNOWH" "SNOWH_LOGICAL"
+state  integer  IFNDSOILW        -      misc        1         -     i         "FNDSOILW" "SOILW_LOGICAL"
+
+# urban state variables
+state    real   TR_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TR_URB"              "URBAN ROOF SKIN TEMPERATURE"        "K"
+state    real   TB_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TB_URB"              "URBAN WALL SKIN TEMPERATURE"        "K" 
+state    real   TG_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TG_URB"              "URBAN ROAD SKIN TEMPERATURE"        "K" 
+state    real   TC_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TC_URB"              "URBAN CANOPY TEMPERATURE"           "K"
+state    real   QC_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "QC_URB"              "URBAN CANOPY HUMIDITY"          "kg kg{-1}"
+state    real   UC_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "UC_URB"              "URBAN CANOPY WIND"          "m s{-1}"
+state    real   XXXR_URB2D       ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "XXXR_URB" "M-O LENGTH ABOVE URBAN ROOF"   "dimensionless"
+state    real   XXXB_URB2D       ij    misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "XXXB_URB" "M-O LENGTH ABOVE URBAN WALL"   "dimensionless"
+state    real   XXXG_URB2D       ij    misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "XXXG_URB" "M-O LENGTH ABOVE URBAN ROAD"   "dimensionless"
+state    real   XXXC_URB2D       ij    misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "XXXC_URB" "M-O LENGTH ABOVE URBAN CANOPY" "dimensionless"
+state    real   TRL_URB3D        ilj    misc        1         Z     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "TRL_URB" "ROOF LAYER TEMPERATURE"          "K"
+state    real   TBL_URB3D        ilj    misc        1         Z     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "TBL_URB" "WALL LAYER TEMPERATURE"          "K"
+state    real   TGL_URB3D        ilj    misc        1         Z     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "TGL_URB" "ROAD LAYER TEMPERATURE"          "K"
+state    real   SH_URB2D        ij    misc        1         -     r       "SH_URB"  "SENSIBLE HEAT FLUX FROM URBAN SFC"  "W m{-2}"
+state    real   LH_URB2D        ij    misc        1         -     r       "LH_URB"  "LATENT HEAT FLUX FROM URBAN SFC"    "W m{-2}"
+state    real   G_URB2D         ij    misc        1         -     r        "G_URB"  "GROUND HEAT FLUX INTO URBAN"        "W m{-2}"
+state    real   RN_URB2D        ij    misc        1         -     r       "RN_URB"  "NET RADIATION ON URBAN SFC"         "W m{-2}"
+state    real   TS_URB2D        ij    misc        1         -     r       "TS_URB"  "SKIN TEMPERATURE"          "K"
+state    real   FRC_URB2D       ij    misc        1         -     rd=(interp_fcnm)u=(copy_fcnm)       "FRC_URB"  "URBAN FRACTION"         "dimensionless"
+state    integer   UTYPE_URB2D  ij    misc        1         -     rd=(interp_fcnm)u=(copy_fcnm)       "UTYPE_URB"  "URBAN TYPE"         "dimensionless"
+
+
+# urban variables from radiation model
+state    real   COSZ_URB2D       ij     misc        1         -      r       "COSZ_URB"  "COS of SOLAR ZENITH ANGLE"         "dimensionless"
+state    real   OMG_URB2D        ij     misc        1         -      r       "OMG_URB"   "SOLAR HOUR ANGLE"         "dimensionless"
+state    real   DECLIN_URB       -     misc        1         -       r       "DECLIN_URB"  "SOLAR DECLINATION"         "dimensionless"
+
+
+# RUC LSM
+state    real   SMFR3D           ilj    misc        1         Z      r        "SMFR3D"               "SOIL ICE" ""
+state    real   KEEPFR3DFLAG     ilj    misc        1         Z      r        "KEEPFR3DFLAG"          "FLAG - 1. FROZEN SOIL YES, 0 - NO"             ""
+
+# MRF PBL variables
+i1      real   PSIM           ij     misc        1         -     -         "PSIM"                "SIMILARITY FUNCTION FOR MOMENTUM"     ""
+i1      real   PSIH           ij     misc        1         -     -         "PSIH"                "SIMILARITY FUNCTION FOR HEAT"         ""
+i1      real   WSPD           ij     misc        1         -     -         "WSPD"                "Wind speed"                           "m s-1"
+i1      real   GZ1OZ0         ij     misc        1         -     -         "GZ1OZ0"              "LOG OF Z1 over Z0"                     ""
+i1      real   BR             ij     misc        1         -     -         "BR"                  "Bulk Richardson"                       ""
+
+# MYJ PBL variables
+state    real   tke_myj        ikj     misc        1         -      r        "tke_myj"               "TKE FROM MELLOR-YAMADA-JANJIC"      "m2 s-2"
+state    real   EL_MYJ          ikj     misc        1         -     -        "el_myj"                "MIXING LENGTH FROM MELLOR-YAMADA-JANJIC"     "m"
+state    real   EXCH_H          ikj     misc        1         -     r          "EXCH_H"               "EXCHANGE COEFFICIENTS "
+state    real  CT              ij      misc        1         -      r        "CT"                    "COUNTERGRADIENT TERM"    "K"
+state   real   THZ0             ij     misc        1         -      r        "THZ0"                  "POTENTIAL TEMPERATURE AT ZNT"                 "K"
+state    real  Z0               ij     misc        1         -      r        "Z0"                    "Background ROUGHNESS LENGTH"                  "m"
+state   real   QZ0              ij     misc        1         -      r        "QZ0"                   "SPECIFIC HUMIDITY AT ZNT"                     "kg kg-1"
+state   real   UZ0              ij     misc        1         -      r        "UZ0"                   "U WIND COMPONENT AT ZNT"                      "m s-1"
+state   real   VZ0              ij     misc        1         -      r        "VZ0"                   "V WIND COMPONENT AT ZNT"                      "m s-1"
+state   real   QSFC             ij     misc        1         -      r        "QSFC"                  "SPECIFIC HUMIDITY AT LOWER BOUNDARY"          "kg kg-1"
+state   real   AKHS             ij     misc        1         -      r        "AKHS"                  "SFC EXCH COEFF FOR HEAT"                      "m s-1"    
+state   real   AKMS             ij     misc        1         -      r        "AKMS"                  "SFC EXCH COEFF FOR MOMENTUM"                  "m s-1"    
+state   integer KPBL            ij     misc        1         -     r         "KPBL"                  "LEVEL OF PBL TOP"                             ""
+i1      real   TSHLTR           ij     misc        1         -     -         "TSHLTR"                "SHELTER THETA FROM MYJ"                       "K"         
+i1      real   QSHLTR           ij     misc        1         -     -         "QSHLTR"                "SHELTER SPECIFIC HUMIDITY FROM MYJ"           "kg kg-1"
+i1      real   PSHLTR           ij     misc        1         -     -         "PSHLTR"                "SHELTER PRESSURE FROM MYJ"           "Pa"
+i1      real   TH10             ij     misc        1         -     -         "TH10"                  "10-M THETA FROM MYJ"                          "K"        
+i1      real   Q10              ij     misc        1         -     -         "Q10"                   "10-M SPECIFIC HUMIDITY FROM MYJ"              "kg kg-1"
+i1      real   CHKLOWQ          ij     misc        1         -     -         "CHKLOWQ"               "SURFACE SATURATION FLAG"        ""
+
+# gfdl (eta) radiation State Variables
+state    real    HTOP            ij     misc        1         -      r        "HTOP"                 "TOP OF CONVECTION LEVEL"         ""
+state    real    HBOT            ij     misc        1         -      r        "HBOT"                 "BOT OF CONVECTION LEVEL"         ""
+state    real    HTOPR           ij     misc        1         -      r        "HTOPR"                "TOP OF CONVECTION LEVEL FOR RADIATION"    ""
+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   rswtoa    ij    misc        1    -    i
+state  real   rlwtoa    ij    misc        1    -    i
+state  real   czmean    ij    misc      1    -     i
+state  real   cfracl    ij    misc      1    -     i
+state  real   cfracm    ij    misc      1    -     i
+state  real   cfrach    ij    misc      1    -     i
+state  real   acfrst    ij    misc        1    -    i
+state integer ncfrst    ij    misc        1    -    i
+state  real   acfrcv    ij    misc        1    -    i
+state integer ncfrcv    ij    misc        1    -    i
+
+# cam radiation variables
+state  real    -       iqjf ozmixm      1    -   -     -
+state  real   mth01    iqjf ozmixm      1    -   -     -
+state  real   mth02    iqjf ozmixm      1    -   -     -
+state  real   mth03    iqjf ozmixm      1    -   -     -
+state  real   mth04    iqjf ozmixm      1    -   -     -
+state  real   mth05    iqjf ozmixm      1    -   -     -
+state  real   mth06    iqjf ozmixm      1    -   -     -
+state  real   mth07    iqjf ozmixm      1    -   -     -
+state  real   mth08    iqjf ozmixm      1    -   -     -
+state  real   mth09    iqjf ozmixm      1    -   -     -
+state  real   mth10    iqjf ozmixm      1    -   -     -
+state  real   mth11    iqjf ozmixm      1    -   -     -
+state  real   mth12    iqjf ozmixm      1    -   -     -
+state  real   pin       q     misc      1    -   -      "PIN"             "PRESSURE LEVEL OF OZONE MIXING RATIO"  "millibar"
+state  real   m_ps       ij   misc      2    -   -      "m_ps"            "PS from MATCH on WRF grids"
+state  real    -       idjf aerosolc    2    -   -       -
+state  real   SUL      idjf aerosolc    2    -   -     "SUL"        "SUL aerosol concentration"
+state  real   SSLT     idjf aerosolc    2    -   -     "SSLT"        "SSLT aerosol concentration"
+state  real   DUST1    idjf aerosolc    2    -   -     "DUST1"        "DUST1 aerosol concentration"
+state  real   DUST2    idjf aerosolc    2    -   -     "DUST2"        "DUST2 aerosol concentration"
+state  real   DUST3    idjf aerosolc    2    -   -     "DUST3"        "DUST3 aerosol concentration"
+state  real   DUST4    idjf aerosolc    2    -   -     "DUST4"        "DUST4 aerosol concentration"
+state  real   OCPHO    idjf aerosolc    2    -   -     "OCPHO"        "OCPHO aerosol concentration"
+state  real   BCPHO    idjf aerosolc    2    -   -     "BCPHO"        "BCPHO aerosol concentration"
+state  real   OCPHI    idjf aerosolc    2    -   -     "OCPHI"        "OCPHI aerosol concentration"
+state  real   BCPHI    idjf aerosolc    2    -   -     "BCPHI"        "BCPHI aerosol concentration"
+state  real   BG       idjf aerosolc    2    -   -     "BG"        "BG aerosol concentration"
+state  real   VOLC     idjf aerosolc    2    -   -     "VOLC"        "VOLC aerosol concentration"
+state  real   m_hybi    d     misc      1    -   -     "m_hybi"         "MATCH hybi"
+
+# new eta microphpysics State Variables
+state    real    F_ICE_PHY       ikj    misc        1         -      rdu      "F_ICE_PHY"            "FRACTION OF ICE"         ""
+state    real    F_RAIN_PHY      ikj    misc        1         -      rdu      "F_RAIN_PHY"           "FRACTION OF RAIN "         ""
+state    real    F_RIMEF_PHY     ikj    misc        1         -      rdu      "F_RIMEF_PHY"          "MASS RATIO OF RIMED ICE "         ""
+# Other Misc State Variables
+
+                                            
+state   real    ht             ij      misc         1         -     i012rhdus  "HGT"              "Terrain Height"   "m"
+state   real    ht_fine        ij      misc         1         -     -          "HGT_FINE"         "Fine Terrain Height"   "m"
+state   real    ht_int         ij      misc         1         -     -          "HGT_INT"          "Terrain Height Horizontally Interpolated"   "m"
+state   real    ht_input       ij      misc         1         -     -          "HGT_INPUT"        "Terrain Height from FG Input File"   "m"
+
+#
+# h is removed from TSK, parce que la temperature de surface dans TSK n'est pas modifiee 
+#
+state   real    TSK            ij      misc         1         -     i012rdu=(copy_fcnm)    "TSK"                   "SURFACE SKIN TEMPERATURE"                  "K"
+state   real    TSK_SAVE       ij      misc         1         -     -         "TSK_SAVE" "SURFACE SKIN TEMPERATURE, EXTRA COPY FOR SEA ICE TESTS in REAL"       "K"
+
+state   real    h_diabatic     ikj     misc         1         -      r        "h_diabatic"            "PREVIOUS TIMESTEP CONDENSATIONAL HEATING"         ""      
+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" ""
+state   real    f              ij      misc         1         -     i012rhdu=(copy_fcnm)    "f"                "Coriolis sine latitude term"  "s-1"
+state   real    e              ij      misc         1         -     i012rhdu=(copy_fcnm)    "e"                "Coriolis cosine latitude term"  "s-1"
+state   real    sina           ij      misc         1         -     i012rhdu=(copy_fcnm)    "SINALPHA"         "Local sine of map rotation"   ""
+state   real    cosa           ij      misc         1         -     i012rhdu=(copy_fcnm)    "COSALPHA"         "Local cosine of map rotation"  ""
+
+state   real    u_base         k       misc         1         -     ir        "u_base"                "BASE STATE X WIND IN IDEALIZED CASES"         ""      
+state   real    v_base         k       misc         1         -     ir        "v_base"                "BASE STATE Y WIND IN IDEALIZED CASES"         ""      
+state   real    qv_base        k       misc         1         -     ir        "qv_base"               "BASE STATE QV IN IDEALIZED CASES"         ""      
+state   real    z_base         k       misc         1         -     ir        "z_base"                "BASE STATE HEIGHT IN IDEALIZED CASES"         ""      
+state   real    u_frame        -       misc         1         -     ir        "u_frame"               "FRAME X WIND"         "m s-1"      
+state   real    v_frame        -       misc         1         -     ir        "v_frame"               "FRAME Y WIND"         "m s-1"      
+# p_top appears as metadata between SI and real but as a state variable in real and WRF
+# since it is a scalar and a constant, it makes sense to have it as metadata -- there
+# are, however, probably post-processing programs that expect to see it as an I/O record
+# another problem: share/input_wrf tries to read this as metadata (fine for real reading
+# SI, but with model reading real output, it generates a warning when debug is > 0 in
+# namelist and causes repeated questions from users.  A third problem is the potential
+# collision between a metadata name and a field record in the I/O data
+# resolve this how?  Have the real program throw a switch to tell the code to get it
+# from the metadata?  Otherwise it's a field?
+state   real    p_top          -       misc         -         -     irh       "p_top"                 "PRESSURE TOP OF THE MODEL"  "Pa"
+state   real    lat_ll_t       -       dyn_em       -         -     irh       "lat_ll_t"              "latitude lower left, temp point" "degrees"
+state   real    lat_ul_t       -       dyn_em       -         -     irh       "lat_ul_t"              "latitude up left, temp point" "degrees"
+state   real    lat_ur_t       -       dyn_em       -         -     irh       "lat_ur_t"              "latitude up right, temp point" "degrees"
+state   real    lat_lr_t       -       dyn_em       -         -     irh       "lat_lr_t"              "latitude lower right, temp point" "degrees"
+state   real    lat_ll_u       -       dyn_em       -         -     irh       "lat_ll_u"              "latitude lower left, u point" "degrees"
+state   real    lat_ul_u       -       dyn_em       -         -     irh       "lat_ul_u"              "latitude up left, u point" "degrees"
+state   real    lat_ur_u       -       dyn_em       -         -     irh       "lat_ur_u"              "latitude up right, u point" "degrees"
+state   real    lat_lr_u       -       dyn_em       -         -     irh       "lat_lr_u"              "latitude lower right, u point" "degrees"
+state   real    lat_ll_v       -       dyn_em       -         -     irh       "lat_ll_v"              "latitude lower left, v point" "degrees"
+state   real    lat_ul_v       -       dyn_em       -         -     irh       "lat_ul_v"              "latitude up left, v point" "degrees"
+state   real    lat_ur_v       -       dyn_em       -         -     irh       "lat_ur_v"              "latitude up right, v point" "degrees"
+state   real    lat_lr_v       -       dyn_em       -         -     irh       "lat_lr_v"              "latitude lower right, v point" "degrees"
+state   real    lat_ll_d       -       dyn_em       -         -     irh       "lat_ll_d"              "latitude lower left, massless point" "degrees"
+state   real    lat_ul_d       -       dyn_em       -         -     irh       "lat_ul_d"              "latitude up left, massless point" "degrees"
+state   real    lat_ur_d       -       dyn_em       -         -     irh       "lat_ur_d"              "latitude up right, massless point" "degrees"
+state   real    lat_lr_d       -       dyn_em       -         -     irh       "lat_lr_d"              "latitude lower right, massless point" "degrees"
+state   real    lon_ll_t       -       dyn_em       -         -     irh       "lon_ll_t"              "longitude lower left, temp point" "degrees"
+state   real    lon_ul_t       -       dyn_em       -         -     irh       "lon_ul_t"              "longitude up left, temp point" "degrees"
+state   real    lon_ur_t       -       dyn_em       -         -     irh       "lon_ur_t"              "longitude up right, temp point" "degrees"
+state   real    lon_lr_t       -       dyn_em       -         -     irh       "lon_lr_t"              "longitude lower right, temp point" "degrees"
+state   real    lon_ll_u       -       dyn_em       -         -     irh       "lon_ll_u"              "longitude lower left, u point" "degrees"
+state   real    lon_ul_u       -       dyn_em       -         -     irh       "lon_ul_u"              "longitude up left, u point" "degrees"
+state   real    lon_ur_u       -       dyn_em       -         -     irh       "lon_ur_u"              "longitude up right, u point" "degrees"
+state   real    lon_lr_u       -       dyn_em       -         -     irh       "lon_lr_u"              "longitude lower right, u point" "degrees"
+state   real    lon_ll_v       -       dyn_em       -         -     irh       "lon_ll_v"              "longitude lower left, v point" "degrees"
+state   real    lon_ul_v       -       dyn_em       -         -     irh       "lon_ul_v"              "longitude up left, v point" "degrees"
+state   real    lon_ur_v       -       dyn_em       -         -     irh       "lon_ur_v"              "longitude up right, v point" "degrees"
+state   real    lon_lr_v       -       dyn_em       -         -     irh       "lon_lr_v"              "longitude lower right, v point" "degrees"
+state   real    lon_ll_d       -       dyn_em       -         -     irh       "lon_ll_d"              "longitude lower left, massless point" "degrees"
+state   real    lon_ul_d       -       dyn_em       -         -     irh       "lon_ul_d"              "longitude up left, massless point" "degrees"
+state   real    lon_ur_d       -       dyn_em       -         -     irh       "lon_ur_d"              "longitude up right, massless point" "degrees"
+state   real    lon_lr_d       -       dyn_em       -         -     irh       "lon_lr_d"              "longitude lower right, massless point" "degrees"
+                                                
+# Other physics variables
+                                                
+state    real  RTHCUTEN        ikj      misc        1         -      r        "RTHCUTEN"              "COUPLED THETA TENDENCY DUE TO CUMULUS SCHEME"     "Pa K s-1"
+state    real  RQVCUTEN        ikj      misc        1         -      r        "RQVCUTEN"              "COUPLED Q_V TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+state    real  RQRCUTEN        ikj      misc        1         -      r        "RQRCUTEN"              "COUPLED Q_R TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+state    real  RQCCUTEN        ikj      misc        1         -      r        "RQCCUTEN"              "COUPLED Q_C TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+state    real  RQSCUTEN        ikj      misc        1         -      r        "RQSCUTEN"              "COUPLED Q_S TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+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"
+                                                
+#
+# Variables 2D ne servent pas - peuvent servir pour la microphysique Mars
+# rajouter 'h' si l'on veut des sorties
+#
+state    real  RAINC            ij      misc        1         -      rdu     "RAINC"                 "ACCUMULATED TOTAL CUMULUS PRECIPITATION"                 "mm"      
+state    real  RAINNC           ij      misc        1         -      rdu     "RAINNC"                "ACCUMULATED TOTAL GRID SCALE PRECIPITATION"              "mm"      
+state    real  RAINCV           ij      misc        1         -      r        "RAINCV"                "TIME-STEP 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  SNOWNC           ij      misc        1         -      rdu     "SNOWNC"                "ACCUMULATED TOTAL GRID SCALE SNOW AND ICE"               "mm"
+state    real  GRAUPELNC        ij      misc        1         -      rdu     "GRAUPELNC"             "ACCUMULATED TOTAL GRID SCALE GRAUPEL"                    "mm"
+state    real  SNOWNCV          ij      misc        1         -      r        "SNOWNCV"               "TIME-STEP NONCONVECTIVE SNOW AND ICE"                    "mm"
+state    real  GRAUPELNCV       ij      misc        1         -      r        "GRAUPELNCV"            "TIME-STEP NONCONVECTIVE GRAUPEL"                      "mm"
+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"
+state    real  apr_w            ij      misc         1         -      r       "APR_W"                 "PRECIP FROM CLOSURE W"           "mm hour-1"
+state    real  apr_mc           ij      misc         1         -      r       "APR_MC"                "PRECIP FROM CLOSURE KRISH MV"    "mm hour-1"
+state    real  apr_st           ij      misc         1         -      r       "APR_ST"                "PRECIP FROM CLOSURE STABILITY"   "mm hour-1"
+state    real  apr_as           ij      misc         1         -      r       "APR_AS"                "PRECIP FROM CLOSURE AS-TYPE"     "mm hour-1"
+state    real  apr_capma        ij      misc         1         -      r       "APR_CAPMA"             "PRECIP FROM MAX CAP"             "mm hour-1"
+state    real  apr_capme        ij      misc         1         -      r       "APR_CAPME"             "PRECIP FROM MEAN CAP"            "mm hour-1"
+state    real  apr_capmi        ij      misc         1         -      r       "APR_CAPMI"             "PRECIP FROM MIN CAP"             "mm hour-1"
+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  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"
+
+state integer  STEPCU          -        misc        1         -      r        "STEPCU"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN CONVECTION CALLS"  ""
+                                                
+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"              "COUPLED THETA TENDENCY DUE TO LONG WAVE RADIATION"    "Pa K s-1"
+state    real  RTHRATENSW      ikj      misc        1         -      r        "RTHRATSW"              "COUPLED THETA TENDENCY DUE TO SHORT WAVE RADIATION"   "Pa K s-1"
+state    real  CLDFRA          ikj      misc        1         -      r        "CLDFRA"                "CLOUD FRACTION"                                       ""
+state    real  GLW              ij      misc        1         -      rd       "GLW"                   "DOWNWARD LONG  WAVE FLUX AT GROUND SURFACE"           "W m-2"      
+state    real  SWDOWNC          ij      misc        1         -      -        "SWDOWNC"               "DOWNWARD CLEAR-SKY SHORT WAVE FLUX AT GROUND SURFACE"           "W m-2"      
+state    real  GSW              ij      misc        1         -      rd       "GSW"                   "NET SHORT WAVE FLUX AT GROUND SURFACE"           "W m-2"      
+
+
+# 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"
+#state    real  ACSWDNT          ij      misc        1         -      rhdu     "ACSWDNT"               "ACCUMULATED DOWNWELLING SHORTWAVE FLUX AT TOP"          "J m-2"
+#state    real  ACSWDNTC         ij      misc        1         -      rhdu     "ACSWDNTC"              "ACCUMULATED DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2"
+#state    real  ACSWUPB          ij      misc        1         -      rhdu     "ACSWUPB"               "ACCUMULATED UPWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACSWUPBC         ij      misc        1         -      rhdu     "ACSWUPBC"              "ACCUMULATED UPWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  ACSWDNB          ij      misc        1         -      rhdu     "ACSWDNB"               "ACCUMULATED DOWNWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACSWDNBC         ij      misc        1         -      rhdu     "ACSWDNBC"              "ACCUMULATED DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  ACLWUPT          ij      misc        1         -      rhdu     "ACLWUPT"               "ACCUMULATED UPWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  ACLWUPTC         ij      misc        1         -      rhdu     "ACLWUPTC"              "ACCUMULATED UPWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  ACLWDNT          ij      misc        1         -      rhdu     "ACLWDNT"               "ACCUMULATED DOWNWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  ACLWDNTC         ij      misc        1         -      rhdu     "ACLWDNTC"              "ACCUMULATED DOWNWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  ACLWUPB          ij      misc        1         -      rhdu     "ACLWUPB"               "ACCUMULATED UPWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACLWUPBC         ij      misc        1         -      rhdu     "ACLWUPBC"              "ACCUMULATED UPWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  ACLWDNB          ij      misc        1         -      rhdu     "ACLWDNB"               "ACCUMULATED DOWNWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACLWDNBC         ij      misc        1         -      rhdu     "ACLWDNBC"              "ACCUMULATED DOWNWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  SWUPT            ij      misc        1         -      rhdu     "SWUPT"                 "INSTANTANEOUS UPWELLING SHORTWAVE FLUX AT TOP"          "J m-2"
+#state    real  SWUPTC           ij      misc        1         -      rhdu     "SWUPTC"                "INSTANTANEOUS UPWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2"
+#state    real  SWDNT            ij      misc        1         -      rhdu     "SWDNT"                 "INSTANTANEOUS DOWNWELLING SHORTWAVE FLUX AT TOP"          "J m-2"
+#state    real  SWDNTC           ij      misc        1         -      rhdu     "SWDNTC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2"
+#state    real  SWUPB            ij      misc        1         -      rhdu     "SWUPB"                 "INSTANTANEOUS UPWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  SWUPBC           ij      misc        1         -      rhdu     "SWUPBC"                "INSTANTANEOUS UPWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  SWDNB            ij      misc        1         -      rhdu     "SWDNB"                 "INSTANTANEOUS DOWNWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  SWDNBC           ij      misc        1         -      rhdu     "SWDNBC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  LWUPT            ij      misc        1         -      rhdu     "LWUPT"                 "INSTANTANEOUS UPWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  LWUPTC           ij      misc        1         -      rhdu     "LWUPTC"                "INSTANTANEOUS UPWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  LWDNT            ij      misc        1         -      rhdu     "LWDNT"                 "INSTANTANEOUS DOWNWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  LWDNTC           ij      misc        1         -      rhdu     "LWDNTC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  LWUPB            ij      misc        1         -      rhdu     "LWUPB"                 "INSTANTANEOUS UPWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  LWUPBC           ij      misc        1         -      rhdu     "LWUPBC"                "INSTANTANEOUS UPWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  LWDNB            ij      misc        1         -      rhdu     "LWDNB"                 "INSTANTANEOUS DOWNWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  LWDNBC           ij      misc        1         -      rhdu     "LWDNBC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+
+state    real  SWCF             ij      misc        1         -      r         "SWCF"                  "SHORT WAVE CLOUD FORCING AT TOA"                     "W m-2"
+state    real  LWCF             ij      misc        1         -      r         "LWCF"                  "LONG WAVE CLOUD FORCING AT TOA"                      "W m-2"
+state    real  OLR              ij      misc        1         -      r         "OLR"                   "TOA OUTGOING LONG WAVE"                              "W m-2"
+
+# these next 2 are for the HFSoLE/PET demo; writing these to auxhist1 output over MCEL for coupling
+# with wave model, only if compiled with -DMCELIO, JM 2003/05/29
+state    real  XLAT             ij      misc        1         -     i0123rh01du=(copy_fcnm)      "XLAT"                "LATITUDE, SOUTH IS NEGATIVE"                                          "degree_north"
+state    real  XLONG            ij      misc        1         -     i0123rh01du=(copy_fcnm)      "XLONG"               "LONGITUDE, WEST IS NEGATIVE"                                          "degree_east"
+state    real  XLAT_U           ij      dyn_em      1         X     i012rh01du=(copy_fcnm)       "XLAT_U"              "LATITUDE, SOUTH IS NEGATIVE"                                          "degree_north"
+state    real  XLONG_U          ij      dyn_em      1         X     i012rh01du=(copy_fcnm)       "XLONG_U"             "LONGITUDE, WEST IS NEGATIVE"                                          "degree_east"
+state    real  XLAT_V           ij      dyn_em      1         Y     i012rh01du=(copy_fcnm)       "XLAT_V"              "LATITUDE, SOUTH IS NEGATIVE"                                          "degree_north"
+state    real  XLONG_V          ij      dyn_em      1         Y     i012rh01du=(copy_fcnm)       "XLONG_V"             "LONGITUDE, WEST IS NEGATIVE"                                          "degree_east"
+state    real  ALBEDO           ij      misc        1         -      r           "ALBEDO"                   "ALBEDO"
+state    real  ALBBCK           ij      misc        1         -     i012r        "ALBBCK"                   "BACKGROUND ALBEDO"        ""
+state    real  EMISS            ij      misc        1         -      r        "EMISS"                 "SURFACE EMISSIVITY"         "" 
+
+state    real  CLDEFI           ij      misc        1         -      r        "CLDEFI"                "precipitation efficiency in BMJ SCHEME"    ""      
+state integer  STEPRA          -        misc        1         -      r        "STEPRA"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN RADIATION CALLS"        ""
+                                                
+state    real  RUBLTEN         ikj      misc        1         -      r        "RUBLTEN"               "COUPLED X WIND TENDENCY DUE TO PBL PARAMETERIZATION"  "Pa m s-2"
+state    real  RVBLTEN         ikj      misc        1         -      r        "RVBLTEN"               "COUPLED Y WIND TENDENCY DUE TO PBL PARAMETERIZATION"  "Pa m s-2"
+state    real  RTHBLTEN        ikj      misc        1         -      r        "RTHBLTEN"              "COUPLED THETA TENDENCY DUE TO PBL PARAMETERIZATION"   "Pa K s-1"
+state    real  RQVBLTEN        ikj      misc        1         -      r        "RQVBLTEN"              "COUPLED Q_V TENDENCY DUE TO PBL PARAMETERIZATION"     "Pa kg kg-1 s-1"
+state    real  RQCBLTEN        ikj      misc        1         -      r        "RQCBLTEN"              "COUPLED Q_C TENDENCY DUE TO PBL PARAMETERIZATION"     "Pa kg kg-1 s-1"
+state    real  RQIBLTEN        ikj      misc        1         -      r        "RQIBLTEN"              "COUPLED Q_I TENDENCY DUE TO PBL PARAMETERIZATION"     "Pa kg kg-1 s-1"      
+
+# State vector for etampnew microphysics. Must be declared state because it is not read-once and is needed for restarting.
+state    real  mp_restart_state   p      misc        1         -      r       "MP_RESTART_STATE"       "STATE VECTOR FOR MICROPHYSICS RESTARTS"
+state    real  tbpvs_state        p      misc        1         -      r        "TBPVS_STATE"           "STATE FOR ETAMPNEW MICROPHYSICS"
+state    real  tbpvs0_state       p      misc        1         -      r        "TBPVS0_STATE"          "STATE FOR ETAMPNEW MICROPHYSICS"
+
+# State variables for landuse_init, Must be declared state because they are read in and needed for restarts. Had been SAVE vars in
+# landuse_init (phys/module_physics_init.F)
+state    integer  landuse_isice   -      misc       -          -     r
+state    integer  landuse_lucats  -      misc       -          -     r
+state    integer  landuse_luseas  -      misc       -          -     r
+state    integer  landuse_isn     -      misc       -          -     r
+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         -                                          
+i1       real  t_phy           ikj      misc        1         -                                          
+i1       real  u_phy           ikj      misc        1         -                                          
+i1       real  v_phy           ikj      misc        1         -                                          
+i1       real  dz8w            ikj      misc        1         Z                                          
+i1       real  p8w             ikj      misc        1         Z                                          
+i1       real  t8w             ikj      misc        1         Z                                          
+i1       real  rho_phy         ikj      misc        1         -                                          
+i1    logical  CU_ACT_FLAG     ij       misc        1         -
+
+                                                
+state    real  TMN              ij      misc        1         -     i012rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TMN"                   "SOIL TEMPERATURE AT LOWER BOUNDARY"           "K"
+state    real  XLAND            ij      misc        1         -     i02rd=(interp_fcnm)u=(copy_fcnm)       "XLAND"                 "LAND MASK (1 FOR LAND, 2 FOR WATER)"          ""      
+state    real  ZNT              ij      misc        1         -      i3r      "ZNT"                   "TIME-VARYING ROUGHNESS LENGTH"                "m"      
+state    real  UST              ij      misc        1         -      r        "UST"                   "U* IN SIMILARITY THEORY"                      "m s-1"      
+i1       real  HOL              ij      misc        1         -      -        "HOL"                   "PBL HEIGHT OVER MONIN-OBUKHOV LENGTH"         ""
+state    real  RMOL             ij      misc        1         -     r        "RMOL"                   "1./Monin Ob. Length"                      ""
+state    real  MOL              ij      misc        1         -      r        "MOL"                   "T* IN SIMILARITY THEORY"                      "K"      
+state    real  PBLH             ij      misc        1         -      r        "PBLH"                  "PBL HEIGHT"         "m"      
+state    real  CAPG             ij      misc        1         -      r        "CAPG"                  "HEAT CAPACITY FOR SOIL"                       "J K-1 m-3"      
+state    real  THC              ij      misc        1         -      r        "THC"                   "THERMAL INERTIA"                              "Cal cm-1 K-1 s-0.5"      
+state    real  HFX              ij      misc        1         -      r        "HFX"                   "UPWARD HEAT FLUX AT THE SURFACE"              "W m-2"      
+state    real  QFX              ij      misc        1         -      r        "QFX"                   "UPWARD MOISTURE FLUX AT THE SURFACE"          "kg m-2 s-1"      
+state    real  LH               ij      misc        1         -      r        "LH"                    "LATENT HEAT FLUX AT THE SURFACE"              "W m-2"
+state    real  FLHC             ij      misc        1         -      r        "FLHC"                  "SURFACE EXCHANGE COEFFICIENT FOR HEAT"       ""
+state    real  FLQC             ij      misc        1         -      r        "FLQC"                  "SURFACE EXCHANGE COEFFICIENT FOR MOISTURE"   ""
+state    real  QSG              ij      misc        1         -      r        "QSG"                   "SURFACE SATURATION WATER VAPOR MIXING RATIO"   "kg kg-1"
+state    real  QVG              ij      misc        1         -      r        "QVG"                   "WATER VAPOR MIXING RATIO AT THE SURFACE"      "kg kg-1"
+state    real  QCG              ij      misc        1         -      r        "QCG"                   "CLOUD WATER MIXING RATIO AT THE SURFACE"      "kg kg-1"
+state    real  SOILT1           ij      misc        1         -      r        "SOILT1"                "TEMPERATURE INSIDE SNOW "    "K"
+state    real  TSNAV            ij      misc        1         -      r        "TSNAV"                 "AVERAGE SNOW TEMPERATURE "                    "C"
+i1       real  REGIME           ij      misc        1         -                                          
+state    real  SNOWC            ij      misc        1         -     ird=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "SNOWC"                 "FLAG INDICATING SNOW COVERAGE (1 FOR SNOW COVER)"         ""
+state    real  MAVAIL           ij      misc        1         -      r        "MAVAIL"                "SURFACE MOISTURE AVAILABILITY"                ""
+                                                
+state   real   tkesfcf          ij      misc        1         -      r        "tkesfcf"               "TKE AT THE SURFACE"                           "m2 s-2"      
+                                                
+state integer  STEPBL          -        misc        1         -      r        "STEPBL"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN PBL CALLS" ""      
+state    real  taucldi         ikj      misc        1         -      r        "TAUCLDI"               "CLOUD OPTICAL THICKNESS FOR ICE"              ""
+state    real  taucldc         ikj      misc        1         -      r        "TAUCLDC"               "CLOUD OPTICAL THICKNESS FOR WATER"            ""
+                                                
+state   real  defor11          ikj      misc        1         -     r         "defor11"               "DEFORMATION 11"              "s-1"      
+state   real  defor22          ikj      misc        1         -     r         "defor22"               "DEFORMATION 22"              "s-1"      
+state   real  defor12          ikj      misc        1         -     r         "defor12"               "DEFORMATION 12"              "s-1"      
+state   real  defor33          ikj      misc        1         z     r         "defor33"               "DEFORMATION 33"              "s-1"      
+state   real  defor13          ikj      misc        1         z     r         "defor13"               "DEFORMATION 13"              "s-1"      
+state   real  defor23          ikj      misc        1         z     r         "defor23"               "DEFORMATION 23"              "s-1"      
+state   real   xkmv            ikj      misc        1         -     r         "xkmv"                  "VERTICAL EDDY VISCOSITY"     "m2 s-1"      
+state   real   xkmh            ikj      misc        1         -     r         "xkmh"                  "HORIZONTAL EDDY VISCOSITY"   "m2 s-1"      
+state   real   xkmhd           ikj      misc        1         -     r         "xkmhd"                 "HORIZONTAL EDDY DIFFUSIVITY" "m2 s-1"      
+state   real   xkhv            ikj      misc        1         -     r         "xkhv"                  "VERTICAL EDDY DIFFUSIVITY OF HEAT"                               "m2 s-1"      
+state   real   xkhh            ikj      misc        1         -     r         "xkhh"                  "HORIZONTAL EDDY DIFFUSIVITY OF HEAT"                             "m2 s-1"      
+state   real    div            ikj      misc        1         -     r         "div"                   "DIVERGENCE"                                                      "s-1"
+state   real    BN2            ikj      misc        1         -     r         "BN2"                   "BRUNT-VAISALA FREQUENCY"                                         "s-2"
+state  logical warm_rain        -       misc        1         -     -         "warm_rain"              "WARM_RAIN_LOGICAL"
+state  logical adv_moist_cond   -       misc        1         -     -         "adv_moist_cond"         "ADVECT MOIST CONDENSATES LOGICAL"
+
+## FDDA variables
+
+state integer  STEPFG            -        misc        1         -      r        "STEPFG"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN FDDA GRID CALLS" ""
+state    real  RUNDGDTEN         ikj      misc        1         X      r        "RUNDGDTEN"               "COUPLED X WIND TENDENCY DUE TO FDDA GRID NUDGING"  "Pa m s-2"
+state    real  RVNDGDTEN         ikj      misc        1         Y      r        "RVNDGDTEN"               "COUPLED Y WIND TENDENCY DUE TO FDDA GRID NUDGING"  "Pa m s-2"
+state    real  RTHNDGDTEN        ikj      misc        1         -      r        "RTHNDGDTEN"              "COUPLED THETA TENDENCY DUE TO FDDA GRID NUDGING"   "Pa K s-1"
+state    real  RQVNDGDTEN        ikj      misc        1         -      r        "RQVNDGDTEN"              "COUPLED Q_V TENDENCY DUE TO FDDA GRID NUDGING"     "Pa kg kg-1 s-1"
+state    real  RMUNDGDTEN        ij       misc        1         -      r        "RMUNDGDTEN"              "MU TENDENCY DUE TO FDDA GRID NUDGING"     "Pa s-1"
+state    real    -               ikjf     fdda3d      1         -     -    -
+state    real  U_NDG_NEW         ikjf     fdda3d      1         X      igr      "U_NDG_NEW"               "NEW X WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  V_NDG_NEW         ikjf     fdda3d      1         Y      igr      "V_NDG_NEW"               "NEW Y WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  T_NDG_NEW         ikjf     fdda3d      1         -      igr      "T_NDG_NEW"               "NEW PERT POT TEMP FOR FDDA GRID NUDGING"  "K"
+state    real  Q_NDG_NEW         ikjf     fdda3d      1         -      igr      "Q_NDG_NEW"               "NEW WATER VAPOR MIX RATIO FOR FDDA GRID NUDGING"  "kg/kg"
+state    real  PH_NDG_NEW        ikjf     fdda3d      1         Z      igr      "PH_NDG_NEW"              "NEW PERT GEOPOTENTIAL FOR FDDA GRID NUDGING"  "kg/kg"
+state    real  U_NDG_OLD         ikjf     fdda3d      1         X      igr      "U_NDG_OLD"               "OLD X WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  V_NDG_OLD         ikjf     fdda3d      1         Y      igr      "V_NDG_OLD"               "OLD Y WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  T_NDG_OLD         ikjf     fdda3d      1         -      igr      "T_NDG_OLD"               "OLD PERT POT TEMP FOR FDDA GRID NUDGING"  "K"
+state    real  Q_NDG_OLD         ikjf     fdda3d      1         -      igr      "Q_NDG_OLD"               "OLD WATER VAPOR MIX RATIO FOR FDDA GRID NUDGING"  "kg/kg"
+state    real  PH_NDG_OLD        ikjf     fdda3d      1         Z      igr      "PH_NDG_OLD"              "OLD PERT GEOPOTENTIAL FOR FDDA GRID NUDGING"  "kg/kg"
+state    real    -               ivjf     fdda2d      1         Z     -    -
+state    real  MU_NDG_NEW        ivjf     fdda2d      1         Z      igr      "MU_NDG_NEW"              "NEW PERT COLUMN DRY MASS FOR FDDA GRID NUDGING"  "Pa"
+state    real  MU_NDG_OLD        ivjf     fdda2d      1         Z      igr      "MU_NDG_OLD"              "OLD PERT COLUMN DRY MASS FOR FDDA GRID NUDGING"  "Pa"
+
+
+# flag for nest movement
+state  logical moved            -       misc        1         -     -          
+
+# special cam radiation restart arrays
+state  real   abstot   ikcj   misc      1    Z   -     ""   ""  " "
+state  real   absnxt   ikaj   misc      1    -   -     ""   ""  " "
+state  real   emstot   ikj    misc      1    Z   -     ""   ""  " "
+
+# model diagnostics
+state   real  dpsdt            ij       misc        1         -     -         "dpsdt"           "surface pressure tendency"                         "Pa/sec"
+state   real  dmudt            ij       misc        1         -     -         "dmudt"           "mu tendency"                                       "Pa/sec"
+state   real  pk1m             ij       misc        1         -     -         "pk1m"            "surface pressure at previous step"                 "Pa"
+state   real  mu_2m            ij       misc        1         -     -         "mu_2m"           "mu_2 at previous step"                             "Pa"
+
+#
+#---------------------------------------------------------------------------------------------------------------------------------------
+#                                               
+
+######                                          
+#                                               
+# Variables that are set at run-time to control configuration  (namelist-settable)                                              
+#                                               
+#<Table>  <Type>  <Sym>                   <How set>          <Nentries>   <Default>                                             
+
+
+# Time Control
+rconfig   integer run_days                namelist,time_control		1             0       irh   "run_days"              "NUMBER OF DAYS TO RUN"
+rconfig   integer run_hours               namelist,time_control		1             0       irh   "run_hours"             "NUMBER OF HOURS TO RUN"
+rconfig   integer run_minutes             namelist,time_control		1             0       irh   "run_minutes"           "NUMBER OF MINUTES TO RUN"
+rconfig   integer run_seconds             namelist,time_control		1             0       irh   "run_seconds"           "NUMBER OF SECONDS TO RUN"
+rconfig   integer start_year              namelist,time_control 	max_domains    1999    irh   "start_year"            "4 DIGIT YEAR OF START OF MODEL" "YEARS"
+rconfig   integer start_month             namelist,time_control		max_domains      09    irh   "start_month"           "2 DIGIT MONTH OF THE YEAR OF START OF MODEL, 1-12" "MONTHS"
+rconfig   integer start_day               namelist,time_control		max_domains      09    irh   "start_day"             "2 DIGIT DAY OF THE MONTH OF START OF MODEL, 1-31" "DAYS"
+rconfig   integer start_hour              namelist,time_control		max_domains      09    irh   "start_hour"            "2 DIGIT HOUR OF THE DAY OF START OF MODEL, 0-23" "HOURS"
+rconfig   integer start_minute            namelist,time_control		max_domains      00    irh   "start_minute"          "2 DIGIT MINUTE OF THE HOUR OF START OF MODEL, 0-59" "MINUTES"
+rconfig   integer start_second            namelist,time_control		max_domains      00    irh   "start_second"          "2 DIGIT SECOND OF THE MINUTE OF START OF MODEL, 0-59" "SECONDS"
+rconfig   integer end_year                namelist,time_control		max_domains    1999    irh   "end_year"              "4 DIGIT YEAR OF END OF MODEL" "YEARS"
+rconfig   integer end_month               namelist,time_control		max_domains      09    irh   "end_month"             "2 DIGIT MONTH OF THE YEAR OF END OF MODEL, 1-12" "MONTHS"
+rconfig   integer end_day                 namelist,time_control		max_domains      09    irh   "end_day"               "2 DIGIT DAY OF THE MONTH OF END OF MODEL, 1-31" "DAYS"
+rconfig   integer end_hour                namelist,time_control		max_domains      19    irh   "end_hour"              "2 DIGIT HOUR OF THE DAY OF END OF MODEL, 0-23" "HOURS"
+rconfig   integer end_minute              namelist,time_control		max_domains      00    irh   "end_minute"            "2 DIGIT MINUTE OF THE HOUR OF END OF MODEL, 0-59" "MINUTES"
+rconfig   integer end_second              namelist,time_control		max_domains      00    irh   "end_second"            "2 DIGIT SECOND OF THE MINUTE OF END OF MODEL, 0-59" "SECONDS"
+rconfig   integer interval_seconds        namelist,time_control		1              3700    irh   "interval_seconds"      "SECONDS BETWEEN ANALYSIS AND BOUNDARY PERIODS" "SECONDS"
+rconfig   logical input_from_file         namelist,time_control		max_domains    .true.  irh    "input_from_file"      "T/F INPUT FOR THIS DOMAIN FROM A SEPARATE INPUT FILE"  ""
+rconfig   integer fine_input_stream       namelist,time_control		max_domains    0       irh    "fine_input_stream"      "0 THROUGH 5, WHAT INPUT STREAM IS FINE GRID IC FROM"  ""
+rconfig   logical input_from_hires        namelist,time_control		max_domains    .false. irh    "input_from_hires"     "T/F INPUT FOR THIS DOMAIN FROM USGS HI RES TERRAIN"  ""
+rconfig   character rsmas_data_path       namelist,time_control		1              "."     -    "rsmas_data_path"      ""  ""
+
+include registry.io_boilerplate
+
+rconfig   integer JULYR                   namelist,time_control		max_domains    0       h    "JULYR"                 ""      ""
+rconfig   integer JULDAY                  namelist,time_control		max_domains    1       h    "JULDAY"                ""      ""
+rconfig   real    GMT                     namelist,time_control		max_domains    0.      h    "GMT"           ""      ""
+rconfig   character  input_inname      namelist,time_control		1  "wrfinput_d<domain>"          -     "name of input   infile"   ""      ""
+rconfig   character  input_outname     namelist,time_control		1  "wrfinput_d<domain>"          -     "name of input   outfile"  ""      ""
+rconfig   character  bdy_inname        namelist,time_control		1  "wrfbdy_d<domain>"            -     "name of boundary infile"  ""      ""
+rconfig   character  bdy_outname       namelist,time_control		1  "wrfbdy_d<domain>"            -     "name of boundary outfile" ""      ""
+rconfig   character  rst_inname        namelist,time_control		1  "wrfrst_d<domain>_<date>"     -     "name of restrt infile"    ""      ""
+rconfig   character  rst_outname       namelist,time_control		1  "wrfrst_d<domain>_<date>"     -     "name of restrt outfile"   ""      ""
+rconfig   logical write_input             namelist,time_control		1             .false. -    "write input data for 3dvar etc."              ""      ""
+rconfig   logical write_restart_at_0h     namelist,time_control		1             .false. h    "write_restart_at_0h"              ""      ""
+rconfig   logical adjust_output_times     namelist,time_control         1             .false. -    "adjust_output_times"
+rconfig   logical adjust_input_times      namelist,time_control         1             .false. -    "adjust_input_times"
+
+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"
+
+# Domains
+rconfig   integer time_step               namelist,domains	1             -       ih   "time_step"     
+rconfig   integer time_step_fract_num     namelist,domains	1             0       ih   "time_step_fract_num"     
+rconfig   integer time_step_fract_den     namelist,domains	1             1       ih   "time_step_fract_den"     
+rconfig   integer max_dom                 namelist,domains	1             1       irh  "max_dom"               ""      ""
+rconfig   integer s_we                    namelist,domains	max_domains    1       irh    "s_we"          ""      ""
+rconfig   integer e_we                    namelist,domains	max_domains    101     irh    "e_we"          ""      ""
+rconfig   integer s_sn                    namelist,domains	max_domains    1       irh    "s_sn"          ""      ""
+rconfig   integer e_sn                    namelist,domains	max_domains    101     irh    "e_sn"          ""      ""
+rconfig   integer s_vert                  namelist,domains	max_domains    1       irh    "s_vert"                ""      ""
+rconfig   integer e_vert                  namelist,domains	max_domains    51      irh    "e_vert"                ""      ""
+rconfig   integer num_metgrid_levels      namelist,domains	1              26      irh    "num_metgrid_levels"                ""      ""
+rconfig   real    p_top_requested         namelist,domains      1              2       irh    "p_top_requested" "Pa"      ""
+rconfig   integer interp_type             namelist,domains	1              2       irh    "interp_type"  "1=interp in pressure, 2=interp in LOG pressure"      ""
+rconfig   logical lowest_lev_from_sfc     namelist,domains	1             .false.  irh    "lowest_lev_from_sfc"                ""      ""
+rconfig   integer lagrange_order          namelist,domains	1              1       irh    "lagrange_order"   "1=linear, 2=quadratic vertical interpolation"      ""
+rconfig   integer force_sfc_in_vinterp    namelist,domains	1              8       irh    "force_sfc_in_vinterp"   "number of eta levels forced to use sfc in vert interp"      ""
+rconfig   real    zap_close_levels        namelist,domains	1              0       irh    "zap_close_levels"   "delta p where level is removed in vert interp"      "Pa"
+rconfig   logical sfcp_to_sfcp            namelist,domains	1              .true.  irh    "sfcp_to_sfcp"   "T/F use incoming sfc pres to compute new sfc pres"      "flag"
+rconfig   logical adjust_heights          namelist,domains	1              .false. irh    "adjust_heights"   "T/F adjust pressure level input to match 500 mb height"      "flag"
+rconfig   real    dx                      namelist,domains      max_domains   5000     h     "dx"        "X HORIZONTAL RESOLUTION"   "METERS"
+rconfig   real    dy                      namelist,domains   	max_domains   5000     h     "dy"        "Y HORIZONTAL RESOLUTION"   "METERS"
+rconfig   integer grid_id                 namelist,domains	max_domains    1       irh    "id"            ""      ""
+rconfig   integer parent_id               namelist,domains	max_domains    0       h     "parent_id"             ""      ""
+rconfig   integer i_parent_start          namelist,domains	max_domains    0       rh    "i_parent_start"                ""      ""
+rconfig   integer j_parent_start          namelist,domains	max_domains    0       rh    "j_parent_start"                ""      ""
+rconfig   integer parent_grid_ratio       namelist,domains	max_domains    1       h     "parent_grid_ratio"             ""      ""
+rconfig   integer parent_time_step_ratio  namelist,domains	max_domains    1       h     "parent_time_step_ratio"                ""      ""
+rconfig   integer feedback                namelist,domains	1    0       h     "feedback"          ""      ""
+rconfig   integer smooth_option           namelist,domains	1    0       h     "smooth_option"          ""      ""
+rconfig   integer blend_width             namelist,domains	1    5       h     "blend_width"  "width of cg fg terrain blended zone"      ""
+rconfig   real    ztop                    namelist,domains	max_domains    35000.  h    "ztop"          ""      ""
+rconfig   integer moad_grid_ratio         namelist,domains	max_domains    1       h     "moad_grid_ratio"               ""      ""
+rconfig   integer moad_time_step_ratio    namelist,domains	max_domains    1       h     "moad_time_step_ratio"          ""      ""
+rconfig   integer shw                     namelist,domains	max_domains    2       h     "stencil_half_width"   "HORIZONTAL INTERPOLATION STENCIL HALF-WIDTH"  "GRID POINTS"
+rconfig   integer tile_sz_x               namelist,domains	1             0       -      "tile_sz_x"             ""      ""
+rconfig   integer tile_sz_y               namelist,domains	1             0       -      "tile_sz_y"             ""      ""
+rconfig   integer numtiles                namelist,domains	1             1       -      "numtiles"              ""      ""
+rconfig   integer nproc_x                 namelist,domains	1             -1       -      "nproc_x"              "-1 means not set"      ""
+rconfig   integer nproc_y		  namelist,domains	1             -1       -      "nproc_y"              "-1 means not set"      ""
+rconfig   integer irand                   namelist,domains	1             0       -      "irand"           ""      ""
+rconfig   real    dt                      derived              max_domains    2.      h     "dt"        "TEMPORAL RESOLUTION"      "SECONDS"
+rconfig   integer   num_moves       namelist,domains    1                0
+rconfig   integer   vortex_interval  namelist,domains   max_domains      15  -  "" "" "minutes"
+rconfig   integer   max_vortex_speed namelist,domains   max_domains      40  -  "" "" "meters per second"
+rconfig   integer   corral_dist     namelist,domains    max_domains      8
+rconfig   integer   move_id         namelist,domains    max_moves        0
+rconfig   integer   move_interval   namelist,domains    max_moves        999999999
+rconfig   integer   move_cd_x       namelist,domains    max_moves        0
+rconfig   integer   move_cd_y       namelist,domains    max_moves        0
+rconfig   logical   swap_x          namelist,domains    max_domains    .false. rh    "swap_x"            ""      ""
+rconfig   logical   swap_y          namelist,domains    max_domains    .false. rh    "swap_y"            ""      ""
+rconfig   logical   cycle_x         namelist,domains    max_domains    .false. rh    "cycle_x"            ""      ""
+rconfig   logical   cycle_y         namelist,domains    max_domains    .false. rh    "cycle_y"            ""      ""
+rconfig   logical   reorder_mesh    namelist,domains    1              .false. rh    "reorder_mesh"       ""      ""
+rconfig   logical   perturb_input   namelist,domains    1              .false. h     "" "" ""
+rconfig   real      eta_levels      namelist,domains    max_eta        -1.
+rconfig   real      max_dz          namelist,domains    1               1500.
+
+# Physics
+#######
+####### MARS SPECIFIC NAMELIST ENTRIES
+#######
+rconfig  integer  mars      namelist,physics  max_domains  0        rh   "mars"      "model mode"              ""
+rconfig  real     init_TI   namelist,physics  max_domains  0        irh  "init_TI"   "thermal inertia"         ""
+rconfig  real     init_AL   namelist,physics  max_domains  0        irh  "init_AL"   "albedo"                  ""
+rconfig  real     init_U    namelist,physics  max_domains  0        irh  "init_U"    "zonal wind"              ""
+rconfig  real     init_V    namelist,physics  max_domains  0        irh  "init_V"    "meridional wind"         ""
+rconfig  integer  init_WX   namelist,physics  max_domains  0        irh  "init_WX"   "x coord"                 ""
+rconfig  integer  init_WY   namelist,physics  max_domains  0        irh  "init_WY"   "y coord"                 ""
+rconfig  real     init_MU   namelist,physics  max_domains  0        irh  "init_MU"   "zonal wind mult."        ""
+rconfig  real     init_MV   namelist,physics  max_domains  0        irh  "init_MV"   "meridional wind mult."   ""
+rconfig  logical  init_LES  namelist,physics  max_domains  .false.  irh  "init_LES"  "LES mode"                ""
+rconfig  logical  modif_wrf namelist,physics  max_domains  .true.   ir   "modif_wrf" "true if tweaked WRF"     ""
+#######
+####### MARS SPECIFIC NAMELIST ENTRIES
+#######
+rconfig   integer     mp_physics          namelist,physics	max_domains    0       rh       "mp_physics"            ""      ""
+rconfig   integer     ra_lw_physics       namelist,physics	max_domains    0       rh       "ra_lw_physics"         ""      ""
+rconfig   integer     ra_sw_physics       namelist,physics	max_domains    0       rh       "ra_sw_physics"         ""      ""
+rconfig   real    radt                    namelist,physics	max_domains    1       h    "RADT"          ""      ""
+rconfig   integer     sf_sfclay_physics   namelist,physics	max_domains    0       rh       "sf_sfclay_physics"             ""      ""
+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   real    BLDT                    namelist,physics	max_domains    0       h    "BLDT"          ""      ""
+rconfig   integer     cu_physics          namelist,physics	max_domains    0       rh       "cu_physics"            ""      ""
+rconfig   real    CUDT                    namelist,physics	max_domains    100000   h    "CUDT"          ""      ""
+rconfig   real    GSMDT                   namelist,physics	max_domains    0       h    "GSMDT"          ""      ""
+rconfig   integer ISFFLX                  namelist,physics 	1             1       irh    "ISFFLX"                        ""      ""
+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 num_soil_layers         namelist,physics	1            10       irh    "num_soil_layers"               ""      ""
+rconfig   integer num_months              namelist,physics      1            12       irh    "num_months"               ""      ""
+rconfig   integer maxiens                 namelist,physics	1             1       irh    "maxiens"                    ""      ""
+rconfig   integer maxens                  namelist,physics	1             3       irh    "maxens"                    ""      ""
+rconfig   integer maxens2                 namelist,physics	1             3       irh    "maxens2"                    ""      ""
+rconfig   integer maxens3                 namelist,physics	1            16       irh    "maxens3"                    ""      ""
+rconfig   integer ensdim                  namelist,physics	1            144      irh    "ensdim"                    ""      ""
+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"                  ""      ""
+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"
+rconfig   real mp_zero_out_thresh         namelist,physics	1          1.e-8      -      "mp_zero_out_thresh"  "minimum threshold for non-Qv moist fields, below are set to zero"  "kg/kg"
+rconfig   real    seaice_threshold        namelist,physics	1            271       h    "seaice_threshold"  "tsk below which which water points are set to sea ice for slab scheme"   "K"
+rconfig   integer sst_update              namelist,physics	1            0         h    "sst_update"  "update sst from wrflowinp file  0=no, 1=yes"   ""
+rconfig   integer ucmcall                 namelist,physics      1            0         h    "ucmcall"     "activate urban model  0=no, 1=yes"   ""
+rconfig   integer co2tf                   namelist,physics	1            0         -    "co2tf" "GFDL radiation co2 flag" ""
+rconfig   integer ra_call_offset          namelist,physics	1            0         -    "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"
+rconfig   integer levsiz                  namelist,physics      1             1       -      "levsiz" "Number of ozone data levels for CAM radiation (59)"  ""
+rconfig   integer paerlev                 namelist,physics      1             1       -      "paerlev" "Number of aerosol data levels for CAM radiation (29)"  ""
+rconfig   integer cam_abs_dim1            namelist,physics      1             1       -      "cam_abs_dim1" "dimension for absnxt in CAM radiation"  ""
+rconfig   integer cam_abs_dim2            namelist,physics      1             1       -      "cam_abs_dim2" "dimension for abstot in CAM radiation"  ""
+rconfig   logical cu_rad_feedback             namelist.physics      max_domains   .false.  -     "feedback cumulus to radiation"
+
+#FDDA namelist parameters
+rconfig   real    FGDT                    namelist,fdda         max_domains    0       h        "FGDT"          ""      ""
+rconfig   integer  grid_fdda              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_no_pbl_nudging_uv   namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_no_pbl_nudging_t    namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_no_pbl_nudging_q    namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_zfac_uv             namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer   k_zfac_uv             namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_zfac_t              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer   k_zfac_t              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_zfac_q              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer   k_zfac_q              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real        guv                 namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real        gt                  namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real        gq                  namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real    dtramp_min              namelist,fdda         1              0       h        "grid_fdda"            ""      ""
+rconfig   integer if_ramping              namelist,fdda         1              0       h        "grid_fdda"            ""      ""
+
+#Observational Nudging
+rconfig   integer     obs_nudge_opt       namelist,fdda            max_domains    0       rh       "obs_nudge_opt"     "Obs-nudging flag for domain"          ""
+rconfig   integer     max_obs             namelist,fdda            1              0       h        "max_obs"           "Maximum number of observations"       ""
+rconfig   integer     nobs_ndg_vars       namelist,fdda            1              0       h        "num_ndg_vars"      "Number of nudging variables"          ""
+rconfig   integer     nobs_err_flds       namelist,fdda            1              0       h        "num_err_flds"      "Number of error fields"               ""
+rconfig   real        fdda_start          namelist,fdda            max_domains    0       rh       "fdda_start"        "Nudging start time for domain"        "min"
+rconfig   real        fdda_end            namelist,fdda            max_domains    0       rh       "fdda_end"          "Nudging end time for domain"          "min"
+rconfig   integer     obs_nudge_wind      namelist,fdda            max_domains    0       rh       "obs_nudge_wind"    "Wind-nudging flag for domain"         ""
+rconfig   real        obs_coef_wind       namelist,fdda            max_domains    0       rh       "obs_coef_wind"     "Wind-nudging coeficient for domain"   "s-1"
+rconfig   integer     obs_nudge_temp      namelist,fdda            max_domains    0       rh       "obs_nudge_temp"    "Temperature-nudging flag for domain"  ""
+rconfig   real        obs_coef_temp       namelist,fdda            max_domains    0       rh       "obs_coef_temp"     "Temperature-nudging coef for domain"  "s-1"
+rconfig   integer     obs_nudge_mois      namelist,fdda            max_domains    0       rh       "obs_nudge_mois"    "Moisture-nudging flag for domain"     ""
+rconfig   real        obs_coef_mois       namelist,fdda            max_domains    0       rh       "obs_coef_mois"     "Moisture-nudging coef for domain"     "s-1"
+rconfig   integer     obs_nudge_pstr      namelist,fdda            max_domains    0       rh       "obs_nudge_pstr"    "Not used"                             ""
+rconfig   real        obs_coef_pstr       namelist,fdda            max_domains    0       rh       "obs_coef_pstr"     "Not used"                             ""
+rconfig   real        obs_rinxy           namelist,fdda            max_domains    0       rh       "obs_rinxy"         "Horizontal radius of influence"       "km"
+rconfig   real        obs_rinsig          namelist,fdda            1              0       h        "obs_rinsig"        "Vertical radius of influence"         "sigma"
+rconfig   real        obs_twindo          namelist,fdda            1              0       h        "obs_twindo"        "Half-period time window for nudging"  "min"
+rconfig   integer     obs_npfi            namelist,fdda            1              0       h        "obs_npfi"          "Freq in cg timesteps for diag print"  ""
+rconfig   integer     obs_ionf            namelist,fdda            1              0       h        "obs_ionf"          "Freq in cg timesteps for obs input and error calc"   ""
+rconfig   integer     obs_idynin          namelist,fdda            1              0       h        "obs_idynin"        "Flag for dynamic initialization"      ""
+rconfig   real        obs_dtramp          namelist,fdda            1              0       h        "obs_dtramp"        "Time period for ramping (idynin)"     "min"
+rconfig   logical     obs_ipf_in4dob      namelist,fdda            1              .false. h        "obs_ipf_in4dob"    "Print obs input diagnostics"   "min"
+rconfig   logical     obs_ipf_errob       namelist,fdda            1              .false. h        "obs_ipf_errob"     "Print obs error diagnostics"   "min"
+rconfig   logical     obs_ipf_nudob       namelist,fdda            1              .false. h        "obs_ipf_nudob"     "Print obs nudge diagnostics"   "min"
+
+# Dynamics
+# dynamics option (see package definitions, below)
+rconfig   integer dyn_opt                 namelist,dynamics	1             2       irh   "dyn_opt"               ""      ""
+rconfig   integer rk_ord                  namelist,dynamics	1             3       irh   "rk_order"               ""      ""
+rconfig   integer w_damping               namelist,dynamics	1             0       irh   "w_damping"             ""      ""
+# diff_opt 1=old diffusion, 2=new
+rconfig   integer diff_opt                namelist,dynamics	1             1       irh   "diff_opt"              ""      ""
+# km_opt   1=old coefs, 2=tke, 3=Smagorinksy
+rconfig   integer km_opt                  namelist,dynamics	1             4       irh   "km_opt"                ""      ""
+rconfig   integer damp_opt                namelist,dynamics	1             0       irh   "damp_opt"              ""      ""
+rconfig   real    zdamp                   namelist,dynamics	max_domains    5000.   h    "zdamp"         ""      ""
+rconfig   real    dampcoef                namelist,dynamics     max_domains    0.05    h    "dampcoef"              ""      ""
+rconfig   real    khdif                   namelist,dynamics	max_domains    0       h    "khdif"         ""      ""
+rconfig   real    kvdif                   namelist,dynamics	max_domains    0       h    "kvdif"         ""      ""
+rconfig   real    diff_6th_factor         namelist,dynamics     max_domains    0.2     h    "diff_6th_factor" "factor that controls rate of 6th-order numerical diffusion"
+rconfig   integer diff_6th_opt            namelist,dynamics     max_domains    2      irh   "diff_6th_opt" "switch for 6th-order numerical diffusion"
+rconfig   real    smdiv                   namelist,dynamics	max_domains    0.1     h    "smdiv"         ""      ""
+rconfig   real    emdiv                   namelist,dynamics	max_domains    0.01    h    "emdiv"         ""      ""
+rconfig   real    epssm                   namelist,dynamics	max_domains    0.1     h    "epssm"         ""      ""
+rconfig   logical non_hydrostatic         namelist,dynamics	max_domains  .true.   irh   "non_hydrostatic"    ""   ""
+rconfig   integer time_step_sound         namelist,dynamics	max_domains    6       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"               ""      ""
+rconfig   integer     h_sca_adv_order     namelist,dynamics	max_domains    5       rh       "h_sca_adv_order"               ""      ""
+rconfig   integer     v_sca_adv_order     namelist,dynamics	max_domains    3       rh       "v_sca_adv_order"               ""      ""
+rconfig   logical     pd_moist            namelist,dynamics	max_domains    .false.  rh    "pd_moist"         "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_chem             namelist,dynamics	max_domains    .false. rh    "pd_chem"          "positive-definite RK3 transport switch"      ""
+#rconfig   logical     pd_scalar           namelist,dynamics	max_domains    .true.  rh    "pd_scalar"        "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_scalar           namelist,dynamics     max_domains    .false. rh    "pd_scalar"        "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_tke              namelist,dynamics	max_domains    .false. rh    "pd_tke"           "positive-definite RK3 transport switch"      ""
+rconfig   logical top_radiation           namelist,dynamics	max_domains    .false. rh    "top_radiation"         ""      ""
+rconfig   real    mix_cr_len              namelist,dynamics	max_domains    200.    h    "mix_cr_len"            ""      ""
+rconfig   real    tke_upper_bound         namelist,dynamics	max_domains    1000.   h    "tke_upper_bound"            ""      ""
+rconfig   real    kh_tke_upper_bound      namelist,dynamics	max_domains    1000.   h    "kh_tke_upper_bound"         ""      ""
+rconfig   real    kv_tke_upper_bound      namelist,dynamics	max_domains    1000.   h    "kv_tke_upper_bound"         ""      ""
+rconfig   real    tke_drag_coefficient    namelist,dynamics	max_domains    0.      h    "tke_drag_coefficient"       ""      "dimensionless"
+rconfig   real    tke_heat_flux           namelist,dynamics	max_domains    0.      h    "tke_heat_flux"              ""      "K m s-1"
+rconfig   logical pert_coriolis           namelist,dynamics	max_domains  .false.  irh  "pert_coriolis"    ""   ""
+rconfig   logical mix_full_fields         namelist,dynamics     max_domains  .false.  irh  "mix_full_field"   ""   ""
+rconfig   real    base_pres               namelist,dynamics	1             610.     h    "base_pres"  "Mars Base state pressure, real only"      "Pa"
+rconfig   real    base_temp               namelist,dynamics	1             220.     h    "base_temp"  "Mars Base state sea level temperature, real only"      "K"
+rconfig   real    base_lapse              namelist,dynamics	1              30.     h    "base_lapse" "Mars Base state temperature difference between base pres and 1/e of atm depth - do not change, real only"      "K"
+
+
+# Bdy_control
+rconfig   integer spec_bdy_width          namelist,bdy_control		1             5       irh    "spec_bdy_width"                ""      ""
+rconfig   integer spec_zone               namelist,bdy_control		1             1       irh    "spec_zone"                     ""      ""
+rconfig   integer relax_zone              namelist,bdy_control		1             4       irh    "relax_zone"                    ""      ""
+rconfig   logical specified               namelist,bdy_control	max_domains    .true.  rh    "specified"             ""      ""
+rconfig   logical periodic_x              namelist,bdy_control	max_domains    .false. rh    "periodic_x"            ""      ""
+rconfig   logical symmetric_xs            namelist,bdy_control	max_domains    .false. rh    "symmetric_xs"          ""      ""
+rconfig   logical symmetric_xe            namelist,bdy_control	max_domains    .false. rh    "symmetric_xe"          ""      ""
+rconfig   logical open_xs                 namelist,bdy_control	max_domains    .false. rh    "open_xs"               ""      ""
+rconfig   logical open_xe                 namelist,bdy_control	max_domains    .false. rh    "open_xe"               ""      ""
+rconfig   logical periodic_y              namelist,bdy_control	max_domains    .false. rh    "periodic_y"            ""      ""
+rconfig   logical symmetric_ys            namelist,bdy_control	max_domains    .false. rh    "symmetric_ys"          ""      ""
+rconfig   logical symmetric_ye            namelist,bdy_control	max_domains    .false. rh    "symmetric_ye"          ""      ""
+rconfig   logical open_ys                 namelist,bdy_control	max_domains    .false. rh    "open_ys"               ""      ""
+rconfig   logical open_ye                 namelist,bdy_control	max_domains    .false. rh    "open_ye"               ""      ""
+rconfig   logical nested                  namelist,bdy_control	max_domains    .false. rh    "nested"                ""      ""
+rconfig   integer real_data_init_type     namelist,bdy_control		1                 1    irh   "real_data_init_type"   "REAL DATA INITIALIZATION OPTIONS: 1=SI, 2=MM5, 3=GENERIC" "PRE-PROCESSOR TYPES"
+
+rconfig   integer background_proc_id      namelist,grib2 	        1     255    rh    "background_proc_id"    "Background processing id for grib2"  ""
+rconfig   integer forecast_proc_id        namelist,grib2 	        1     255    rh    "forecast_proc_id"      "Analysis and forecast processing id for grib2"  ""
+rconfig   integer production_status       namelist,grib2 	        1     255    rh    "production_status"     "Background processing id for grib2"  ""
+rconfig   integer compression             namelist,grib2 	        1      40    rh    "compression"           "grib2 compression, 40 for JPEG2000 or 41 for PNG"  ""
+
+# NAMELIST DERIVED
+rconfig   real    cen_lat                 derived                  max_domains    0       -        "cen_lat"              "center latitude"      "degrees, negative is south"
+rconfig   real    cen_lon                 derived                  max_domains    0       -        "cen_lon"              "central longitude"      "degrees, negative is west"
+rconfig   real    truelat1                derived                  max_domains    0       -        "true_lat1"             "first standard parallel"      "degrees, negative is south"
+rconfig   real    truelat2                derived                  max_domains    0       -        "true_lat2"             "second standard parallel"      "degrees, negative is south"
+rconfig   real    moad_cen_lat            derived                  max_domains    0       -        "moad_cen_lat"             "center latitude of the most coarse grid"      "degrees, negative is south"
+rconfig   real    stand_lon               derived                  max_domains    0       -        "stand_lon"             "standard longitude, parallel to j-direction, perpendicular to i-direction "      "degrees, negative is west"
+rconfig   real    bdyfrq                  derived                  max_domains    0       -        "bdyfrq"               "lateral boundary input frequency"      "seconds"
+rconfig   integer iswater                 derived                  max_domains    0       -        "iswater"              "land use index of water"      "index category"
+rconfig   integer isice                   derived                  max_domains    0       -        "isice"                "land use index of ice"        "index category"
+rconfig   integer isurban                 derived                  max_domains    0       -        "isurban"              "land use index for 'urban and built-up"     "index category"
+rconfig   integer isoilwater              derived                  max_domains    0       -        "isoilwater"           "land use index of water for soil"        "index category"
+rconfig   integer map_proj                derived                  max_domains    0       -        "map_proj"             "domain map projection"      "0=none, 1=Lambert, 2=polar, 3=Mercator"
+rconfig   integer simulation_start_year   derived                  1              0       -        "simulation_start_year" "start of simulation through restarts" "4-digit year"
+rconfig   integer simulation_start_month  derived                  1              0       -        "simulation_start_month" "start of simulation through restarts" "2-digit month"
+rconfig   integer simulation_start_day    derived                  1              0       -        "simulation_start_day" "start of simulation through restarts" "2-digit day"
+rconfig   integer simulation_start_hour   derived                  1              0       -        "simulation_start_hour" "start of simulation through restarts" "2-digit hour"
+rconfig   integer simulation_start_minute derived                  1              0       -        "simulation_start_minute" "start of simulation through restarts" "2-digit minute"
+rconfig   integer simulation_start_second derived                  1              0       -        "simulation_start_second" "start of simulation through restarts" "2-digit second"
+
+#
+# Single dummy declaration to define a nodyn dyn option
+state integer nodyn_dummy - dyn_nodyn -  -  -  "" "" ""      
+
+#
+#---------------------------------------------------------------------------------------------------------------------------------------
+# Package Declarations
+#                                               
+
+#key      package       associated                package          associated 4d scalars
+#         name          namelist choice           state vars
+
+package   dyn_nodyn    dyn_opt==0                   -             -
+package   dyn_em       dyn_opt==2                   -             -
+#package   passivec1     chem_opt==0                  -             
+
+
+##### MARS OPTIONS
+##### MARS OPTIONS
+##### MARS OPTIONS
+##
+## CHANGING THE OPTION CHANGE THE NUMBER OF TRACERS WITHOUT ANY NEED TO RECOMPILE ENTIRELY WRF
+## HOWEVER, YOU STILL NEED TO RECOMPILE THE PHYSICS BEFORE CHANGING THE OPTION
+## JUST USE THE COMPILE_ALL SCRIPT FOR A FAST RECOMPILATION 
+## -------
+## ONE REMAINING PROBLEM IS THE FACT THAT YOU NEED TO RECOMPILE
+## ENTIRELY IF YOU DO NOT WANT TO OUTPUT THE TRACERS
+## (FOR EXAMPLE, IF THEY ARE TURNED OFF ...)
+## -------
+##
+##
+package   nowater      mars==0                      -              moist:qv
+package   water        mars==1                      -              moist:qv;scalar:qh2o,qh2o_ice
+package   dust         mars==2                      -              moist:qv;scalar:qdust 
+##### MARS OPTIONS
+##### MARS OPTIONS
+##### MARS OPTIONS
+
+
+package   kesslerscheme mp_physics==1                -             moist:qv,qc,qr
+package   linscheme     mp_physics==2                -             moist:qv,qc,qr,qi,qs,qg
+package   wsm3scheme    mp_physics==3                -             moist:qv,qc,qr
+package   wsm5scheme    mp_physics==4                -             moist:qv,qc,qr,qi,qs
+package   etampnew      mp_physics==5                -             moist:qv,qc,qr,qi,qs,qg;scalar:qt
+package   wsm6scheme    mp_physics==6                -             moist:qv,qc,qr,qi,qs,qg
+package   ncepcloud3    mp_physics==98               -             moist:qv,qc,qr
+package   ncepcloud5    mp_physics==99               -             moist:qv,qc,qr,qi,qs
+package   thompson       mp_physics==8               -             moist:qv,qc,qr,qi,qs,qg;scalar:qni
+
+package   rrtmscheme    ra_lw_physics==1             -             -
+package   camlwscheme   ra_lw_physics==3             -             ozmixm:mth01,mth02,mth03,mth04,mth05,mth06,mth07,mth08,mth09,mth10,mth11,mth12;aerosolc:sul,sslt,dust1,dust2,dust3,dust4,ocpho,bcpho,ocphi,bcphi,bg,volc
+package   gfdllwscheme  ra_lw_physics==99            -             -
+
+package   swradscheme   ra_sw_physics==1             -             -
+package   gsfcswscheme  ra_sw_physics==2             -             -
+package   camswscheme   ra_sw_physics==3             -             ozmixm:mth01,mth02,mth03,mth04,mth05,mth06,mth07,mth08,mth09,mth10,mth11,mth12;aerosolc:sul,sslt,dust1,dust2,dust3,dust4,ocpho,bcpho,ocphi,bcphi,bg,volc
+package   gfdlswscheme  ra_sw_physics==99            -             -
+
+package   sfclayscheme   sf_sfclay_physics==1        -             -
+package   myjsfcscheme   sf_sfclay_physics==2        -             -
+package   gfssfcscheme   sf_sfclay_physics==3        -             -
+package   slabscheme     sf_surface_physics==1       -             -
+package   lsmscheme      sf_surface_physics==2       -             -
+package   ruclsmscheme   sf_surface_physics==3       -             -
+package   ysuscheme      bl_pbl_physics==1           -             -
+package   myjpblscheme   bl_pbl_physics==2           -             -
+package   gfsscheme      bl_pbl_physics==3           -             -
+package   mrfscheme      bl_pbl_physics==99          -             -
+
+package   kfetascheme    cu_physics==1               -             -
+package   bmjscheme      cu_physics==2               -             -
+package   gdscheme       cu_physics==3               -             -
+package   sasscheme      cu_physics==4               -             -
+package   kfscheme       cu_physics==99              -             -
+
+package   psufddagd      grid_fdda==1                -             fdda3d:u_ndg_old,v_ndg_old,t_ndg_old,q_ndg_old,ph_ndg_old,u_ndg_new,v_ndg_new,t_ndg_new,q_ndg_new,ph_ndg_new;fdda2d:mu_ndg_old,mu_ndg_new
+
+# only need to specify these once; not for every io_form* variable
+package   io_intio    io_form_restart==1                     -             -
+package   io_netcdf   io_form_restart==2                     -             -
+# Placeholders for additional packages (we can go beyond zzz
+# but that will entail modifying frame/module_io.F and frame/md_calls.m4)
+# Please note these are placeholders; HDF has not been implemented yet.
+package   io_hdf      io_form_restart==3                     -             -
+package   io_phdf5    io_form_restart==4                     -             -
+package   io_grib1    io_form_restart==5                     -             -
+package   io_mcel     io_form_restart==6                     -             -
+package   io_esmf     io_form_restart==7                     -             -
+package   io_yyy      io_form_restart==8                     -             -
+package   io_zzz      io_form_restart==9                     -             -
+package   io_grib2    io_form_restart==10                    -             -
+package   io_pnetcdf  io_form_restart==11                     -             -
+                                                
+#---------------------------------------------------------------------------------------------------------------------------------------
+## communications                                               
+
+### 8. Edit the Registry file and create a halo-exchange for x_1.
+
+# Halo Update Communications
+
+halo      HALO_EM_INIT_1 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,ph_1,ph_2
+halo      HALO_EM_INIT_2 dyn_em 48:t_1,t_2,mu_1,mu_2,tke_1,tke_2,ww,phb
+halo      HALO_EM_INIT_3 dyn_em 48:ph0,php,t_init,mub,mu0,p,al,alt,alb
+halo      HALO_EM_INIT_4 dyn_em 48:pb,h_diabatic,msft,msfu,msfv,f,e,sina,cosa,ht,potevp,snopcx,soiltb
+halo      HALO_EM_INIT_5 dyn_em 48:moist,chem,scalar
+halo      HALO_EM_VINTERP_UV_1 dyn_em 8:pd_gc,pb
+halo      HALO_EM_A dyn_em  8:ru,rv,rw,ww,php,alt,al,p,muu,muv,mut
+halo      HALO_EM_PHYS_A  dyn_em 4:u_2,v_2
+halo      HALO_EM_PHYS_PBL dyn_em        4:rublten,rvblten
+halo      HALO_EM_FDDA dyn_em            4:rundgdten,rvndgdten
+halo      HALO_EM_PHYS_DIFFUSION dyn_em  4:defor11,defor22,defor12,defor13,defor23,div,xkmv,xkmh,xkmhd,xkhv,xkhh,tke_1,tke_2
+halo      HALO_EM_TKE_ADVECT_3 dyn_em 24:tke_2
+halo      HALO_EM_TKE_ADVECT_5 dyn_em 48:tke_2
+halo      HALO_EM_TKE_A dyn_em 4:ph_2,phb
+halo      HALO_EM_TKE_B dyn_em 4:z,rdz,rdzw,zx,zy
+halo      HALO_EM_TKE_C dyn_em 8:u_2,v_2,z,zx,zy,rdz,rdzw
+halo      HALO_EM_TKE_D dyn_em 8:defor11,defor22,defor33,defor12,defor13,defor23,div
+halo      HALO_EM_TKE_E dyn_em 8:xkmv,xkmh,xkmhd,xkhv,xkhh,BN2,moist
+halo      HALO_EM_TKE_3 dyn_em   24:tke_1,tke_2
+halo      HALO_EM_TKE_5 dyn_em   48:tke_1,tke_2
+halo      HALO_EM_TKE_7 dyn_em   80:tke_1,tke_2
+halo      HALO_EM_TKE_F dyn_em   48:tke_1,tke_2
+halo      HALO_EM_TKE_OLD_E_5 dyn_em   48:tke_1
+halo      HALO_EM_TKE_OLD_E_7 dyn_em   80:tke_1
+halo      HALO_EM_B dyn_em 4:ph_2,al,p,t_1,t_save,u_save,v_save,mu_1,mu_2,mudf,php,alt,pb
+halo      HALO_EM_B2 dyn_em 4:ru_tend,rv_tend
+halo      HALO_EM_C dyn_em    4:u_2,v_2
+halo      HALO_EM_C2 dyn_em    4:ph_2,al,p,mu_2,muts,mudf
+halo      HALO_EM_D dyn_em    24:ru_m,rv_m,ww_m,mut
+halo      HALO_EM_D2_3 dyn_em 24:u_2,v_2,w_2,t_2,ph_2;24:moist,chem,scalar;4:mu_2,al
+halo      HALO_EM_D2_5 dyn_em 48:u_2,v_2,w_2,t_2,ph_2;24:moist,chem,scalar;4:mu_2,al
+halo      HALO_EM_D3_3 dyn_em 24:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,moist,chem,scalar;4:mu_1,mu_2
+halo      HALO_EM_D3_5 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,moist,chem,scalar;4:mu_1,mu_2
+halo      HALO_EM_E_3 dyn_em 24:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,;4:mu_1,mu_2
+halo      HALO_EM_E_5 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,;4:mu_1,mu_2
+halo      HALO_EM_MOIST_E_3 dyn_em 24:moist
+halo      HALO_EM_MOIST_E_5 dyn_em 48:moist
+halo      HALO_EM_MOIST_E_7 dyn_em 80:moist
+halo      HALO_EM_CHEM_E_3 dyn_em 24:chem
+halo      HALO_EM_CHEM_E_5 dyn_em 48:chem
+halo      HALO_EM_CHEM_E_7 dyn_em 80:chem
+halo      HALO_EM_SCALAR_E_3 dyn_em 24:scalar
+halo      HALO_EM_SCALAR_E_5 dyn_em 48:scalar
+halo      HALO_EM_SCALAR_E_7 dyn_em 80:scalar
+
+halo      HALO_EM_MOIST_OLD_E_3 dyn_em 24:moist_old
+halo      HALO_EM_MOIST_OLD_E_5 dyn_em 48:moist_old
+halo      HALO_EM_MOIST_OLD_E_7 dyn_em 80:moist_old
+halo      HALO_EM_CHEM_OLD_E_3 dyn_em 24:chem_old
+halo      HALO_EM_CHEM_OLD_E_5 dyn_em 48:chem_old
+halo      HALO_EM_CHEM_OLD_E_7 dyn_em 80:chem_old
+halo      HALO_EM_SCALAR_OLD_E_3 dyn_em 24:scalar_old
+halo      HALO_EM_SCALAR_OLD_E_5 dyn_em 48:scalar_old
+halo      HALO_EM_SCALAR_OLD_E_7 dyn_em 80:scalar_old
+
+halo      HALO_EM_FEEDBACK   dyn_em 48:ht
+
+halo      HALO_EM_COUPLE_A   dyn_em 24:mub,mu_1,mu_2
+period    PERIOD_EM_COUPLE_A dyn_em 2:mub,mu_1,mu_2
+halo      HALO_EM_COUPLE_B   dyn_em 48:ph_1,ph_2,w_1,w_2,t_1,t_2,u_1,u_2,v_1,v_2,\
+                                       moist,chem,scalar
+period    PERIOD_EM_COUPLE_B dyn_em 3:ph_1,ph_2,w_1,w_2,t_1,t_2,u_1,u_2,v_1,v_2,\
+                                       moist,chem,scalar
+
+# For moving nests
+halo      em_shift_halo_y  dyn_em 48:imask_nostag,imask_xstag,imask_ystag,imask_xystag,u_2,v_2,t_2
+halo      em_shift_halo_x  dyn_em 48:imask_nostag,imask_xstag,imask_ystag,imask_xystag,u_2,v_2,t_2
+
+# For observational nudging
+halo      HALO_OBS_NUDGE dyn_em 24:pb,p,uratx,vratx,tratx
+
+# Periodic Boundary Communications
+
+period    PERIOD_BDY_EM_INIT dyn_em 3:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,t_init,phb,ph0,php,pb,al,alt,alb,mu_1,mu_2,mub,mu0,ht,msft,msfu,msfv,sina,cosa,e,f
+period    PERIOD_BDY_EM_MOIST dyn_em 3:moist
+period    PERIOD_BDY_EM_CHEM dyn_em 3:chem
+period    PERIOD_BDY_EM_SCALAR dyn_em 3:scalar
+period    PERIOD_BDY_EM_MOIST2 dyn_em 3:moist
+period    PERIOD_BDY_EM_CHEM2 dyn_em 3:chem
+period    PERIOD_BDY_EM_SCALAR2 dyn_em 3:scalar
+period    PERIOD_BDY_EM_A dyn_em 2:ru,rv,rw,ww,php,alt,p,muu,muv,mut,ph_2,al
+period    PERIOD_BDY_EM_A1  dyn_em 3:rdzw,rdz,z,zx,zy
+period    PERIOD_BDY_EM_PHY_BC dyn_em 2:rublten,rvblten,xkmh,xkmhd,xkmv,xkhh,xkhv,div,defor11,defor22,defor12,defor13,defor23,defor33,tke_2
+period    PERIOD_BDY_EM_FDDA_BC dyn_em 2:rundgdten,rvndgdten
+period    PERIOD_BDY_EM_B dyn_em 2:ru_tend,rv_tend,ph_2,al,p,t_1,t_save,u_save,v_save,mu_1,mu_2,mudf,php,alt,pb
+period    PERIOD_BDY_EM_B3 dyn_em 2:ph_2,al,p,mu_2,muts,mudf
+period    PERIOD_BDY_EM_B2 dyn_em 2:ru_tend,rv_tend
+period    PERIOD_BDY_EM_C dyn_em 2:u_2,u_save,v_2,v_save,t_2,t_save,muv,msfv,muu,msfu
+period    PERIOD_BDY_EM_D dyn_em 3:u_2,v_2,w_2,t_2,ph_2,mu_2,tke_2
+period    PERIOD_BDY_EM_D3 dyn_em 3:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,mu_1,mu_2
+
+#
+#swap SWAP_ETAMP_NEW  dyn_em 1:dz8w,p_phy,pi_phy,rho,th_phy,moist,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,RAINNC,RAINNCV,SR,LOWLYR
+#swap SWAP_WSM3       dyn_em 1:th_phy,moist,w_2,rho,pi_phy,p_phy,dz8w,rainnc,rainncv
+#cycle CYCLE_TEST       dyn_em 1:xlong
+
+##
+
+# FDDA (Observational-nudging) Variables
+typedef fdob_type integer domain_tot   # total number of domains to apply obs-nudging
+typedef fdob_type integer domain_init  # domain initialization flag
+typedef fdob_type integer IEODI        # end of obs data flag for current model step
+typedef fdob_type integer IWTSIG       # flag for nudging on pressure surfaces
+typedef fdob_type integer NSTAT        # number of obs stations used to nudge current model step
+typedef fdob_type integer KTAUR        # restart model step
+typedef fdob_type integer SN_MAXCG     # coarse domain grid dimension in south-north coordinate
+typedef fdob_type integer WE_MAXCG     # coarse domain grid dimension in west-east coordinate
+typedef fdob_type integer SN_END       # ending north-south grid index
+typedef fdob_type integer LEVIDN(max_domains)   # level of nest
+typedef fdob_type real    DS_CG        # coarse domain grid size 
+typedef fdob_type real    WINDOW       # time window half-period for nudging (in minutes) 
+typedef fdob_type real    RTLAST       # time in hours of last obs used in current model step
+typedef fdob_type real    DATEND       # time in minutes after which data are asuumed to have ended
+typedef fdob_type real    RINFMN       # minimum radius of influence
+typedef fdob_type real    RINFMX       # maximum radius of influence
+typedef fdob_type real    PFREE        # pressure level (cb) where terrain effect becomes small
+typedef fdob_type real    DCON         # 1/DPSMX
+typedef fdob_type real    DPSMX        # max pres change (cb) allowed within infl range of surf obs 
+typedef fdob_type real    TFACI        # scale factor used for ramp-down in dynamic initialization
+typedef fdob_type real    XN           # cone factor for Lambert projection
+
+# table entries are of the form
+#      <Table>  <Type>  <Sym>                <Dims>   <Use>   <NumTLev> <Stagger> <IO>     <DNAME>             <DESCRIP>     <UNITS>
+#Grid variables
+typedef fdob_type real    varobs               rz       -         1        -       -       "varobs"          "observational values in each variable"
+typedef fdob_type real    errf                 hz       -         1        -       -       "errf"            "errors between model and obs values"
+typedef fdob_type real    timeob               z        -         1        -       -       "timeob"          "model times for each observation"          "hours"
+typedef fdob_type real    nlevs_ob             z        -         1        -       -       "nlevs_ob"        "numbers of levels in sounding obs"
+typedef fdob_type real    lev_in_ob            z        -         1        -       -       "lev_in_ob"       "level in sounding-type obs"
+typedef fdob_type real    plfo                 z        -         1        -       -       "plfo"            "index for type of obs-platform"
+typedef fdob_type real    elevob               z        -         1        -       -       "elevob"          "elevation of observation"                  "meters"
+typedef fdob_type real    rio                  z        -         1        -       -       "rio"             "west-east grid coordinate"
+typedef fdob_type real    rjo                  z        -         1        -       -       "rjo"             "south-north grid coordinate"
+typedef fdob_type real    rko                  z        -         1        -       -       "rko"             "vertical grid coordinate"
+
+state fdob_type fdob - -
+##
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/Registry.EM_prev
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/Registry.EM_prev	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/Registry.EM_prev	(revision 142)
@@ -0,0 +1,1728 @@
+# Registry file, EM
+#                                               
+# At the present time this file is managed manually and edited by hand.                                         
+#                                               
+################################################################################
+# Dimension specifications
+#
+# This section of the Registry file is used to specify the dimensions
+# that will be used to define arrays. Dim is the one-letter name of the
+# dimension.  How defined can either be "standard_domain", which means
+# that the dimension (1) is one of the three spatial dimensions and (2)
+# it will be set using the standard namelist mechanism and domain data
+# structure dimension fields (e.g. sd31,ed31,sd32...).
+#
+# Order refers to which of the three sets of just-mentioned internal
+# dimension variables the dimension is referred to by in the driver.
+# That is, is it the first, second, or third dimension.  The registry
+# infers the mapping of its internal dimensions according to the
+# combination of Order and Coord-axis that are specified in this table.
+# 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
+# to maintain the three physical domain dimensions.
+# 
+# "How defined" can also specify the name of a namelist variable from which
+# the definition for the dimension will come; this is specified as
+# "namelist=<variable name>".  The namelist variable must have been
+# defined as an integer and with only one entry in the rconfig table. Or
+# a constant can be specified.  The coordinate axis for the dimension is
+# either X, Y, Z, or C (for "not a spatial dimension").  The Dimname is
+# the descriptive name of the dimension that will be included in the
+# metadata in data sets.  Note that the b, f, and t modifiers that appear
+# as the last characters of dimension strings used # in state and # i1
+# registry definitions are not dimensions and do not need to be declared
+# here.
+#
+
+# Available characters for dimspec: 0123456789@%+=|?.!&[{}]
+
+#<Table>  <Dim>  <Order> <How defined>         <Coord-axis>  <Dimname in Datasets>
+dimspec    i      1     standard_domain              x          west_east
+dimspec    j      3     standard_domain              y          south_north
+dimspec    k      2     standard_domain              z          bottom_top
+dimspec    l      2     namelist=num_soil_layers     z          soil_layers
+dimspec    u      2     namelist=num_land_cat        z          land_cat
+dimspec    s      2     namelist=num_soil_cat        z          soil_cat
+dimspec    p      -     constant=7501                c          microphysics_rstrt_state
+dimspec    w      -     namelist=spec_bdy_width      c          spec_bdy_width
+dimspec    e      3     namelist=ensdim              z          ensemble dimension
+dimspec    n      1     namelist=dfi_time_dim        c          dfi time dimension
+dimspec    z      -     namelist=max_obs          c          max_obs
+dimspec    h      -     namelist=nobs_err_flds    c          nobs_err_flds
+dimspec    r      -     namelist=nobs_ndg_vars    c          nobs_ndg_vars
+dimspec    g      2     namelist=num_metgrid_levels  z          num_metgrid_levels
+dimspec    m      2     constant=12                  z          months_per_year
+dimspec    a      -     namelist=cam_abs_dim1     c          cam_abs_dim1
+dimspec    c      -     namelist=cam_abs_dim2     z          cam_abs_dim2
+dimspec    q      2     namelist=levsiz           z          levsiz
+dimspec    d      2     namelist=paerlev          z          paerlev
+dimspec    ?      -     namelist=ts_buf_size      c          ts_buf_size
+dimspec    !      -     namelist=max_ts_locs      c          max_ts_locs
+dimspec    v      -     constant=1                z          one
+
+
+################################################################################
+################################################################################
+################################################################################
+
+###MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+#### 
+#### variables physiques ecrites dans les fichiers WRF
+#### - h indique l'ecriture
+#### - en commentaire, les variables physiques dans physiq.F
+#### - utiliser le script automatique Registry.bash
+####
+#### YOU CAN OUTPUT ANY 2D OR 3D VARIABLE THAT IS AVAILABLE IN MESO_PHYSIQ.F
+####
+state  real  TSURF     ij   misc  1  -  rhd  "TSURF"     "SURF TEMPERATURE"                "K"       #SAVEMARS2 tsurf
+state  real  CO2ICE    ij   misc  1  -  rd   "CO2ICE"    "CO2 GROUND ICE"                  "kg"      #SAVEMARS2 co2ice
+state  real  EMISSIV   ij   misc  1  -  rd   "EMISSIV"   "EMISSIVITY"                      ""        #SAVEMARS2 emis
+state  real  THETA     ij   misc  1  -  rd   "THETA"     "SLOPE INCLINATION"               "deg"     #SAVEMARS2 theta_sl
+state  real  PSI       ij   misc  1  -  rd   "PSI"       "SLOPE ORIENTATION"               "deg"     #SAVEMARS2 psi_sl
+state  real  TAU_DUST  ij   misc  1  -  rhd  "TAU_DUST"  "REFERENCE VISIBLE DUST OPACITY"  ""        #SAVEMARS2 tauref
+state  real  SWDOWN    ij   misc  1  -  rhd  "SWDOWN"    "DOWNWARD SW FLUX AT SURFACE"     "W m-2"   #SAVEMARS2 fluxsurf_sw_tot      
+state  real  LWDOWN    ij   misc  1  -  rhd  "LWDOWN"    "DOWNWARD LW FLUX AT SURFACE"     "W m-2"   #SAVEMARS2 fluxsurf_lw
+state  real  SWUP      ij   misc  1  -  rhd  "SWUP"      "UPWARD SW FLUX AT TOP"           "W m-2"   #SAVEMARS2 fluxtop_sw_tot    
+state  real  LWUP      ij   misc  1  -  rhd  "LWUP"      "UPWARD LW FLUX AT TOP"           "W m-2"   #SAVEMARS2 fluxtop_lw
+state  real  MTOT      ij   misc  1  -  rd   "MTOT"      "TOTAL MASS WATER VAPOR"          "kg m-2"  #SAVEMARS2 mtot
+state  real  ICETOT    ij   misc  1  -  rd   "ICETOT"    "TOTAL MASS WATER ICE"            "kg m-2"  #SAVEMARS2 icetot
+state  real  RAVE      ij   misc  1  -  rd   "RAVE"      "MEAN ICE RADIUS"                 "m"       #SAVEMARS2 rave
+state  real  RICE      ikj  misc  1  -  rd   "RICE"      "ICE RADIUS"                      "m"       #SAVEMARS3 rice
+####
+####
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+####
+####
+#### TRACEURS: POUR L'INSTANT NE PAS CHANGER L'ORDRE (>> mais l'ordre n'est-il pas defini plus bas ? dans les options mars ?)
+#### - effacer le h si l'on veut eviter les sorties
+####
+state  real  -         ikjftb  scalar  1  -  -                         -
+state  real  QH2O      ikjftb  scalar  1  -  i01rhusdf=(bdy_interp:dt) "QH2O"       "Water vapor mixing ratio"   "kg kg-1"
+state  real  QH2O_ICE  ikjftb  scalar  1  -  i01rhusdf=(bdy_interp:dt) "QH2O_ICE"   "Water ice mixing ratio"     "kg kg-1"
+state  real  QDUST     ikjftb  scalar  1  -  i01rhusdf=(bdy_interp:dt) "QDUST"      "Dust mixing ratio"          "kg kg-1"
+####
+####
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+
+
+
+
+#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.                                             
+#                                               
+# table entries are of the form                                         
+#<Table> <Type> <Sym>         <Dims>   <Use>   <NumTLev> <Stagger> <IO>     <DNAME>             <DESCRIP>     <UNITS>   
+#
+
+# It is required that LU_INDEX appears before any variable that is
+# interpolated with a mask, as lu_index supplies that mask.
+# this next 1 is for the HFSoLE/PET demo; writing these to auxhist1 output over MCEL for coupling
+# with wave model, only if compiled with -DMCELIO, JM 2003/05/29
+state    real  LU_INDEX         ij      misc        1         -     i02rh01d=(interp_fcnm)u=(copy_fcnm)   "LU_INDEX"              "LAND USE CATEGORY"         ""
+state    real  LU_MASK          ij      misc        1         -     i3h1     "LU_MASK"              "0 land 1 water"         ""
+
+# znw, znu, dzs, and zs must be listed before any 3-d fields
+# in order for the grib output module to work correctly.  The grib output
+# module retrieves the vertical levels from these parameters.  If znw, znu
+# dzs, and zs are not listed first, vertical level will not be encoded at 
+# time 0.
+
+state    real    znu            k       dyn_em      1         -     irh       "znu"  "eta values on half (mass) levels"  ""
+state    real    znw            k       dyn_em      1         Z     i01rh     "znw"  "eta values on full (w) levels"  ""
+state    real   ZS              l        misc      -         Z     irh       "ZS"                    "DEPTHS OF CENTERS OF SOIL LAYERS"         "m"
+state    real   DZS             l        misc      -         Z     irh       "DZS"                   "THICKNESSES OF SOIL LAYERS"               "m"
+
+#
+# Variables from WPS
+#
+state    real   u_gc           igj      dyn_em      1        XZ    i1  "UU"     "x-wind component"    "m s-1"
+state    real   v_gc           igj      dyn_em      1        YZ    i1  "VV"     "y-wind component"    "m s-1"
+state    real   t_gc           igj      dyn_em      1        Z     i1  "TT"     "temperature"         "K"
+state    real   rh_gc          igj      dyn_em      1        Z     i1  "RH"    "relative humidity"   "%"
+state    real   ght_gc         igj      dyn_em      1        Z     i1  "GHT"   "geopotential height" "m"
+state    real   p_gc           igj      dyn_em      1        Z     i1  "PRES"   "pressure"            "Pa"
+state    real   xlat_gc        ij       dyn_em      1        -     i1  "XLAT_M" "latitude, positive north" "degrees"
+state    real   xlong_gc       ij       dyn_em      1        -     i1  "XLONG_M" "longitude, positive east" "degrees"
+state    real   ht_gc          ij       dyn_em      1        -     i1  "HGT_M" "topography elevation" "m"
+state    real   tsk_gc         ij       dyn_em      1        -     i1  "SKINTEMP"  "skin temperature"  "K"
+state    real   tavgsfc        ij       dyn_em      1        -     i1  "TAVGSFC"  "daily mean of surface air temperature"  "K"
+state    real   tmn_gc         ij       dyn_em      1        -     i1  "SOILTEMP"  "annual mean deep soil temperature"  "K"
+state    real   pslv_gc        ij       dyn_em      1        -     i1  "PMSL"  "sea level pressure"  "Pa"
+state    real   greenfrac      imj      dyn_em      1        Z     i1  "GREENFRAC" "monthly greenness fraction" "0 - 1 fraction"
+state    real   albedo12m      imj      dyn_em      1        Z     i1  "ALBEDO12M" "background albedo" "0 - 1 fraction"
+state    real   pd_gc          igj      dyn_em      1        Z     -   "PD"    "dry pressure"        "Pa"
+state    real   psfc_gc        ij       dyn_em      1        -      -  "PSFC_GC"     "surface pressure"            "Pa"
+state    real   intq_gc        ij       dyn_em      1        -     -   "INTQ"  "integrated mixing ratio" "Pa"
+state    real   pdhs           ij       dyn_em      1        -     -   "PDHS"  "hydrostatic dry surface pressure" "Pa"
+state    real   qv_gc          igj      dyn_em      1        Z     i1  "QV"     "mixing ratio"        "kg kg-1"
+ifdef RUC_CLOUD
+state    real   qr_gc          igj      dyn_em      1        Z     i1  "QR"    "rain water mixing ratio"   "kg kg-1"
+state    real   qc_gc          igj      dyn_em      1        Z     i1  "QC"    "cloud water mixing ratio"   "kg kg-1"
+state    real   qs_gc          igj      dyn_em      1        Z     i1  "QS"    "snow mixing ratio"   "kg kg-1"
+state    real   qi_gc          igj      dyn_em      1        Z     i1  "QI"    "cloud ice mixing ratio"   "kg kg-1"
+state    real   qg_gc          igj      dyn_em      1        Z     i1  "QG"    "graupel mixing ratio"   "kg kg-1"
+state    real   qni_gc         igj      dyn_em      1        Z     i1  "QNI"   "ice no concentration"   "m-3"
+endif
+
+
+###MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS     
+####
+#### INITIALISATION
+####
+#### variables dans real
+####
+state  real   albedo_gcm_gc   ij   dyn_em  1  -  i1  "ALBEDO_GCM"       "albedo of naked ground"  "0 - 1 fraction"
+state  real   therm_inert_gc  ij   dyn_em  1  -  i1  "THERMAL_INERTIA"  "thermal inertia"         "J/m2/K/s0.5"
+state  real   slpx_gc         ij   dyn_em  1  -  i1  "SLPX"             "slope x direction"       "rad"
+state  real   slpy_gc         ij   dyn_em  1  -  i1  "SLPY"             "slope y direction"       "rad"
+state  real   hv_gc          igj   dyn_em  1  Z  i1  "HV"               "water vapor"             "kg/kg"
+state  real   hi_gc          igj   dyn_em  1  Z  i1  "HI"               "water ice"               "kg/kg"
+state  real   tsoil_gc       igj   dyn_em  1  Z  i1  "TSOIL"            "soil temperatures"       "K"
+####
+#### variables dans wrf
+####
+state  real   albedo_gcm      ij   misc  1  -  i012rd  "MARS_ALB"    "albedo of naked ground"  "0 - 1 fraction"
+state  real   therm_inert     ij   misc  1  -  i012rd  "MARS_TI"     "thermal inertia"         "J/m2/K/s0.5"
+state  real   slpx            ij   misc  1  -  i012rd  "SLOPEX"      "slope x direction"       "rad"
+state  real   slpy            ij   misc  1  -  i012rd  "SLOPEY"      "slope y direction"       "rad"
+state  real   mars_emiss      ij   misc  1  -  i012rd  "MARS_EMISS"  "emissivity"              "0 - 1 fraction"
+state  real   mars_cice       ij   misc  1  -  i012rd  "MARS_CICE"   "co2 ice"                 "kg"
+state  real   mars_tsoil     ilj   misc  1  -  i012rd  "MARS_TSOIL"  "soil temperatures"       "K"
+state  real   mars_gw        ilj   misc  1  -  i012rd  "MARS_GW"     "gwparam"                 " "
+####
+####
+####MARS MARS MARS MARS MARS
+####MARS MARS MARS MARS MARS
+
+
+
+
+#-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+#                                               
+# Variables for Eulerian mass coordinate dynamics                                            
+#                                               
+
+
+# Velocities
+#
+# U Vel
+state    real   u              ikjb     dyn_em      2         X     \
+     i01rhusdf=(bdy_interp:dt)       "U"                      "x-wind component"   "m s-1"
+state    real   ru             ikj     dyn_em      1         X      -        "MU_U"        "mu-coupled u"   "Pa m s-1"
+state    real   ru_m           ikj     dyn_em      1         X      -        "ru_m"        ""   ""
+state    real   ru_tend        ikj     dyn_em      1         X      -        "ru_tend"        ""   ""                                   
+i1       real   ru_tendf       ikj     dyn_em      1         X                                          
+state    real   u_save         ikj     dyn_em      1         X      -        "u_save"
+#                                               
+# V Vel
+state    real   v              ikjb     dyn_em      2         Y     \
+     i01rhusdf=(bdy_interp:dt)        "V"                     "y-wind component"   "m s-1"
+state    real   rv             ikj     dyn_em      1         Y      -        "MU_V"        "mu-coupled v"   "Pa m s-1"
+state    real   rv_m           ikj     dyn_em      1         Y      -        "rv_m"
+state    real   rv_tend        ikj     dyn_em      1         Y      -        "rv_tend"
+i1       real   rv_tendf       ikj     dyn_em      1         Y                                          
+state    real   v_save         ikj     dyn_em      1         Y      -        "v_save"                   
+#                                               
+# Vertical Vel                                          
+state    real   w              ikjb     dyn_em      2         Z     \
+        irhusdf=(bdy_interp:dt)  "w"                          "z-wind component"   "m s-1"
+state    real   ww             ikj     dyn_em      1         Z      r         "ww"   "mu-coupled eta-dot"    "Pa s-1"
+state    real   rw             ikj     dyn_em      1         Z      -         "rw"   "mu-coupled w"          "Pa m s-1"
+i1       real   ww1            ikj     dyn_em      1         Z                                          
+state    real   ww_m           ikj     dyn_em      1         Z      r         "ww_m"   "time-avg mu-coupled eta-dot"    "Pa s-1"
+i1       real   wwp            ikj     dyn_em      1         Z                                          
+i1       real   rw_tend        ikj     dyn_em      1         Z                                          
+i1       real   rw_tendf       ikj     dyn_em      1         Z                                          
+i1       real   w_save         ikj     dyn_em      1         Z                                          
+
+# Geopotential
+state    real   ph             ikjb     dyn_em      2         Z     \
+       irhusdf=(bdy_interp:dt)   "ph"   "perturbation geopotential"  "m2 s-2"
+state    real   phb            ikj     dyn_em      1         Z     irhdus "phb"  "base-state geopotential"  "m2 s-2"
+state    real   phb_fine       ikj     dyn_em      1         Z      -     "phb_fine"  "for nesting, temp holding interpolated coarse grid phb"  "m2 s-2"
+state    real   ph0            ikj     dyn_em      1         Z      r     "ph0"  "initial geopotential"     "m2 s-2"
+state    real   php            ikj     dyn_em      1         Z      r     "php"  "geopotential"             "m2 s-2"
+i1       real   ph_tend        ikj     dyn_em      1         Z 
+i1       real   ph_tendf       ikj     dyn_em      1         Z 
+i1       real   ph_save        ikj     dyn_em      1         Z 
+##
+## MARS: TO GET LIGHTER HISTORY FILES
+##
+state    real   phtot          ikj     dyn_em      1         Z     irh       "PHTOT"        "total geopotential"      "m2 s-2"
+
+# Potential Temperature
+state    real   t              ikjb     dyn_em      2         -     \
+       i01rhusdf=(bdy_interp:dt)   "t"      "perturbation potential temperature (theta-t0)" "K"
+
+state    real   t_init         ikj     dyn_em      1         -      ir       "t_init" "initial potential temperature" "K"
+i1       real   t_tend         ikj     dyn_em      1         -  
+i1       real   t_tendf        ikj     dyn_em      1         -  
+state    real   tp             ikj     dyn_em      2         -  
+i1       real   t_2save        ikj     dyn_em      1         -   
+state    real   t_save         ikj     dyn_em      1         -               "t_save"
+#
+
+
+# Mass
+state    real   mu              ijb     dyn_em      2         -     \
+     irhusdf=(bdy_interp:dt)   "mu"  "perturbation dry air mass in column" "Pa"
+state    real   mub             ij     dyn_em      1         -     irhdus       "mub" "base state dry air mass in column" "Pa"
+state    real   mub_fine        ij     dyn_em      1         -      -           "mub_fine" "nest temp, holds interpolated coarse grid mub" "Pa"
+state    real   mub_save        ij     dyn_em      1         -      -           "mub_save" "nest temp, holds orig fine grid mub" "Pa"
+state    real   mu0             ij     dyn_em      1         -     i01rdu       "mu0" "initial dry mass in column" "Pa"
+state    real   mudf            ij     dyn_em      1         -      -           "mudf" "" ""
+state    real   muu             ij     dyn_em      1          -                 "muu"
+i1       real   muus            ij     dyn_em      1          -     
+state    real   muv             ij     dyn_em      1          -                 "muv"
+i1       real   muvs            ij     dyn_em      1          -     
+state    real   mut             ij     dyn_em      1          -                 "mut"
+state    real   muts            ij     dyn_em      1          -                 "muts"
+i1       real   muave           ij     dyn_em      1          -     
+i1       real   mu_save         ij     dyn_em      1          -     
+i1       real   mu_tend         ij     dyn_em      1          -     
+i1       real   mu_tendf        ij     dyn_em      1          -     
+
+#diagnostic for looking at nest position in output. A mungy version of terrain height.
+state    real   nest_pos        ij     misc        1   -   rhu=(mark_domain)  "NEST_POS"
+state    real   nest_mask       ij     misc        1   -   ru=(mark_domain)   "NEST_MASK"     "LOCATION OF NEST IF ANY"
+state    real   ht_coarse       ij     misc        1   -     r                -              "STORAGE FOR LOW-RES TERRAIN"
+
+
+# TKE
+state    real   tke            ikj     dyn_em      2         -       r        "tke"          "TURBULENCE KINETIC ENERGY"     "m2 s-2"
+i1       real   tke_tend       ikj     dyn_em      1         -      
+
+# Pressure and Density
+state    real   p              ikj     dyn_em      1         -      rh        "p"           "perturbation pressure"         "Pa"
+state    real   al             ikj     dyn_em      1         -      r         "al"          "inverse perturbation density"  "m3 kg-1"
+state    real   alt            ikj     dyn_em      1         -      r         "alt"         "inverse density"               "m3 kg-1"
+state    real   alb            ikj     dyn_em      1         -      rdus      "alb"         "inverse base density"          "m3 kg-1"
+state    real   zx             ikj     dyn_em      1         X      -         " "  " "  " "    
+state    real   zy             ikj     dyn_em      1         Y      -         " "  " "  " "   
+state    real   rdz            ikj     dyn_em      1         Z      -         " "  " "  " "   
+state    real   rdzw           ikj     dyn_em      1         Z       -        " "  " "  " "   
+state    real   pb             ikj     dyn_em      1         -      rhdus     "pb"          "BASE STATE PRESSURE "          "Pa"
+##
+## MARS: TO GET LIGHTER HISTORY FILES
+##
+state    real   ptot           ikj     dyn_em      1         -      irh       "PTOT"        "total pressure"      "Pa"
+
+#                                               
+# Other dyn                                             
+#                                               
+i1       real   advect_tend    ikj     dyn_em      1         -                                          
+i1       real   alpha          ikj     dyn_em      1         -                                                  
+i1       real   a              ikj     dyn_em      1         -                                                  
+i1       real   gamma          ikj     dyn_em      1         -                                                  
+i1       real   c2a            ikj     dyn_em      1         -     -
+i1       real   rho            ikj     dyn_em      1         -     -
+i1       real   phm            ikj     dyn_em      1         -     -
+i1       real   cqu            ikj     dyn_em      1         -     -
+i1       real   cqv            ikj     dyn_em      1         -     -
+i1       real   cqw            ikj     dyn_em      1         -     -
+i1       real   pm1            ikj     dyn_em      1         -     -
+state    real   sr             ij      dyn_em      1         -      irh         "sr" "fraction of frozen precipitation"
+state    real   potevp         ij      dyn_em      1         -       rh         "potevp" "accumulated potential evaporation" "W m-2"
+state    real   snopcx         ij      dyn_em      1         -       rh         "snopcx" "snow phase change heat flux" "W m-2"
+state    real   soiltb         ij      dyn_em      1         -        h         "soiltb" "bottom soil temperature" "K"
+state    real    fnm            k       dyn_em      1         -     irh       "fnm"  "upper weight for vertical stretching"  ""
+state    real    fnp            k       dyn_em      1         -     irh       "fnp"  "lower weight for vertical stretching"  ""
+state    real    rdnw           k       dyn_em      1         -     irh       "rdnw"  "inverse d(eta) values between full (w) levels"   ""
+state    real    rdn            k       dyn_em      1         -     irh       "rdn"  "inverse d(eta) values between half (mass) levels"   ""
+state    real    dnw            k       dyn_em      1         -     irh       "dnw" "d(eta) values between full (w) levels"   ""
+state    real    dn             k       dyn_em      1         -     irh       "dn " "d(eta) values between half (mass) levels"   ""
+state    real    t_base         k       dyn_em      1         -     ir        "t_base"               "BASE STATE T IN IDEALIZED CASES"         "K"      
+state    real    z              ikj     dyn_em      1         -     -         " " " " " "
+i1       real    mu_3d          ikj     dyn_em      1         -                                          
+i1       real    z_at_w         ikj     dyn_em      1         Z 
+state    real    cfn            -       misc      -         -     irh       "cfn"    "extrapolation constant"  ""
+state    real    cfn1           -       misc      -         -     irh       "cfn1"   "extrapolation constant"  ""
+state    integer step_number    -       misc      -         -     ir        "step_number"  ""
+
+# 2m and 10m output diagnostics
+state    real   Q2               ij     misc        1         -     irhd      "Q2"                   "QV at 2 M"         "kg kg-1"
+state    real   T2               ij     misc        1         -     irhd      "T2"                   "TEMP at 2 M"       "K"
+state    real   TH2              ij     misc        1         -     irhd      "TH2"                  "POT TEMP at 2 M"   "K"
+state    real   PSFC             ij     misc        1         -     i01rhd    "PSFC"                 "SFC PRESSURE"      "Pa"
+
+# these next 2 are for the HFSoLE/PET demo; writing these to auxhist1 output over MCEL for coupling
+# with wave model, only if compiled with -DMCELIO, JM 2003/05/29
+state    real   U10              ij     misc        1         -     irh01d      "U10"                "U at 10 M"         "m s-1"
+state    real   V10              ij     misc        1         -     irh01d      "V10"                "V at 10 M"         "m s-1"
+
+# these next 4 are for observational nudging
+state    real   uratx           ij      misc        1         -      r          "URATX"            "Ratio of U over U10 on mass points "         "dimensionless"
+state    real   vratx           ij      misc        1         -      r          "VRATX"            "Ratio of V over V10 on mass points "         "dimensionless"   
+state    real   tratx           ij      misc        1         -      r          "TRATX"            "Ratio of T over TH2 on mass points "         "dimensionless"   
+state    real   obs_savwt      hikj     dyn_em      1         X      -       "OBS_SAVWT"
+
+# Other
+state   real    rdx            -        misc      -         -     irh       "rdx"                   "INVERSE X GRID LENGTH"         ""      
+state   real    rdy            -        misc      -         -     irh       "rdy"                   "INVERSE Y GRID LENGTH"         ""      
+state   real    dts            -        misc      -         -     ir        "dts"                   "SMALL TIMESTEP"         ""      
+state   real    dtseps         -        misc      -         -     ir        "dtseps"                "TIME WEIGHT CONSTANT FOR SMALL STEPS"         ""      
+state   real    resm           -        misc      -         -     irh       "resm"                  "TIME WEIGHT CONSTANT FOR SMALL STEPS"         ""      
+state   real    zetatop        -        misc      -         -     irh       "zetatop"               "ZETA AT MODEL TOP"         ""      
+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 for derived time quantities.  
+state   integer itimestep      -        -          -         -     rh         "itimestep"             ""         ""      
+state   real    xtime          -        -          -         -     rh         "xtime"                 "minutes since simulation start"         ""      
+state   real    julian         -        -          -         -     -          "julian"                "day of year, 0.0 at 0Z on 1 Jan."         "days"      
+
+
+# input file descriptor for lbcs on parent domain                                               
+state   integer lbc_fid        -        -          -         -     -         "lbc_fid"               ""         ""      
+# indicates if tiling has been computed                                         
+state   logical tiled          -        -          -         -     -         "tiled"                 ""         ""      
+# indicates if patches have been computed                                               
+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                                                             
+state   logical press_adj      -        -          -         -     -         "press_adj"         "T/F flag adjust mu"         ""    
+
+# Mask for moving nest interpolations
+state    integer imask_nostag         ij      misc     1     -
+state    integer imask_xstag          ij      misc     1     X
+state    integer imask_ystag          ij      misc     1     Y
+state    integer imask_xystag         ij      misc     1     XY 
+# vortex center indices; need for restarts of moving nests
+state    real    xi                   -       misc     -     -    r
+state    real    xj                   -       misc     -     -    r
+state    real    vc_i                 -       misc     -     -    r
+state    real    vc_j                 -       misc     -     -    r
+
+#-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+# Scalar (4D) arrays
+
+# 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                                                
+# dry code will will still link properly)                                               
+#                                               
+state   real    -              ikjftb   moist       1         -     -    -
+state   real    qv             ikjftb   moist       1         -     \
+   i01rhusdf=(bdy_interp:dt)  "QVAPOR"           "Water vapor mixing ratio"      "kg kg-1"
+state   real    qc             ikjftb   moist       1         -     \
+   i01rhusdf=(bdy_interp:dt)  "QCLOUD"           "Cloud water mixing ratio"      "kg kg-1"
+state   real    qr             ikjftb   moist       1         -     \
+   i01rhusdf=(bdy_interp:dt)  "QRAIN"            "Rain water mixing ratio"       "kg kg-1"
+state   real    qi             ikjftb   moist       1         -     \
+   i01rhusdf=(bdy_interp:dt)  "QICE"             "Ice mixing ratio"              "kg kg-1"
+state   real    qs             ikjftb   moist       1         -     \
+   i01rhusdf=(bdy_interp:dt)  "QSNOW"            "Snow mixing ratio"             "kg kg-1"
+state   real    qg             ikjftb   moist       1         -     \
+   i01rhusdf=(bdy_interp:dt)  "QGRAUP"           "Graupel mixing ratio"          "kg kg-1"
+state   real    -              ikjftb   dfi_moist       1         -     -    -
+state   real    dfi_qv         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QVAPOR"       "Water vapor mixing ratio"      "kg kg-1"
+state   real    dfi_qc         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QCLOUD"       "Cloud water mixing ratio"      "kg kg-1"
+state   real    dfi_qr         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QRAIN"        "Rain water mixing ratio"       "kg kg-1"
+state   real    dfi_qi         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QICE"         "Ice mixing ratio"              "kg kg-1"
+state   real    dfi_qs         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QSNOW"        "Snow mixing ratio"             "kg kg-1"
+state   real    dfi_qg         ikjftb   dfi_moist       1         -     \
+   rusdf=(bdy_interp:dt)  "DFI_QGRAUP"       "Graupel mixing ratio"          "kg kg-1"
+
+
+# Chem Scalars
+state   real    -              ikjftb   chem        1         -     -    -                                       
+
+# Other Scalars
+state   real    -              ikjftb  scalar      1         -     -   -
+state   real    qndrop         ikjftb  scalar      1         -     \
+   i01rhusdf=(bdy_interp:dt)    "QNDROP"        "Droplet number mixing ratio"        "# kg-1"
+state   real    qni            ikjftb  scalar      1         -     \
+   i01rhusdf=(bdy_interp:dt)    "QNICE"         "Ice Number concentration" "# kg-1"
+state   real    qt             ikjftb  scalar      1         -     \
+   i01rhusdf=(bdy_interp:dt)    "CWM"           "Total condensate mixing ratio"      "kg kg-1"
+state   real    qns            ikjftb  scalar      1         -     \
+   i01rhusdf=(bdy_interp:dt)    "QNSNOW"         "Snow Number concentration"   "# kg(-1)"
+state   real    qnr            ikjftb  scalar      1         -     \
+   i01rhusdf=(bdy_interp:dt)    "QNRAIN"        "Rain Number concentration"   "# kg(-1)"
+state   real    qng            ikjftb  scalar      1         -     \
+   i01rhusdf=(bdy_interp:dt)    "QNGRAUPEL"     "Graupel Number concentration" "# kg(-1)"
+state   real    -              ikjftb  dfi_scalar      1         -     -   -
+state   real    dfi_qndrop     ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_QNDROP"    "Droplet number mixing ratio"        "# kg-1"
+state   real    dfi_qni        ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_QNICE"     "Ice Number concentration" "# kg-1"
+state   real    dfi_qt         ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_CWM"       "Total condensate mixing ratio"      "kg kg-1"
+state   real    dfi_qns        ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_QNSNOW"    "Snow Number concentration"   "# kg(-1)"
+state   real    dfi_qnr        ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_QNRAIN"    "Rain Number concentration"   "# kg(-1)"
+state   real    dfi_qng        ikjftb  dfi_scalar      1         -     \
+   rusdf=(bdy_interp:dt)    "DFI_QNGRAUPEL" "Graupel Number concentration" "# kg(-1)"
+
+#-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+# Arrays for Specified LBCs  (lbc arrays REMOVED; Boundary arrays are now specified with the state array; see above, 20050413 JM )
+
+state    real   fcx            w         misc     -         -      ir       "fcx"                  "RELAXATION TERM FOR BOUNDARY ZONE"         ""
+state    real   gcx            w         misc     -         -      ir       "gcx"                  "2ND RELAXATION TERM FOR BOUNDARY ZONE"         ""
+state    real   dtbc            -        misc     -         -      ir       "dtbc"                 "TIME SINCE BOUNDARY READ"         ""
+
+#-------------------------------------------------------------------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------------------------------------------------------------------
+# Physics Related State Varibles
+
+#-------------------------------------------------------------------------------------------------------------------------------------------
+# SI - start variables from netCDF format from Standard Initialization, most eventually for use in LSM schemes
+#-------------------------------------------------------------------------------------------------------------------------------------------
+
+state   real   sm000007            ij    misc          1     -     i1      "SM000007"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm007028            ij    misc          1     -     i1      "SM007028"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm028100            ij    misc          1     -     i1      "SM028100"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm100255            ij    misc          1     -     i1      "SM100255"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   st000007            ij    misc          1     -     i1      "ST000007"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st007028            ij    misc          1     -     i1      "ST007028"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st028100            ij    misc          1     -     i1      "ST028100"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st100255            ij    misc          1     -     i1      "ST100255"      "LAYER SOIL TEMPERATURE" "K"
+state   real   sm000010            ij    misc          1     -     i1      "SM000010"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm010040            ij    misc          1     -     i1      "SM010040 "     "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm040100            ij    misc          1     -     i1      "SM040100 "     "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm100200            ij    misc          1     -     i1      "SM100200 "     "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sm010200            ij    misc          1     -     i1      "SM010200"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm000            ij    misc          1     -     i1      "SOILM000"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm005            ij    misc          1     -     i1      "SOILM005"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm020            ij    misc          1     -     i1      "SOILM020"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm040            ij    misc          1     -     i1      "SOILM040"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm160            ij    misc          1     -     i1      "SOILM160"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   soilm300            ij    misc          1     -     i1      "SOILM300"      "LAYER SOIL MOISTURE" "m3 m-3"
+state   real   sw000010            ij    misc          1     -     i1      "SW000010"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw010040            ij    misc          1     -     i1      "SW010040"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw040100            ij    misc          1     -     i1      "SW040100"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw100200            ij    misc          1     -     i1      "SW100200"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   sw010200            ij    misc          1     -     i1      "SW010200"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw000            ij    misc          1     -     i1      "SOILW000"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw005            ij    misc          1     -     i1      "SOILW005"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw020            ij    misc          1     -     i1      "SOILW020"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw040            ij    misc          1     -     i1      "SOILW040"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw160            ij    misc          1     -     i1      "SOILW160"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   soilw300            ij    misc          1     -     i1      "SOILW300"      "LAYER SOIL LIQUID" "m3 m-3"
+state   real   st000010            ij    misc          1     -     i1      "ST000010"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st010040            ij    misc          1     -     i1      "ST010040"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st040100            ij    misc          1     -     i1      "ST040100"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st100200            ij    misc          1     -     i1      "ST100200"      "LAYER SOIL TEMPERATURE" "K"
+state   real   st010200            ij    misc          1     -     i1      "ST010200"      "LAYER SOIL TEMPERATURE" "K"
+state   real   soilt000            ij    misc          1     -     i1      "SOILT000"      "LAYER SOIL TEMPERATURE" "K"
+state   real   soilt005            ij    misc          1     -     i1      "SOILT005"      "LAYER SOIL TEMPERATURE" "K"
+state   real   soilt020            ij    misc          1     -     i1      "SOILT020"      "LAYER SOIL TEMPERATURE" "K"
+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)"  ""
+state   real   topostdv            ij    misc          1     -     i12     "TOPOSTDV"      "ELEVATION STD DEV"  "m"
+state   real   toposlpx            ij    misc          1     -     i12     "TOPOSLPX"      "ELEVATION X SLOPE"  ""
+state   real   toposlpy            ij    misc          1     -     i12     "TOPOSLPY"      "ELEVATION Y SLOPE"  ""
+state   real   shdmax              ij    misc          1     -     i012r   "SHDMAX"        "ANNUAL MAX VEG FRACTION" ""
+state   real   shdmin              ij    misc          1     -     i012r   "SHDMIN"        "ANNUAL MIN VEG FRACTION" ""
+state   real   snoalb              ij    misc          1     -     i012r   "SNOALB"        "ANNUAL MAX SNOW ALBEDO IN FRACTION" ""
+state   real   slopecat            ij    misc          1     -     i12     "SLOPECAT"      "SLOPE CATEGORY"  ""
+state   real   toposoil            ij    misc          1     -     i12     "SOILHGT"       "ELEVATION OF LSM DATA"  "m"
+state   real   landusef            iuj   misc          1     Z     i012r   "LANDUSEF"      "LANDUSE FRACTION BY CATEGORY"  ""
+state   real   soilctop            isj   misc          1     Z     i012    "SOILCTOP"      "SOIL CAT FRACTION (TOP)"  ""
+state   real   soilcbot            isj   misc          1     Z     i012    "SOILCBOT"      "SOIL CAT FRACTION (BOTTOM)"  ""
+state   real   soilcat             ij    misc          1     -     i12     "SOILCAT"       "SOIL CAT DOMINANT TYPE" ""
+state   real   vegcat              ij    misc          1     -     i12     "VEGCAT"        "VEGETATION CAT DOMINANT TYPE" ""
+
+#---------------------------------------------------------------------------------------------------------------------------------------
+# SI - end variables from netCDF format from Standard Initialization
+#---------------------------------------------------------------------------------------------------------------------------------------
+
+# soil model variables  (Note that they are marked as staggered in the vertical dimension
+# because they are "fully dimensioned" -- they use every element in that dim
+state    real   TSLB           ilj       misc      1         Z     i02rhd=(interp_mask_land_field:lu_index)u=(copy_fcnm)           "TSLB"     "SOIL TEMPERATURE"   "K"
+
+# Time series variables
+state    real   ts_hour         ?!       misc      -         -      r        "TS_HOUR"        "Model integration time, hours"
+state    real   ts_u            ?!       misc      -         -      r        "TS_U"           "Surface wind U-component, earth-relative"
+state    real   ts_v            ?!       misc      -         -      r        "TS_V"           "Surface wind V-component, earth-relative"
+state    real   ts_q            ?!       misc      -         -      r        "TS_Q"           "Surface mixing ratio"
+state    real   ts_t            ?!       misc      -         -      r        "TS_T"           "Surface temperature"
+state    real   ts_psfc         ?!       misc      -         -      r        "TS_PSFC"        "Surface pressure"
+state    real   ts_glw          ?!       misc      -         -      r        "TS_GLW"         "Downward long wave flux at surface"
+state    real   ts_gsw          ?!       misc      -         -      r        "TS_GSW"         "Net short wave flux at surface"
+state    real   ts_hfx          ?!       misc      -         -      r        "TS_HFX"         "Upward heat flux at surface"
+state    real   ts_lh           ?!       misc      -         -      r        "TS_LH"          "Upward moisture flux at surface"
+state    real   ts_tsk          ?!       misc      -         -      r        "TS_TSK"         "Skin temperature"
+state    real   ts_tslb         ?!       misc      -         -      r        "TS_TSLB"        "Soil temperature"
+state    real   ts_clw          ?!       misc      -         -      r        "TS_CLW"         "Column integrated cloud water"
+state    real   ts_rainc        ?!       misc      -         -      r        "TS_RAINC"       "Cumulus precip"
+state    real   ts_rainnc       ?!       misc      -         -      r        "TS_RAINNC"      "Grid-scale precip"
+
+# urban model variables
+state    real   DZR             l        em      -            Z     r        "DZR"            "THICKNESSES OF ROOF LAYERS"                      "m"
+state    real   DZB             l        em      -            Z     r        "DZB"            "THICKNESSES OF WALL LAYERS"                      "m"
+state    real   DZG             l        em      -            Z     r        "DZG"            "THICKNESSES OF ROAD LAYERS"                      "m"
+
+# lsm State Variables
+
+state    real   SMOIS            ilj     -          1         Z     i02rhd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SMOIS"            "SOIL MOISTURE"     "m3 m-3"
+state    real   SH2O             ilj     -          1         Z     i02rhd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SH2O"             "SOIL LIQUID WATER" "m3 m-3"
+state    real   XICE             ij     misc        1         -     i0124rhd=(interp_mask_water_field:lu_index)u=(copy_fcnm)  "SEAICE"             "SEA ICE FLAG"  ""
+state    real   XICEM            ij     misc        1         -     rhd=(interp_mask_water_field:lu_index)u=(copy_fcnm)  "XICEM"             "SEA ICE FLAG (PREVIOUS STEP)"  ""
+state    real   SMSTAV           ij     misc        1         -      rd=(interp_mask_land_field:lu_index)       "SMSTAV"           "MOISTURE AVAILABILITY" ""
+state    real   SMSTOT           ij     misc        1         -      r                                          "SMSTOT"           "TOTAL SOIL MOISTURE" "m3 m-3"
+
+state    real   SFCRUNOFF        ij     misc        1         -      rhd=(interp_mask_land_field:lu_index)      "SFROFF"           "SURFACE RUNOFF"     "mm"
+state    real   UDRUNOFF         ij     misc        1         -      rhd=(interp_mask_land_field:lu_index)      "UDROFF"           "UNDERGROUND RUNOFF" "mm"
+state  integer  IVGTYP           ij     misc        1         -     i02rhd=(interp_fcni)u=(copy_fcni)            "IVGTYP"           "DOMINANT VEGETATION CATEGORY" ""
+state  integer  ISLTYP           ij     misc        1         -     i02rhd=(interp_fcni)u=(copy_fcni)            "ISLTYP"           "DOMINANT SOIL CATEGORY"       ""
+state    real   VEGFRA           ij     misc        1         -     i0124rhd=(interp_mask_land_field:lu_index)u=(copy_fcnm)   "VEGFRA"           "VEGETATION FRACTION" ""
+state    real   SFCEVP           ij     misc        1         -      r                                          "SFCEVP"           "SURFACE EVAPORATION" "kg m-2"
+state    real   GRDFLX           ij     misc        1         -      rh                                         "GRDFLX"           "GROUND HEAT FLUX" "W m-2"
+state    real   SFCEXC           ij     misc        1         -      r                                          "SFCEXC "          "SURFACE EXCHANGE COEFFICIENT"   "m s-1"
+
+state    real   ACSNOW           ij     misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "ACSNOW"           "ACCUMULATED SNOW"         "kg m-2"
+state    real   ACSNOM           ij     misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "ACSNOM"           "ACCUMULATED MELTED SNOW"  "kg m-2"
+state    real   SNOW             ij     misc        1         -     i012rhd=(interp_mask_land_field:lu_index)u=(copy_fcnm)    "SNOW"             "SNOW WATER EQUIVALENT"    "kg m-2"
+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         -     i012rhd=(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)   "SST"              "SEA SURFACE TEMPERATURE" "K"
+state  integer  IFNDSNOWH        -      misc        1         -     i         "FNDSNOWH" "SNOWH_LOGICAL"
+state  integer  IFNDSOILW        -      misc        1         -     i         "FNDSOILW" "SOILW_LOGICAL"
+
+# DFI variables
+state   real   hcoeff           n    misc        1         -     -    "HCOEFF"               "initialization weights"
+state   real   hcoeff_tot       -    misc        1         -     -    "HCOEFF_TOT"               "initialization weights"
+state   real   dfi_p           ikj   misc        1         -     r    "P_DFI"           "perturbation pressure"         "Pa"
+state   real   dfi_al          ikj   misc        1         -     r    "AL_DFI"          "inverse perturbation density"  "m3 kg-1"
+state   real   dfi_mu          ij    misc        1         -     r    "MU_DFI"  "perturbation dry air mass in column" "Pa"
+state   real   dfi_phb         ikj   misc        1         Z     r    "PHB_DFI"  "base-state geopotential"  "m2 s-2"
+state   real   dfi_ph0         ikj   misc        1         Z     r    "PH0_DFI"  "initial geopotential"     "m2 s-2"
+state   real   dfi_php         ikj   misc        1         Z     r    "PHP_DFI"  "geopotential"             "m2 s-2"
+state   real   dfi_u           ikj   misc        1         -     r    "U_DFI"               "u accumulation array"          "   "
+state   real   dfi_v           ikj   misc        1         -     r    "V_DFI"               "v accumulation array"          "   "
+state   real   dfi_w           ikj   misc        1         -     r    "W_DFI"               "w accumulation array"          "   "
+state   real   dfi_ww          ikj   misc        1         Z     r    "WW_DFI"              "mu-coupled eta-dot"    "Pa s-1"
+state   real   dfi_t           ikj   misc        1         -     r    "TT_DFI"               "t accumulation array"          "   "
+state   real   dfi_ph          ikj   misc        1         -     r    "PH_DFI"               "p accumulation array"          "   "
+state   real   dfi_pb          ikj   misc        1         -     r    "PB_DFI"               "pb accumulation array"          "   "
+state   real   dfi_alt         ikj   misc        1         -     r    "ALT_DFI"             "1/rho accumulation array"          "   "
+state   real   dfi_tke         ikj   misc        1         -     r    "TKE_DFI"          "TURBULENCE KINETIC ENERGY"     "m2 s-2"
+
+state    real  dfi_TSLB        ilj   misc        1         Z     r    "TSLB_dfi"         "SOIL TEMPERATURE"   "K"
+state    real  dfi_SMOIS       ilj    -          1         Z     r    "SMOIS_dfi"        "SOIL MOISTURE"     "m3 m-3"
+state    real  dfi_SNOW        ij    misc        1         -     r    "SNOW_dfi"         "SNOW WATER EQUIVALENT"    "kg m-2"
+state    real  dfi_SNOWH       ij    misc        1         -     r    "SNOWH_dfi"        "PHYSICAL SNOW DEPTH"      "m"
+state    real  dfi_CANWAT      ij    misc        1         -     r    "CANWAT_dfi"       "CANOPY WATER"             "kg m-2"
+state    real  dfi_SMFR3D      ilj   misc        1         Z     r    "SMFR3D_dfi"           "SOIL ICE" ""
+state    real  dfi_KEEPFR3DFLAG ilj  misc        1         Z     r    "KEEPFR3DFLAG_dfi"     "FLAG - 1. FROZEN SOIL YES, 0 - NO"             ""
+
+# urban state variables
+state    real   TR_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TR_URB"              "URBAN ROOF SKIN TEMPERATURE"        "K"
+state    real   TB_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TB_URB"              "URBAN WALL SKIN TEMPERATURE"        "K" 
+state    real   TG_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TG_URB"              "URBAN ROAD SKIN TEMPERATURE"        "K" 
+state    real   TC_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TC_URB"              "URBAN CANOPY TEMPERATURE"           "K"
+state    real   QC_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "QC_URB"              "URBAN CANOPY HUMIDITY"          "kg kg{-1}"
+state    real   UC_URB2D         ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "UC_URB"              "URBAN CANOPY WIND"          "m s{-1}"
+state    real   XXXR_URB2D       ij     misc        1         -     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "XXXR_URB" "M-O LENGTH ABOVE URBAN ROOF"   "dimensionless"
+state    real   XXXB_URB2D       ij    misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "XXXB_URB" "M-O LENGTH ABOVE URBAN WALL"   "dimensionless"
+state    real   XXXG_URB2D       ij    misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "XXXG_URB" "M-O LENGTH ABOVE URBAN ROAD"   "dimensionless"
+state    real   XXXC_URB2D       ij    misc        1         -      rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)       "XXXC_URB" "M-O LENGTH ABOVE URBAN CANOPY" "dimensionless"
+state    real   TRL_URB3D        ilj    misc        1         Z     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "TRL_URB" "ROOF LAYER TEMPERATURE"          "K"
+state    real   TBL_URB3D        ilj    misc        1         Z     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "TBL_URB" "WALL LAYER TEMPERATURE"          "K"
+state    real   TGL_URB3D        ilj    misc        1         Z     rd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "TGL_URB" "ROAD LAYER TEMPERATURE"          "K"
+state    real   SH_URB2D        ij    misc        1         -     r       "SH_URB"  "SENSIBLE HEAT FLUX FROM URBAN SFC"  "W m{-2}"
+state    real   LH_URB2D        ij    misc        1         -     r       "LH_URB"  "LATENT HEAT FLUX FROM URBAN SFC"    "W m{-2}"
+state    real   G_URB2D         ij    misc        1         -     r        "G_URB"  "GROUND HEAT FLUX INTO URBAN"        "W m{-2}"
+state    real   RN_URB2D        ij    misc        1         -     r       "RN_URB"  "NET RADIATION ON URBAN SFC"         "W m{-2}"
+state    real   TS_URB2D        ij    misc        1         -     r       "TS_URB"  "SKIN TEMPERATURE"          "K"
+state    real   FRC_URB2D       ij    misc        1         -     rd=(interp_fcnm)u=(copy_fcnm)       "FRC_URB"  "URBAN FRACTION"         "dimensionless"
+state    integer   UTYPE_URB2D  ij    misc        1         -     rd=(interp_fcnm)u=(copy_fcnm)       "UTYPE_URB"  "URBAN TYPE"         "dimensionless"
+
+
+# urban variables from radiation model
+state    real   COSZ_URB2D       ij     misc        1         -      r       "COSZ_URB"  "COS of SOLAR ZENITH ANGLE"         "dimensionless"
+state    real   OMG_URB2D        ij     misc        1         -      r       "OMG_URB"   "SOLAR HOUR ANGLE"         "dimensionless"
+state    real   DECLIN_URB       -     misc        1         -       r       "DECLIN_URB"  "SOLAR DECLINATION"         "dimensionless"
+
+
+# RUC LSM
+state    real   SMFR3D           ilj    misc        1         Z      r        "SMFR3D"               "SOIL ICE" ""
+state    real   KEEPFR3DFLAG     ilj    misc        1         Z      r        "KEEPFR3DFLAG"          "FLAG - 1. FROZEN SOIL YES, 0 - NO"             ""
+
+# Additional for P-X PBL and LSM
+state    real   RA               ij     misc        1         -      r        "RA"           "AERODYNAMIC RESISTANCE"   "s m-1"
+state    real   RS               ij     misc        1         -      r        "RS"           "SURFACE RESISTANCE"       "s m-1"
+state    real   LAI              ij     misc        1         -      r        "LAI"          "Leaf area index"          "area/area"
+state    real   VEGF_PX          ij     misc        1         -      r        "VEGF_PX"      "Vegetation Fraction for PX LSM"    "area/area"
+state    real   T2OBS            ij     misc        1         -      r        "T2OBS"        "2-m temperature from analysis "          "K"
+state    real   Q2OBS            ij     misc        1         -      r        "Q2OBS"        "2-m mixing ratio from analysis "         "kg/kg"
+
+# MRF PBL variables
+i1      real   PSIM           ij     misc        1         -     -         "PSIM"                "SIMILARITY FUNCTION FOR MOMENTUM"     ""
+i1      real   PSIH           ij     misc        1         -     -         "PSIH"                "SIMILARITY FUNCTION FOR HEAT"         ""
+i1      real   WSPD           ij     misc        1         -     -         "WSPD"                "Wind speed"                           "m s-1"
+i1      real   GZ1OZ0         ij     misc        1         -     -         "GZ1OZ0"              "LOG OF Z1 over Z0"                     ""
+i1      real   BR             ij     misc        1         -     -         "BR"                  "Bulk Richardson"                       ""
+
+# MYJ PBL variables
+state    real   tke_myj        ikj     misc        1         -      r        "tke_myj"               "TKE FROM MELLOR-YAMADA-JANJIC"      "m2 s-2"
+state    real   EL_MYJ          ikj     misc        1         -     -        "el_myj"                "MIXING LENGTH FROM MELLOR-YAMADA-JANJIC"     "m"
+state    real   EXCH_H          ikj     misc        1         -     r          "EXCH_H"               "EXCHANGE COEFFICIENTS "
+state    real  CT              ij      misc        1         -      r        "CT"                    "COUNTERGRADIENT TERM"    "K"
+state   real   THZ0             ij     misc        1         -      r        "THZ0"                  "POTENTIAL TEMPERATURE AT ZNT"                 "K"
+state    real  Z0               ij     misc        1         -      r        "Z0"                    "Background ROUGHNESS LENGTH"                  "m"
+state   real   QZ0              ij     misc        1         -      r        "QZ0"                   "SPECIFIC HUMIDITY AT ZNT"                     "kg kg-1"
+state   real   UZ0              ij     misc        1         -      r        "UZ0"                   "U WIND COMPONENT AT ZNT"                      "m s-1"
+state   real   VZ0              ij     misc        1         -      r        "VZ0"                   "V WIND COMPONENT AT ZNT"                      "m s-1"
+state   real   QSFC             ij     misc        1         -      r        "QSFC"                  "SPECIFIC HUMIDITY AT LOWER BOUNDARY"          "kg kg-1"
+state   real   AKHS             ij     misc        1         -      r        "AKHS"                  "SFC EXCH COEFF FOR HEAT"                      "m s-1"    
+state   real   AKMS             ij     misc        1         -      r        "AKMS"                  "SFC EXCH COEFF FOR MOMENTUM"                  "m s-1"    
+state   integer KPBL            ij     misc        1         -     r         "KPBL"                  "LEVEL OF PBL TOP"                             ""
+state   real   TSHLTR           ij     misc        1         -     ir        "TSHLTR"                "SHELTER THETA FROM MYJ"                       "K"
+state   real   QSHLTR           ij     misc        1         -     ir        "QSHLTR"                "SHELTER SPECIFIC HUMIDITY FROM MYJ"           "kg kg-1"
+state   real   PSHLTR           ij     misc        1         -     ir        "PSHLTR"                "SHELTER PRESSURE FROM MYJ"           "Pa"
+state   real   TH10             ij     misc        1         -     ir        "TH10"                  "10-M THETA FROM MYJ"                          "K"
+state   real   Q10              ij     misc        1         -     ir        "Q10"                   "10-M SPECIFIC HUMIDITY FROM MYJ"              "kg kg-1"
+i1      real   CHKLOWQ          ij     misc        1         -     -         "CHKLOWQ"               "SURFACE SATURATION FLAG"        ""
+
+# gfdl (eta) radiation State Variables
+state    real    HTOP            ij     misc        1         -      r        "HTOP"                 "TOP OF CONVECTION LEVEL"         ""
+state    real    HBOT            ij     misc        1         -      r        "HBOT"                 "BOT OF CONVECTION LEVEL"         ""
+state    real    HTOPR           ij     misc        1         -      r        "HTOPR"                "TOP OF CONVECTION LEVEL FOR RADIATION"    ""
+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   rswtoa    ij    misc        1    -    i
+state  real   rlwtoa    ij    misc        1    -    i
+state  real   czmean    ij    misc      1    -     i
+state  real   cfracl    ij    misc      1    -     i
+state  real   cfracm    ij    misc      1    -     i
+state  real   cfrach    ij    misc      1    -     i
+state  real   acfrst    ij    misc        1    -    i
+state integer ncfrst    ij    misc        1    -    i
+state  real   acfrcv    ij    misc        1    -    i
+state integer ncfrcv    ij    misc        1    -    i
+
+# cam radiation variables
+state  real    -       iqjf ozmixm      1    -   -     -
+state  real   mth01    iqjf ozmixm      1    -   -     -
+state  real   mth02    iqjf ozmixm      1    -   -     -
+state  real   mth03    iqjf ozmixm      1    -   -     -
+state  real   mth04    iqjf ozmixm      1    -   -     -
+state  real   mth05    iqjf ozmixm      1    -   -     -
+state  real   mth06    iqjf ozmixm      1    -   -     -
+state  real   mth07    iqjf ozmixm      1    -   -     -
+state  real   mth08    iqjf ozmixm      1    -   -     -
+state  real   mth09    iqjf ozmixm      1    -   -     -
+state  real   mth10    iqjf ozmixm      1    -   -     -
+state  real   mth11    iqjf ozmixm      1    -   -     -
+state  real   mth12    iqjf ozmixm      1    -   -     -
+state  real   pin       q     misc      1    -   -      "PIN"             "PRESSURE LEVEL OF OZONE MIXING RATIO"  "millibar"
+state  real   m_ps       ij   misc      2    -   -      "m_ps"            "PS from MATCH on WRF grids"
+state  real    -       idjf aerosolc    2    -   -       -
+state  real   SUL      idjf aerosolc    2    -   -     "SUL"        "SUL aerosol concentration"
+state  real   SSLT     idjf aerosolc    2    -   -     "SSLT"        "SSLT aerosol concentration"
+state  real   DUST1    idjf aerosolc    2    -   -     "DUST1"        "DUST1 aerosol concentration"
+state  real   DUST2    idjf aerosolc    2    -   -     "DUST2"        "DUST2 aerosol concentration"
+state  real   DUST3    idjf aerosolc    2    -   -     "DUST3"        "DUST3 aerosol concentration"
+state  real   DUST4    idjf aerosolc    2    -   -     "DUST4"        "DUST4 aerosol concentration"
+state  real   OCPHO    idjf aerosolc    2    -   -     "OCPHO"        "OCPHO aerosol concentration"
+state  real   BCPHO    idjf aerosolc    2    -   -     "BCPHO"        "BCPHO aerosol concentration"
+state  real   OCPHI    idjf aerosolc    2    -   -     "OCPHI"        "OCPHI aerosol concentration"
+state  real   BCPHI    idjf aerosolc    2    -   -     "BCPHI"        "BCPHI aerosol concentration"
+state  real   BG       idjf aerosolc    2    -   -     "BG"        "BG aerosol concentration"
+state  real   VOLC     idjf aerosolc    2    -   -     "VOLC"        "VOLC aerosol concentration"
+state  real   m_hybi    d     misc      1    -   -     "m_hybi"         "MATCH hybi"
+
+# new eta microphpysics State Variables
+state    real    F_ICE_PHY       ikj    misc        1         -      rdu      "F_ICE_PHY"            "FRACTION OF ICE"         ""
+state    real    F_RAIN_PHY      ikj    misc        1         -      rdu      "F_RAIN_PHY"           "FRACTION OF RAIN "         ""
+state    real    F_RIMEF_PHY     ikj    misc        1         -      rdu      "F_RIMEF_PHY"          "MASS RATIO OF RIMED ICE "         ""
+state    real    qndropsource    ikj    misc        1         -      h        "qndropsource"         "Droplet number source"   "#/kg/s"
+
+# Other Misc State Variables                                            
+state   real    h_diabatic     ikj     misc         1         -      rdu      "h_diabatic"            "PREVIOUS TIMESTEP CONDENSATIONAL 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" ""
+state   real    msftx          ij      misc         1         -     i012rhdu=(copy_fcnm)    "MAPFAC_MX"         "Map scale factor on mass grid, x direction" ""
+state   real    msfty          ij      misc         1         -     i012rhdu=(copy_fcnm)    "MAPFAC_MY"         "Map scale factor on mass grid, y direction" ""
+state   real    msfux          ij      misc         1         X     i012rhdu=(copy_fcnm)    "MAPFAC_UX"         "Map scale factor on u-grid, x direction" ""
+state   real    msfuy          ij      misc         1         X     i012rhdu=(copy_fcnm)    "MAPFAC_UY"         "Map scale factor on u-grid, y direction" ""
+state   real    msfvx          ij      misc         1         Y     i012rhdu=(copy_fcnm)    "MAPFAC_VX"         "Map scale factor on v-grid, x direction" ""
+state   real    msfvx_inv      ij      misc         1         Y     i012rhdu=(copy_fcnm)    "MF_VX_INV"         "Inverse map scale factor on v-grid, x direction" ""
+state   real    msfvy          ij      misc         1         Y     i012rhdu=(copy_fcnm)    "MAPFAC_VY"         "Map scale factor on v-grid, y direction" ""
+
+state   real    f              ij      misc         1         -     i012rhdu=(copy_fcnm)    "f"                "Coriolis sine latitude term"  "s-1"
+state   real    e              ij      misc         1         -     i012rhdu=(copy_fcnm)    "e"                "Coriolis cosine latitude term"  "s-1"
+state   real    sina           ij      misc         1         -     i012rhdu=(copy_fcnm)    "SINALPHA"         "Local sine of map rotation"   ""
+state   real    cosa           ij      misc         1         -     i012rhdu=(copy_fcnm)    "COSALPHA"         "Local cosine of map rotation"  ""
+state   real    ht             ij      misc         1         -     i012rhdus  "HGT"              "Terrain Height"   "m"
+state   real    ht_fine        ij      misc         1         -     -          "HGT_FINE"         "Fine Terrain Height"   "m"
+state   real    ht_int         ij      misc         1         -     -          "HGT_INT"          "Terrain Height Horizontally Interpolated"   "m"
+state   real    ht_input       ij      misc         1         -     -          "HGT_INPUT"        "Terrain Height from FG Input File"   "m"
+state   real    ht_shad        ijb     misc         1         -     hdf=(bdy_interp:dt)         "HGT_SHAD"        "Height of orographic shadow"   "m"
+i1      real    ht_loc         ij      misc         1         -     - 
+i1      integer  shadowmask    ij      misc         1         -     - 
+state   integer min_ptchsz     -       misc         1         -     r
+
+state   real    TSK            ij      misc         1         -     i012rhdu=(copy_fcnm)    "TSK"                   "SURFACE SKIN TEMPERATURE"                  "K"
+state   real    dfi_TSK        ij      misc         1         -     r                       "TSK_dfi"               "saved SURFACE SKIN TEMPERATURE"
+state   real    TSK_SAVE       ij      misc         1         -     -         "TSK_SAVE" "SURFACE SKIN TEMPERATURE, EXTRA COPY FOR SEA ICE TESTS in REAL"       "K"
+state   real    u_base         k       misc         1         -     ir        "u_base"                "BASE STATE X WIND IN IDEALIZED CASES"         ""      
+state   real    v_base         k       misc         1         -     ir        "v_base"                "BASE STATE Y WIND IN IDEALIZED CASES"         ""      
+state   real    qv_base        k       misc         1         -     ir        "qv_base"               "BASE STATE QV IN IDEALIZED CASES"         ""      
+state   real    z_base         k       misc         1         -     ir        "z_base"                "BASE STATE HEIGHT IN IDEALIZED CASES"         ""      
+state   real    u_frame        -       misc         1         -     ir        "u_frame"               "FRAME X WIND"         "m s-1"      
+state   real    v_frame        -       misc         1         -     ir        "v_frame"               "FRAME Y WIND"         "m s-1"      
+# p_top appears as metadata between SI and real but as a state variable in real and WRF
+# since it is a scalar and a constant, it makes sense to have it as metadata -- there
+# are, however, probably post-processing programs that expect to see it as an I/O record
+# another problem: share/input_wrf tries to read this as metadata (fine for real reading
+# SI, but with model reading real output, it generates a warning when debug is > 0 in
+# namelist and causes repeated questions from users.  A third problem is the potential
+# collision between a metadata name and a field record in the I/O data
+# resolve this how?  Have the real program throw a switch to tell the code to get it
+# from the metadata?  Otherwise it's a field?
+state   real    p_top          -       misc         -         -     irh       "p_top"                 "PRESSURE TOP OF THE MODEL"  "Pa"
+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"  ""
+                                                
+# Other physics variables
+                                                
+state    real  RTHCUTEN        ikj      misc        1         -      r        "RTHCUTEN"              "COUPLED THETA TENDENCY DUE TO CUMULUS SCHEME"     "Pa K s-1"
+state    real  RQVCUTEN        ikj      misc        1         -      r        "RQVCUTEN"              "COUPLED Q_V TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+state    real  RQRCUTEN        ikj      misc        1         -      r        "RQRCUTEN"              "COUPLED Q_R TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+state    real  RQCCUTEN        ikj      misc        1         -      r        "RQCCUTEN"              "COUPLED Q_C TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+state    real  RQSCUTEN        ikj      misc        1         -      r        "RQSCUTEN"              "COUPLED Q_S TENDENCY DUE TO CUMULUS SCHEME"       "Pa kg kg-1 s-1"
+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  RAINNC           ij      misc        1         -      rhdu     "RAINNC"                "ACCUMULATED TOTAL GRID SCALE PRECIPITATION"              "mm"      
+state    real  PRATEC           ij      misc        1         -      rh       "PRATEC"                "PRECIP RATE FROM CUMULUS SCHEME"                         "mm s-1"
+state    real  RAINCV           ij      misc        1         -      rh       "RAINCV"                "TIME-STEP 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  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  SNOWNCV          ij      misc        1         -      r        "SNOWNCV"               "TIME-STEP NONCONVECTIVE SNOW AND ICE"                    "mm"
+state    real  GRAUPELNCV       ij      misc        1         -      r        "GRAUPELNCV"            "TIME-STEP NONCONVECTIVE GRAUPEL"                      "mm"
+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"
+state    real  apr_w            ij      misc        1         -      r       "APR_W"                 "PRECIP FROM CLOSURE W"           "mm hour-1"
+state    real  apr_mc           ij      misc        1         -      r       "APR_MC"                "PRECIP FROM CLOSURE KRISH MV"    "mm hour-1"
+state    real  apr_st           ij      misc        1         -      r       "APR_ST"                "PRECIP FROM CLOSURE STABILITY"   "mm hour-1"
+state    real  apr_as           ij      misc        1         -      r       "APR_AS"                "PRECIP FROM CLOSURE AS-TYPE"     "mm hour-1"
+state    real  apr_capma        ij      misc        1         -      r       "APR_CAPMA"             "PRECIP FROM MAX CAP"             "mm hour-1"
+state    real  apr_capme        ij      misc        1         -      r       "APR_CAPME"             "PRECIP FROM MEAN CAP"            "mm hour-1"
+state    real  apr_capmi        ij      misc        1         -      r       "APR_CAPMI"             "PRECIP FROM MIN CAP"             "mm hour-1"
+state    real  edt_out          ij      misc        1         -      h        "EDT_OUT"             "EDT FROM GD SCHEME"             ""
+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         -      h        "CUGD_TTEN"             "INITIAL TTENDENCY OUT OFF GRELL CUMULUS SCHEME"  "K s-1"
+state    real  cugd_qvten       ikj     misc        1         -      h        "CUGD_QVTEN"            "INITIAL QTENDENCY OUT OFF GRELL CUMULUS SCHEME"  "K s-1"
+state    real  cugd_ttens       ikj     misc        1         -      h        "CUGD_TTENS"            "INITIAL SUBSIDENCE TTENDENCY OUT OFF GRELL CUMULUS SCHEME"  "K s-1"
+state    real  cugd_qvtens      ikj     misc        1         -      h        "CUGD_QVTENS"           "INITIAL SUBSIDNCE QTENDENCY OUT OFF GRELL CUMULUS SCHEME"  "K s-1"
+state    real  cugd_qcten       ikj     misc        1         -      h        "CUGD_QCTEN"            "INITIAL TEMPERATURE TENDENCY OUT OFF GRELL CUMULUS SCHEME"  "K s-1"
+#state    real  ACLWUPTC         ij      misc       1         -      rhdu     "ACLWUPTC"              "ACCUMULATED UPWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+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"
+
+state integer  STEPCU          -        misc        1         -      r        "STEPCU"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN CONVECTION CALLS"  ""
+                                                
+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  SWDOWN           ij      misc        1         -      rhd      "SWDOWN"                "DOWNWARD SHORT WAVE FLUX AT GROUND SURFACE"           "W m-2"      
+state    real  SWDOWNC          ij      misc        1         -      -        "SWDOWNC"               "DOWNWARD CLEAR-SKY SHORT WAVE FLUX AT GROUND SURFACE"           "W m-2"      
+state    real  GSW              ij      misc        1         -      rd       "GSW"                   "NET SHORT WAVE FLUX AT GROUND SURFACE"           "W m-2"      
+state    real  GLW              ij      misc        1         -      rhd      "GLW"                   "DOWNWARD LONG WAVE FLUX AT GROUND SURFACE"            "W m-2"      
+
+# 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"
+#state    real  ACSWDNT          ij      misc        1         -      rhdu     "ACSWDNT"               "ACCUMULATED DOWNWELLING SHORTWAVE FLUX AT TOP"          "J m-2"
+#state    real  ACSWDNTC         ij      misc        1         -      rhdu     "ACSWDNTC"              "ACCUMULATED DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2"
+#state    real  ACSWUPB          ij      misc        1         -      rhdu     "ACSWUPB"               "ACCUMULATED UPWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACSWUPBC         ij      misc        1         -      rhdu     "ACSWUPBC"              "ACCUMULATED UPWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  ACSWDNB          ij      misc        1         -      rhdu     "ACSWDNB"               "ACCUMULATED DOWNWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACSWDNBC         ij      misc        1         -      rhdu     "ACSWDNBC"              "ACCUMULATED DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  ACLWUPT          ij      misc        1         -      rhdu     "ACLWUPT"               "ACCUMULATED UPWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  ACLWUPTC         ij      misc        1         -      rhdu     "ACLWUPTC"              "ACCUMULATED UPWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  ACLWDNT          ij      misc        1         -      rhdu     "ACLWDNT"               "ACCUMULATED DOWNWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  ACLWDNTC         ij      misc        1         -      rhdu     "ACLWDNTC"              "ACCUMULATED DOWNWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  ACLWUPB          ij      misc        1         -      rhdu     "ACLWUPB"               "ACCUMULATED UPWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACLWUPBC         ij      misc        1         -      rhdu     "ACLWUPBC"              "ACCUMULATED UPWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  ACLWDNB          ij      misc        1         -      rhdu     "ACLWDNB"               "ACCUMULATED DOWNWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  ACLWDNBC         ij      misc        1         -      rhdu     "ACLWDNBC"              "ACCUMULATED DOWNWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  SWUPT            ij      misc        1         -      rhdu     "SWUPT"                 "INSTANTANEOUS UPWELLING SHORTWAVE FLUX AT TOP"          "J m-2"
+#state    real  SWUPTC           ij      misc        1         -      rhdu     "SWUPTC"                "INSTANTANEOUS UPWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2"
+#state    real  SWDNT            ij      misc        1         -      rhdu     "SWDNT"                 "INSTANTANEOUS DOWNWELLING SHORTWAVE FLUX AT TOP"          "J m-2"
+#state    real  SWDNTC           ij      misc        1         -      rhdu     "SWDNTC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT TOP" "J m-2"
+#state    real  SWUPB            ij      misc        1         -      rhdu     "SWUPB"                 "INSTANTANEOUS UPWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  SWUPBC           ij      misc        1         -      rhdu     "SWUPBC"                "INSTANTANEOUS UPWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  SWDNB            ij      misc        1         -      rhdu     "SWDNB"                 "INSTANTANEOUS DOWNWELLING SHORTWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  SWDNBC           ij      misc        1         -      rhdu     "SWDNBC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY SHORTWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  LWUPT            ij      misc        1         -      rhdu     "LWUPT"                 "INSTANTANEOUS UPWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  LWUPTC           ij      misc        1         -      rhdu     "LWUPTC"                "INSTANTANEOUS UPWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  LWDNT            ij      misc        1         -      rhdu     "LWDNT"                 "INSTANTANEOUS DOWNWELLING LONGWAVE FLUX AT TOP"          "J m-2"
+#state    real  LWDNTC           ij      misc        1         -      rhdu     "LWDNTC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY LONGWAVE FLUX AT TOP" "J m-2"
+#state    real  LWUPB            ij      misc        1         -      rhdu     "LWUPB"                 "INSTANTANEOUS UPWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  LWUPBC           ij      misc        1         -      rhdu     "LWUPBC"                "INSTANTANEOUS UPWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+#state    real  LWDNB            ij      misc        1         -      rhdu     "LWDNB"                 "INSTANTANEOUS DOWNWELLING LONGWAVE FLUX AT BOTTOM"          "J m-2"
+#state    real  LWDNBC           ij      misc        1         -      rhdu     "LWDNBC"                "INSTANTANEOUS DOWNWELLING CLEAR SKY LONGWAVE FLUX AT BOTTOM" "J m-2"
+
+state    real  SWCF             ij      misc        1         -      r         "SWCF"                  "SHORT WAVE CLOUD FORCING AT TOA"                     "W m-2"
+state    real  LWCF             ij      misc        1         -      r         "LWCF"                  "LONG WAVE CLOUD FORCING AT TOA"                      "W m-2"
+state    real  OLR              ij      misc        1         -      rh        "OLR"                   "TOA OUTGOING LONG WAVE"                              "W m-2"
+
+# these next 2 are for the HFSoLE/PET demo; writing these to auxhist1 output over MCEL for coupling
+# with wave model, only if compiled with -DMCELIO, JM 2003/05/29
+state    real  XLAT             ij      misc        1         -     i0123rh01du=(copy_fcnm)      "XLAT"                "LATITUDE, SOUTH IS NEGATIVE"                                          "degree_north"
+state    real  XLONG            ij      misc        1         -     i0123rh01du=(copy_fcnm)      "XLONG"               "LONGITUDE, WEST IS NEGATIVE"                                          "degree_east"
+state    real  XLAT_U           ij      dyn_em      1         X     i012rh01du=(copy_fcnm)       "XLAT_U"              "LATITUDE, SOUTH IS NEGATIVE"                                          "degree_north"
+state    real  XLONG_U          ij      dyn_em      1         X     i012rh01du=(copy_fcnm)       "XLONG_U"             "LONGITUDE, WEST IS NEGATIVE"                                          "degree_east"
+state    real  XLAT_V           ij      dyn_em      1         Y     i012rh01du=(copy_fcnm)       "XLAT_V"              "LATITUDE, SOUTH IS NEGATIVE"                                          "degree_north"
+state    real  XLONG_V          ij      dyn_em      1         Y     i012rh01du=(copy_fcnm)       "XLONG_V"             "LONGITUDE, WEST IS NEGATIVE"                                          "degree_east"
+state    real  ALBEDO           ij      misc        1         -      rh          "ALBEDO"                   "ALBEDO"
+state    real  CLAT             ij      misc        1         -     i012rdu=(copy_fcnm)          "CLAT"                "COMPUTATIONAL GRID LATITUDE, SOUTH IS NEGATIVE"                       "degree_north"
+state    real  CLONG            ij      misc        1         -     i012rdu=(copy_fcnm)          "CLONG"               "COMPUTATIONAL GRID LONGITUDE, WEST IS NEGATIVE"                       "degree_east"
+state    real  ALBBCK           ij      misc        1         -     i0124rh   "ALBBCK"                "BACKGROUND ALBEDO"        ""
+state    real  EMBCK            ij      misc        1         -      r        "EMBCK"                 "BACKGROUND EMISSIVITY"         ""
+state    real  EMISS            ij      misc        1         -      rh       "EMISS"                 "SURFACE EMISSIVITY"         "" 
+
+state    real  CLDEFI           ij      misc        1         -      r        "CLDEFI"                "precipitation efficiency in BMJ SCHEME"    ""      
+state integer  STEPRA          -        misc        1         -      r        "STEPRA"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN RADIATION CALLS"        ""
+                                                
+state    real  RUBLTEN         ikj      misc        1         -      r        "RUBLTEN"               "COUPLED X WIND TENDENCY DUE TO PBL PARAMETERIZATION"  "Pa m s-2"
+state    real  RVBLTEN         ikj      misc        1         -      r        "RVBLTEN"               "COUPLED Y WIND TENDENCY DUE TO PBL PARAMETERIZATION"  "Pa m s-2"
+state    real  RTHBLTEN        ikj      misc        1         -      r        "RTHBLTEN"              "COUPLED THETA TENDENCY DUE TO PBL PARAMETERIZATION"   "Pa K s-1"
+state    real  RQVBLTEN        ikj      misc        1         -      r        "RQVBLTEN"              "COUPLED Q_V TENDENCY DUE TO PBL PARAMETERIZATION"     "Pa kg kg-1 s-1"
+state    real  RQCBLTEN        ikj      misc        1         -      r        "RQCBLTEN"              "COUPLED Q_C TENDENCY DUE TO PBL PARAMETERIZATION"     "Pa kg kg-1 s-1"
+state    real  RQIBLTEN        ikj      misc        1         -      r        "RQIBLTEN"              "COUPLED Q_I TENDENCY DUE TO PBL PARAMETERIZATION"     "Pa kg kg-1 s-1"      
+
+# State vector for etampnew microphysics. Must be declared state because it is not read-once and is needed for restarting.
+state    real  mp_restart_state   p      misc        1         -      r       "MP_RESTART_STATE"       "STATE VECTOR FOR MICROPHYSICS RESTARTS"
+state    real  tbpvs_state        p      misc        1         -      r        "TBPVS_STATE"           "STATE FOR ETAMPNEW MICROPHYSICS"
+state    real  tbpvs0_state       p      misc        1         -      r        "TBPVS0_STATE"          "STATE FOR ETAMPNEW MICROPHYSICS"
+
+# State variables for landuse_init, Must be declared state because they are read in and needed for restarts. Had been SAVE vars in
+# landuse_init (phys/module_physics_init.F)
+state    integer  landuse_isice   -      misc       -          -     r
+state    integer  landuse_lucats  -      misc       -          -     r
+state    integer  landuse_luseas  -      misc       -          -     r
+state    integer  landuse_isn     -      misc       -          -     r
+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         -                                          
+i1       real  t_phy           ikj      misc        1         -                                          
+i1       real  u_phy           ikj      misc        1         -                                          
+i1       real  v_phy           ikj      misc        1         -                                          
+i1       real  dz8w            ikj      misc        1         Z                                          
+i1       real  p8w             ikj      misc        1         Z                                          
+i1       real  t8w             ikj      misc        1         Z                                          
+i1       real  rho_phy         ikj      misc        1         -                                          
+i1    logical  CU_ACT_FLAG     ij       misc        1         -
+
+                                                
+state    real  TMN              ij      misc        1         -     i012rhd=(interp_mask_land_field:lu_index)u=(copy_fcnm)     "TMN"                   "SOIL TEMPERATURE AT LOWER BOUNDARY"           "K"
+state    real  XLAND            ij      misc        1         -     i02rhd=(interp_fcnm)u=(copy_fcnm)       "XLAND"                 "LAND MASK (1 FOR LAND, 2 FOR WATER)"          ""      
+state    real  ZNT              ij      misc        1         -      i3r      "ZNT"                   "TIME-VARYING ROUGHNESS LENGTH"                "m"      
+state    real  CK               ij      misc        1         -      r        "CK"                    "ENTHALPY EXCHANGE COEFF AT 10 m"                      ""
+state    real  CKA              ij      misc        1         -      r        "CKA"                   "ENTHALPY EXCHANGE COEFF AT LOWEST MODEL LVL"          ""
+state    real  CD               ij      misc        1         -      r        "CD"                    "DRAG COEFF AT 10m"                      ""
+state    real  CDA              ij      misc        1         -      r        "CDA"                   "DRAG COEFF AT LOWEST MODEL LVL"                      ""
+state    real  UST              ij      misc        1         -      rh       "UST"                   "U* IN SIMILARITY THEORY"                      "m s-1"      
+state    real  USTM             ij      misc        1         -      r        "USTM"                  "U* IN SIMILARITY THEORY WITHOUT VCONV"        "m s-1"
+i1       real  HOL              ij      misc        1         -      -        "HOL"                   "PBL HEIGHT OVER MONIN-OBUKHOV LENGTH"         ""
+state    real  RMOL             ij      misc        1         -      r        "RMOL"                  "1./Monin Ob. Length"                      ""
+state    real  MOL              ij      misc        1         -      r        "MOL"                   "T* IN SIMILARITY THEORY"                      "K"      
+state    real  PBLH             ij      misc        1         -      rh       "PBLH"                  "PBL HEIGHT"         "m"      
+state    real  CAPG             ij      misc        1         -      r        "CAPG"                  "HEAT CAPACITY FOR SOIL"                       "J K-1 m-3"      
+state    real  THC              ij      misc        1         -      r        "THC"                   "THERMAL INERTIA"                              "Cal cm-1 K-1 s-0.5"      
+state    real  HFX              ij      misc        1         -      rh       "HFX"                   "UPWARD HEAT FLUX AT THE SURFACE"              "W m-2"      
+state    real  QFX              ij      misc        1         -      rh       "QFX"                   "UPWARD MOISTURE FLUX AT THE SURFACE"          "kg m-2 s-1"      
+state    real  LH               ij      misc        1         -      rh       "LH"                    "LATENT HEAT FLUX AT THE SURFACE"              "W m-2"
+state    real  FLHC             ij      misc        1         -      r        "FLHC"                  "SURFACE EXCHANGE COEFFICIENT FOR HEAT"       ""
+state    real  FLQC             ij      misc        1         -      r        "FLQC"                  "SURFACE EXCHANGE COEFFICIENT FOR MOISTURE"   ""
+state    real  QSG              ij      misc        1         -      r        "QSG"                   "SURFACE SATURATION WATER VAPOR MIXING RATIO"   "kg kg-1"
+state    real  QVG              ij      misc        1         -      r        "QVG"                   "WATER VAPOR MIXING RATIO AT THE SURFACE"      "kg kg-1"
+state    real  dfi_QVG          ij      misc        1         -      r        "QVG_dfi"               "WATER VAPOR MIXING RATIO AT THE SURFACE"      "kg kg-1"
+state    real  QCG              ij      misc        1         -      r        "QCG"                   "CLOUD WATER MIXING RATIO AT THE SURFACE"      "kg kg-1"
+state    real  SOILT1           ij      misc        1         -      r        "SOILT1"                "TEMPERATURE INSIDE SNOW "    "K"
+state    real  dfi_SOILT1       ij      misc        1         -      r        "SOILT1_dfi"            "TEMPERATURE INSIDE SNOW "    "K"
+state    real  TSNAV            ij      misc        1         -      r        "TSNAV"                 "AVERAGE SNOW TEMPERATURE "                    "C"
+state    real  dfi_TSNAV        ij      misc        1         -      r        "TSNAV_dfi"             "AVERAGE SNOW TEMPERATURE "                    "C"
+state    real  REGIME           ij      misc        1         -      r        "REGIME"  "FLAGS: 1=Night/Stable, 2=Mechanical Turbulent, 3=Forced Conv, 4=Free Conv" ""
+state    real  SNOWC            ij      misc        1         -     irhd=(interp_mask_land_field:lu_index)u=(copy_fcnm)      "SNOWC"                 "FLAG INDICATING SNOW COVERAGE (1 FOR SNOW COVER)"         ""
+state    real  dfi_SNOWC        ij      misc        1         -      r        "SNOWC_dfi"             "FLAG INDICATING SNOW COVERAGE (1 FOR SNOW COVER)"         ""
+state    real  MAVAIL           ij      misc        1         -      r        "MAVAIL"                "SURFACE MOISTURE AVAILABILITY"                ""
+                                                
+state   real   tkesfcf          ij      misc        1         -      r        "tkesfcf"               "TKE AT THE SURFACE"                           "m2 s-2"      
+                                                
+state integer  STEPBL          -        misc        1         -      r        "STEPBL"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN PBL CALLS" ""      
+state    real  taucldi         ikj      misc        1         -      r        "TAUCLDI"               "CLOUD OPTICAL THICKNESS FOR ICE"              ""
+state    real  taucldc         ikj      misc        1         -      r        "TAUCLDC"               "CLOUD OPTICAL THICKNESS FOR WATER"            ""
+                                                
+state   real  defor11          ikj      misc        1         -     r         "defor11"               "DEFORMATION 11"              "s-1"      
+state   real  defor22          ikj      misc        1         -     r         "defor22"               "DEFORMATION 22"              "s-1"      
+state   real  defor12          ikj      misc        1         -     r         "defor12"               "DEFORMATION 12"              "s-1"      
+state   real  defor33          ikj      misc        1         z     r         "defor33"               "DEFORMATION 33"              "s-1"      
+state   real  defor13          ikj      misc        1         z     r         "defor13"               "DEFORMATION 13"              "s-1"      
+state   real  defor23          ikj      misc        1         z     r         "defor23"               "DEFORMATION 23"              "s-1"      
+state   real   xkmv            ikj      misc        1         -     r         "xkmv"                  "VERTICAL EDDY VISCOSITY"     "m2 s-1"      
+state   real   xkmh            ikj      misc        1         -     r         "xkmh"                  "HORIZONTAL EDDY VISCOSITY"   "m2 s-1"      
+state   real   xkhv            ikj      misc        1         -     r         "xkhv"                  "VERTICAL EDDY DIFFUSIVITY OF HEAT"                               "m2 s-1"      
+state   real   xkhh            ikj      misc        1         -     r         "xkhh"                  "HORIZONTAL EDDY DIFFUSIVITY OF HEAT"                             "m2 s-1"      
+state   real    div            ikj      misc        1         -     r         "div"                   "DIVERGENCE"                                                      "s-1"
+state   real    BN2            ikj      misc        1         -     r         "BN2"                   "BRUNT-VAISALA FREQUENCY"                                         "s-2"
+state  logical warm_rain        -       misc        1         -     -         "warm_rain"              "WARM_RAIN_LOGICAL"
+state  logical adv_moist_cond   -       misc        1         -     -         "adv_moist_cond"         "ADVECT MOIST CONDENSATES LOGICAL"
+
+## FDDA variables
+
+state integer  STEPFG            -        misc        1         -      r        "STEPFG"                "NUMBER OF FUNDAMENTAL TIMESTEPS BETWEEN FDDA GRID CALLS" ""
+state    real  RUNDGDTEN         ikj      misc        1         X      r        "RUNDGDTEN"               "COUPLED X WIND TENDENCY DUE TO FDDA GRID NUDGING"  "Pa m s-2"
+state    real  RVNDGDTEN         ikj      misc        1         Y      r        "RVNDGDTEN"               "COUPLED Y WIND TENDENCY DUE TO FDDA GRID NUDGING"  "Pa m s-2"
+state    real  RTHNDGDTEN        ikj      misc        1         -      r        "RTHNDGDTEN"              "COUPLED THETA TENDENCY DUE TO FDDA GRID NUDGING"   "Pa K s-1"
+state    real  RQVNDGDTEN        ikj      misc        1         -      r        "RQVNDGDTEN"              "COUPLED Q_V TENDENCY DUE TO FDDA GRID NUDGING"     "Pa kg kg-1 s-1"
+state    real  RMUNDGDTEN        ij       misc        1         -      r        "RMUNDGDTEN"              "MU TENDENCY DUE TO FDDA GRID NUDGING"     "Pa s-1"
+state    real    -               ikjf     fdda3d      1         -     -    -
+state    real  U_NDG_NEW         ikjf     fdda3d      1         X      igr      "U_NDG_NEW"               "NEW X WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  V_NDG_NEW         ikjf     fdda3d      1         Y      igr      "V_NDG_NEW"               "NEW Y WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  T_NDG_NEW         ikjf     fdda3d      1         -      igr      "T_NDG_NEW"               "NEW PERT POT TEMP FOR FDDA GRID NUDGING"  "K"
+state    real  Q_NDG_NEW         ikjf     fdda3d      1         -      igr      "Q_NDG_NEW"               "NEW WATER VAPOR MIX RATIO FOR FDDA GRID NUDGING"  "kg/kg"
+state    real  PH_NDG_NEW        ikjf     fdda3d      1         Z      igr      "PH_NDG_NEW"              "NEW PERT GEOPOTENTIAL FOR FDDA GRID NUDGING"  "kg/kg"
+state    real  U_NDG_OLD         ikjf     fdda3d      1         X      igr      "U_NDG_OLD"               "OLD X WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  V_NDG_OLD         ikjf     fdda3d      1         Y      igr      "V_NDG_OLD"               "OLD Y WIND FOR FDDA GRID NUDGING"  "m s-1"
+state    real  T_NDG_OLD         ikjf     fdda3d      1         -      igr      "T_NDG_OLD"               "OLD PERT POT TEMP FOR FDDA GRID NUDGING"  "K"
+state    real  Q_NDG_OLD         ikjf     fdda3d      1         -      igr      "Q_NDG_OLD"               "OLD WATER VAPOR MIX RATIO FOR FDDA GRID NUDGING"  "kg/kg"
+state    real  PH_NDG_OLD        ikjf     fdda3d      1         Z      igr      "PH_NDG_OLD"              "OLD PERT GEOPOTENTIAL FOR FDDA GRID NUDGING"  "kg/kg"
+state    real    -               ivjf     fdda2d      1         Z     -    -
+state    real  MU_NDG_NEW        ivjf     fdda2d      1         Z      igr      "MU_NDG_NEW"              "NEW PERT COLUMN DRY MASS FOR FDDA GRID NUDGING"  "Pa"
+state    real  T2_NDG_NEW        ivjf     fdda2d      1         -      igr      "T2_NDG_NEW"               "NEW 2m TEMP FOR PX LSM "  "K"
+state    real  Q2_NDG_NEW        ivjf     fdda2d      1         -      igr      "Q2_NDG_NEW"               "NEW 2m WATER VAPOR MIX RATIO FOR PX LSM "  "kg/kg"
+state    real  MU_NDG_OLD        ivjf     fdda2d      1         Z      igr      "MU_NDG_OLD"              "OLD PERT COLUMN DRY MASS FOR FDDA GRID NUDGING"  "Pa"
+state    real  T2_NDG_OLD        ivjf     fdda2d      1         -      igr      "T2_NDG_OLD"               "OLD 2m TEMP F FOR PX LSM"  "K"
+state    real  Q2_NDG_OLD        ivjf     fdda2d      1         -      igr      "Q2_NDG_OLD"               "OLD 2m WATER VAPOR MIX RATIO  FOR PX LSM"  "kg/kg"
+state    real  SN_NDG_NEW        ivjf     fdda2d      1         -      igr      "SN_NDG_NEW"               "NEW Snow Depth "  "m"
+state    real  SN_NDG_OLD        ivjf     fdda2d      1         -      igr      "SN_NDG_OLD"               "OLD Snow Depth"  "m"
+
+
+# flag for nest movement
+state  logical moved            -       misc        1         -     -          
+
+# special cam radiation restart arrays
+state  real   abstot   ikcj   misc      1    Z   -     ""   ""  " "
+state  real   absnxt   ikaj   misc      1    -   -     ""   ""  " "
+state  real   emstot   ikj    misc      1    Z   -     ""   ""  " "
+
+# model diagnostics
+state   real  dpsdt            ij       misc        1         -     -         "dpsdt"           "surface pressure tendency"                         "Pa/sec"
+state   real  dmudt            ij       misc        1         -     -         "dmudt"           "mu tendency"                                       "Pa/sec"
+state   real  pk1m             ij       misc        1         -     -         "pk1m"            "surface pressure at previous step"                 "Pa"
+state   real  mu_2m            ij       misc        1         -     -         "mu_2m"           "mu_2 at previous step"                             "Pa"
+
+state   real    max_cfl         -       misc        1         -     -       "max_cfl"           "maximum CFL value in grid at a time" "-"
+
+# Ocean Mixed-Layer State Variables
+state   real    TML            ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "TML"    "OCEAN MIXED-LAYER TEMPERATURE"   "K"
+state   real    T0ML           ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "T0ML"   "INITIAL OCEAN MIXED-LAYER TEMPERATURE"   "K"
+state   real    HML            ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "HML"    "OCEAN MIXED-LAYER DEPTH"   "m"
+state   real    H0ML           ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "H0ML"   "INITIAL OCEAN MIXED-LAYER DEPTH"   "m"
+state   real    HUML           ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "HUML"   "OCEAN MIXED-LAYER DEPTH * U-CURRENT"  " m2s-1 "
+state   real    HVML           ij      misc         1         -     rd=(interp_mask_water_field:lu_index)u=(copy_fcnm)    "HVML"   "OCEAN MIXED-LAYER DEPTH * V-CURRENT"  " m2s-1 " 
+#
+#---------------------------------------------------------------------------------------------------------------------------------------
+#                                               
+
+######                                          
+#                                               
+# Variables that are set at run-time to control configuration  (namelist-settable)                                              
+#                                               
+#<Table>  <Type>  <Sym>                   <How set>          <Nentries>   <Default>                                             
+
+
+# Time Control
+rconfig   integer run_days                namelist,time_control		1             0       irh   "run_days"              "NUMBER OF DAYS TO RUN"
+rconfig   integer run_hours               namelist,time_control		1             0       irh   "run_hours"             "NUMBER OF HOURS TO RUN"
+rconfig   integer run_minutes             namelist,time_control		1             0       irh   "run_minutes"           "NUMBER OF MINUTES TO RUN"
+rconfig   integer run_seconds             namelist,time_control		1             0       irh   "run_seconds"           "NUMBER OF SECONDS TO RUN"
+rconfig   integer start_year              namelist,time_control 	max_domains    1993    irh   "start_year"            "4 DIGIT YEAR OF START OF MODEL" "YEARS"
+rconfig   integer start_month             namelist,time_control		max_domains      03    irh   "start_month"           "2 DIGIT MONTH OF THE YEAR OF START OF MODEL, 1-12" "MONTHS"
+rconfig   integer start_day               namelist,time_control		max_domains      13    irh   "start_day"             "2 DIGIT DAY OF THE MONTH OF START OF MODEL, 1-31" "DAYS"
+rconfig   integer start_hour              namelist,time_control		max_domains      12    irh   "start_hour"            "2 DIGIT HOUR OF THE DAY OF START OF MODEL, 0-23" "HOURS"
+rconfig   integer start_minute            namelist,time_control		max_domains      00    irh   "start_minute"          "2 DIGIT MINUTE OF THE HOUR OF START OF MODEL, 0-59" "MINUTES"
+rconfig   integer start_second            namelist,time_control		max_domains      00    irh   "start_second"          "2 DIGIT SECOND OF THE MINUTE OF START OF MODEL, 0-59" "SECONDS"
+rconfig   integer end_year                namelist,time_control		max_domains    1993    irh   "end_year"              "4 DIGIT YEAR OF END OF MODEL" "YEARS"
+rconfig   integer end_month               namelist,time_control		max_domains      03    irh   "end_month"             "2 DIGIT MONTH OF THE YEAR OF END OF MODEL, 1-12" "MONTHS"
+rconfig   integer end_day                 namelist,time_control		max_domains      14    irh   "end_day"               "2 DIGIT DAY OF THE MONTH OF END OF MODEL, 1-31" "DAYS"
+rconfig   integer end_hour                namelist,time_control		max_domains      12    irh   "end_hour"              "2 DIGIT HOUR OF THE DAY OF END OF MODEL, 0-23" "HOURS"
+rconfig   integer end_minute              namelist,time_control		max_domains      00    irh   "end_minute"            "2 DIGIT MINUTE OF THE HOUR OF END OF MODEL, 0-59" "MINUTES"
+rconfig   integer end_second              namelist,time_control		max_domains      00    irh   "end_second"            "2 DIGIT SECOND OF THE MINUTE OF END OF MODEL, 0-59" "SECONDS"
+rconfig   integer interval_seconds        namelist,time_control		1             43200    irh   "interval_seconds"      "SECONDS BETWEEN ANALYSIS AND BOUNDARY PERIODS" "SECONDS"
+rconfig   logical input_from_file         namelist,time_control		max_domains    .false. irh    "input_from_file"      "T/F INPUT FOR THIS DOMAIN FROM A SEPARATE INPUT FILE"  ""
+rconfig   integer fine_input_stream       namelist,time_control		max_domains    0       irh    "fine_input_stream"      "0 THROUGH 11, WHAT INPUT STREAM IS FINE GRID IC FROM"  ""
+rconfig   logical input_from_hires        namelist,time_control		max_domains    .false. irh    "input_from_hires"     "T/F INPUT FOR THIS DOMAIN FROM USGS HI RES TERRAIN"  ""
+rconfig   character rsmas_data_path       namelist,time_control		1              "."     -    "rsmas_data_path"      ""  ""
+rconfig   logical all_ic_times            namelist,time_control		1              .false. irh    "all_ic_times"     "T/F WRITE ALL IC TIME PERIODS"  ""
+
+include registry.io_boilerplate
+
+rconfig   integer JULYR                   namelist,time_control		max_domains    0       h    "JULYR"                 ""      ""
+rconfig   integer JULDAY                  namelist,time_control		max_domains    1       h    "JULDAY"                ""      ""
+rconfig   real    GMT                     namelist,time_control		max_domains    0.      h    "GMT"           ""      ""
+rconfig   character  input_inname      namelist,time_control		1  "wrfinput_d<domain>"          -     "name of input   infile"   ""      ""
+rconfig   character  input_outname     namelist,time_control		1  "wrfinput_d<domain>"          -     "name of input   outfile"  ""      ""
+rconfig   character  bdy_inname        namelist,time_control		1  "wrfbdy_d<domain>"            -     "name of boundary infile"  ""      ""
+rconfig   character  bdy_outname       namelist,time_control		1  "wrfbdy_d<domain>"            -     "name of boundary outfile" ""      ""
+rconfig   character  rst_inname        namelist,time_control		1  "wrfrst_d<domain>_<date>"     -     "name of restrt infile"    ""      ""
+rconfig   character  rst_outname       namelist,time_control		1  "wrfrst_d<domain>_<date>"     -     "name of restrt outfile"   ""      ""
+rconfig   logical write_input             namelist,time_control		1             .false. -    "write input data for 3dvar etc."              ""      ""
+rconfig   logical write_restart_at_0h     namelist,time_control		1             .false. h    "write_restart_at_0h"              ""      ""
+rconfig   logical adjust_output_times     namelist,time_control         1             .false. -    "adjust_output_times"
+rconfig   logical adjust_input_times      namelist,time_control         1             .false. -    "adjust_input_times"
+
+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"
+
+# DFI namelist
+rconfig   integer dfi_opt                namelist,dfi_control   1       0     rh   "dfi_opt"                ""      ""
+rconfig   integer dfi_nfilter            namelist,dfi_control   1       7     rh   "dfi_nfilter"                "Digital filter type"      ""
+rconfig   logical dfi_write_filtered_input  namelist,dfi_control  1  .true.   rh   "dfi_write_filtered_input"                "Write a wrfinput_filtered_d0n file?"      ""
+rconfig   logical dfi_write_dfi_history  namelist,dfi_control   1   .false.   rh   "dfi_write_dfi_history"    "Write history files during filtering?"      ""
+rconfig   integer dfi_cutoff_seconds     namelist,dfi_control   1    3600     rh   "dfi_cutoff_seconds"       "Digital filter cutoff time"      ""
+rconfig   integer dfi_time_dim           namelist,dfi_control   1    1000     rh   "dfi_time_dim"             "MAX DIMENSION FOR HCOEFF"
+rconfig   integer dfi_fwdstop_year       namelist,dfi_control   1    2004     rh   "dfi_fwdstop_year"         "4 DIGIT YEAR OF START OF DFI" "YEARS"
+rconfig   integer dfi_fwdstop_month      namelist,dfi_control   1      03     rh   "dfi_fwdstop_month"        "2 DIGIT MONTH OF THE YEAR OF START OF DFI" "MONTHS"
+rconfig   integer dfi_fwdstop_day        namelist,dfi_control   1      13     rh   "dfi_fwdstop_day"          "2 DIGIT DAY OF THE MONTH OF START OF DFI" "DAYS"
+rconfig   integer dfi_fwdstop_hour       namelist,dfi_control   1      12     rh   "dfi_fwdstop_hour"         "2 DIGIT HOUR OF THE DAY OF START OF DFI" "HOURS"
+rconfig   integer dfi_fwdstop_minute     namelist,dfi_control   1      00     rh   "dfi_fwdstop_minute"       "2 DIGIT MINUTE OF THE HOUR OF START OF DFI" "MINUTES"
+rconfig   integer dfi_fwdstop_second     namelist,dfi_control   1      00     rh   "dfi_fwdstop_second"       "2 DIGIT SECOND OF THE MINUTE OF START OF DFI" "SECONDS"
+rconfig   integer dfi_bckstop_year       namelist,dfi_control   1    2004     rh   "dfi_bckstop_year"         "4 DIGIT YEAR OF END OF DFI" "YEARS"
+rconfig   integer dfi_bckstop_month      namelist,dfi_control   1      03     rh   "dfi_bckstop_month"        "2 DIGIT MONTH OF THE YEAR OF END OF DFI" "MONTHS"
+rconfig   integer dfi_bckstop_day        namelist,dfi_control   1      14     rh   "dfi_bckstop_day"          "2 DIGIT DAY OF THE MONTH OF END OF DFI" "DAYS"
+rconfig   integer dfi_bckstop_hour       namelist,dfi_control   1      12     rh   "dfi_bckstop_hour"         "2 DIGIT HOUR OF THE DAY OF END OF DFI" "HOURS"
+rconfig   integer dfi_bckstop_minute     namelist,dfi_control   1      00     rh   "dfi_bckstop_minute"       "2 DIGIT MINUTE OF THE HOUR OF END OF DFI" "MINUTES"
+rconfig   integer dfi_bckstop_second     namelist,dfi_control   1      00     rh   "dfi_bckstop_second"       "2 DIGIT SECOND OF THE MINUTE OF END OF DFI" "SECONDS"
+
+# Domains
+rconfig   integer time_step               namelist,domains	1             -       ih   "time_step"     
+rconfig   integer time_step_fract_num     namelist,domains	1             0       ih   "time_step_fract_num"     
+rconfig   integer time_step_fract_den     namelist,domains	1             1       ih   "time_step_fract_den"     
+
+rconfig   integer min_time_step           namelist,domains      max_domains   -1      h    "min_time_step"
+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   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"
+rconfig   logical use_adaptive_time_step  namelist,domains      1         .false.     h    "use_adaptive_time_step"
+
+rconfig   integer max_dom                 namelist,domains	1             1       irh  "max_dom"               ""      ""
+rconfig   integer s_we                    namelist,domains	max_domains    1       irh    "s_we"          ""      ""
+rconfig   integer e_we                    namelist,domains	max_domains    32      irh    "e_we"          ""      ""
+rconfig   integer s_sn                    namelist,domains	max_domains    1       irh    "s_sn"          ""      ""
+rconfig   integer e_sn                    namelist,domains	max_domains    32      irh    "e_sn"          ""      ""
+rconfig   integer s_vert                  namelist,domains	max_domains    1       irh    "s_vert"                ""      ""
+rconfig   integer e_vert                  namelist,domains	max_domains    31      irh    "e_vert"                ""      ""
+rconfig   integer num_metgrid_levels      namelist,domains	1              27      irh    "num_metgrid_levels"                ""      ""
+rconfig   real    p_top_requested         namelist,domains      1              5000    irh    "p_top_requested" "Pa"      ""
+rconfig   integer interp_type             namelist,domains	1              2       irh    "interp_type"  "1=interp in pressure, 2=interp in LOG pressure"  ""
+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   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_surface             namelist,domains	1             .true.   irh    "use_surface"   "T/F: use input surface level in interpolation" ""
+rconfig   integer lagrange_order          namelist,domains	1              1       irh    "lagrange_order"   "1=linear, 2=quadratic vertical interpolation"      ""
+rconfig   integer force_sfc_in_vinterp    namelist,domains	1              1       irh    "force_sfc_in_vinterp"   "number of eta levels forced to use sfc in vert interp"      ""
+rconfig   real    zap_close_levels        namelist,domains	1              500     irh    "zap_close_levels"   "delta p where level is removed in vert interp"      "Pa"
+rconfig   logical sfcp_to_sfcp            namelist,domains	1              .false. irh    "sfcp_to_sfcp"   "T/F use incoming sfc pres to compute new sfc pres"      "flag"
+rconfig   logical adjust_heights          namelist,domains	1              .false. irh    "adjust_heights"   "T/F adjust pressure level input to match 500 mb height"      "flag"
+rconfig   logical smooth_cg_topo          namelist,domains	1              .false. irh    "smooth_cg_topo"   "T/F smooth CG topo on boundarries" "flag"
+rconfig   real    dx                      namelist,domains     max_domains    200     h     "dx"        "X HORIZONTAL RESOLUTION"   "METERS"
+rconfig   real    dy                      namelist,domains   	max_domains    200     h     "dy"        "Y HORIZONTAL RESOLUTION"   "METERS"
+rconfig   integer grid_id                 namelist,domains	max_domains    1       irh    "id"            ""      ""
+rconfig   logical grid_allowed            namelist,domains	max_domains    .true.  irh    "allowed"            ""      ""
+rconfig   integer parent_id               namelist,domains	max_domains    0       h     "parent_id"             ""      ""
+rconfig   integer i_parent_start          namelist,domains	max_domains    1       rh     "i_parent_start"                ""      ""
+rconfig   integer j_parent_start          namelist,domains	max_domains    1       rh     "j_parent_start"                ""      ""
+rconfig   integer parent_grid_ratio       namelist,domains	max_domains    1       h     "parent_grid_ratio"             ""      ""
+rconfig   integer parent_time_step_ratio  namelist,domains	max_domains    1       h     "parent_time_step_ratio"                ""      ""
+rconfig   integer feedback                namelist,domains	1    1       h     "feedback"          ""      ""
+rconfig   integer smooth_option           namelist,domains	1    2       h     "smooth_option"          ""      ""
+rconfig   integer blend_width             namelist,domains	1    5       h     "blend_width"  "width of cg fg terrain blended zone"      ""
+rconfig   real    ztop                    namelist,domains	max_domains    15000.  h    "ztop"          ""      ""
+rconfig   integer moad_grid_ratio         namelist,domains	max_domains    1       h     "moad_grid_ratio"               ""      ""
+rconfig   integer moad_time_step_ratio    namelist,domains	max_domains    1       h     "moad_time_step_ratio"          ""      ""
+rconfig   integer shw                     namelist,domains	max_domains    2       h     "stencil_half_width"   "HORIZONTAL INTERPOLATION STENCIL HALF-WIDTH"  "GRID POINTS"
+rconfig   integer tile_sz_x               namelist,domains	1             0       -      "tile_sz_x"             ""      ""
+rconfig   integer tile_sz_y               namelist,domains	1             0       -      "tile_sz_y"             ""      ""
+rconfig   integer numtiles                namelist,domains	1             1       -      "numtiles"              ""      ""
+rconfig   integer nproc_x                 namelist,domains	1             -1       -      "nproc_x"              "-1 means not set"      ""
+rconfig   integer nproc_y		  namelist,domains	1             -1       -      "nproc_y"              "-1 means not set"      ""
+rconfig   integer irand                   namelist,domains	1             0       -      "irand"           ""      ""
+rconfig   real    dt                      derived              max_domains    2.      h     "dt"        "TEMPORAL RESOLUTION"      "SECONDS"
+rconfig   integer   num_moves       namelist,domains    1                0
+rconfig   integer   ts_buf_size     namelist,domains    1                200          -       "ts_buf_size"   "Size of time series buffer"
+rconfig   integer   max_ts_locs     namelist,domains    1                5            -       "max_ts_locs"   "Maximum number of time series locations"
+rconfig   integer   vortex_interval  namelist,domains   max_domains      15  -  "" "" "minutes"
+rconfig   integer   max_vortex_speed namelist,domains   max_domains      40  -  "" "" "meters per second"
+rconfig   integer   corral_dist     namelist,domains    max_domains      8
+rconfig   integer   track_level     namelist,domains    1                50000
+rconfig   integer   move_id         namelist,domains    max_moves        0
+rconfig   integer   move_interval   namelist,domains    max_moves        999999999
+rconfig   integer   move_cd_x       namelist,domains    max_moves        0
+rconfig   integer   move_cd_y       namelist,domains    max_moves        0
+rconfig   logical   swap_x          namelist,domains    max_domains    .false. rh    "swap_x"            ""      ""
+rconfig   logical   swap_y          namelist,domains    max_domains    .false. rh    "swap_y"            ""      ""
+rconfig   logical   cycle_x         namelist,domains    max_domains    .false. rh    "cycle_x"            ""      ""
+rconfig   logical   cycle_y         namelist,domains    max_domains    .false. rh    "cycle_y"            ""      ""
+rconfig   logical   reorder_mesh    namelist,domains    1              .false. rh    "reorder_mesh"       ""      ""
+rconfig   logical   perturb_input   namelist,domains    1              .false. h     "" "" ""
+rconfig   real      eta_levels      namelist,domains    max_eta        -1.
+rconfig   real      max_dz          namelist,domains    1               1000.
+
+# Physics
+######
+###### MARS SPECIFIC NAMELIST ENTRIES
+######
+rconfig  integer  mars      namelist,physics  max_domains  0        rh   "mars"      "model mode"              ""
+rconfig  real     init_TI   namelist,physics  max_domains  0        irh  "init_TI"   "thermal inertia"         ""
+rconfig  real     init_AL   namelist,physics  max_domains  0        irh  "init_AL"   "albedo"                  ""
+rconfig  real     init_U    namelist,physics  max_domains  0        irh  "init_U"    "zonal wind"              ""
+rconfig  real     init_V    namelist,physics  max_domains  0        irh  "init_V"    "meridional wind"         ""
+rconfig  integer  init_WX   namelist,physics  max_domains  0        irh  "init_WX"   "x coord"                 ""
+rconfig  integer  init_WY   namelist,physics  max_domains  0        irh  "init_WY"   "y coord"                 ""
+rconfig  real     init_MU   namelist,physics  max_domains  0        irh  "init_MU"   "zonal wind mult."        ""
+rconfig  real     init_MV   namelist,physics  max_domains  0        irh  "init_MV"   "meridional wind mult."   ""
+rconfig  logical  init_LES  namelist,physics  max_domains  .false.  irh  "init_LES"  "LES mode"                ""
+rconfig  logical  modif_wrf namelist,physics  max_domains  .true.   ir   "modif_wrf" "true if tweaked WRF"     ""
+#######
+####### MARS SPECIFIC NAMELIST ENTRIES
+#######
+rconfig   integer     mp_physics          namelist,physics	max_domains    0       rh       "mp_physics"            ""      ""
+rconfig   integer     gsfcgce_hail        namelist,physics      1              0       rh       "gsfcgce select hail/graupel"  ""      ""
+rconfig   integer     gsfcgce_2ice        namelist,physics      1              0       rh       "gsfcgce select 2ice/3ice"  ""      ""
+rconfig   integer     progn               namelist,physics      max_domains    0       rh       "progn"                 ""      ""
+rconfig   integer     ra_lw_physics       namelist,physics	max_domains    0       rh       "ra_lw_physics"         ""      ""
+rconfig   integer     ra_sw_physics       namelist,physics	max_domains    0       rh       "ra_sw_physics"         ""      ""
+rconfig   real    radt                    namelist,physics	max_domains    0       h    "RADT"          ""      ""
+rconfig   real    naer                    namelist,physics      max_domains    1e9     rh   "NAER"          ""      ""
+rconfig   integer     sf_sfclay_physics   namelist,physics	max_domains    0       rh       "sf_sfclay_physics"             ""      ""
+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   real    BLDT                    namelist,physics	max_domains    0       h    "BLDT"          ""      ""
+rconfig   integer     cu_physics          namelist,physics	max_domains    0       rh       "cu_physics"            ""      ""
+rconfig   real    CUDT                    namelist,physics	max_domains    0       h    "CUDT"          ""      ""
+rconfig   real    GSMDT                   namelist,physics	max_domains    0       h    "GSMDT"          ""      ""
+rconfig   integer ISFFLX                  namelist,physics 	1             1       irh    "ISFFLX"                        ""      ""
+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 num_soil_layers         namelist,physics	1            10       irh    "num_soil_layers"               ""      ""
+rconfig   integer num_months              namelist,physics      1            12       irh    "num_months"               ""      ""
+rconfig   integer maxiens                 namelist,physics	1             1       irh    "maxiens"                    ""      ""
+rconfig   integer maxens                  namelist,physics	1             3       irh    "maxens"                    ""      ""
+rconfig   integer maxens2                 namelist,physics	1             3       irh    "maxens2"                    ""      ""
+rconfig   integer maxens3                 namelist,physics	1            16       irh    "maxens3"                    ""      ""
+rconfig   integer ensdim                  namelist,physics	1            144      irh    "ensdim"                    ""      ""
+rconfig   integer cugd_avedx              namelist,physics      1            1      irh    "cugd_avedx"                    ""      ""
+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     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"                  ""      ""
+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"
+rconfig   real mp_zero_out_thresh         namelist,physics	1          1.e-8      -      "mp_zero_out_thresh"  "minimum threshold for non-Qv moist fields, below are set to zero"  "kg/kg"
+rconfig   real    seaice_threshold        namelist,physics	1            271       h    "seaice_threshold"  "tsk below which which water points are set to sea ice for slab scheme"   "K"
+rconfig   integer sst_update              namelist,physics	1            0         h    "sst_update"  "update sst from wrflowinp file  0=no, 1=yes"   ""
+rconfig   integer ucmcall                 namelist,physics      max_domains  0         h    "ucmcall"     "activate urban model  0=no, 1=yes"   ""
+rconfig   logical usemonalb               namelist,physics      1            .false.   h    "usemonalb"   "use 2d field vs table values  false=table, True=2d"   ""
+rconfig   integer co2tf                   namelist,physics	1            1         -    "co2tf" "GFDL radiation co2 flag" ""
+rconfig   integer ra_call_offset          namelist,physics	1            0         -    "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"
+rconfig   integer levsiz                  namelist,physics      1             1       -      "levsiz" "Number of ozone data levels for CAM radiation (59)"  ""
+rconfig   integer paerlev                 namelist,physics      1             1       -      "paerlev" "Number of aerosol data levels for CAM radiation (29)"  ""
+rconfig   integer cam_abs_dim1            namelist,physics      1             1       -      "cam_abs_dim1" "dimension for absnxt in CAM radiation"  ""
+rconfig   integer cam_abs_dim2            namelist,physics      1             1       -      "cam_abs_dim2" "dimension for abstot in CAM radiation"  ""
+rconfig   logical cu_rad_feedback         namelist,physics      max_domains   .false.  -     "feedback cumulus to radiation"  ""
+rconfig   integer pxlsm_smois_init           namelist,physics  max_domains   1       irh    "PXLSM_SMOIS_INIT"    "Soil moisture initialization option 0-From analysis 1-From MAVAIL"      ""
+rconfig   integer omlcall                 namelist,physics      1            0         h     "omlcall"     "activate simple ocean mixed layer model  0=no, 1=yes"   ""
+rconfig   real    oml_hml0                namelist,physics      1            50        h     "oml_hml0"    "oml initial mixed layer depth value"   "m"
+rconfig   real    oml_gamma               namelist,physics      1            0.14      h     "oml_gamma"   "oml deep water lapse rate"   "K m-1"
+rconfig   integer isftcflx                namelist,physics      1            0         h     "isftcflx"    "switch to control sfc fluxes"   ""
+rconfig   real    shadlen                 namelist,physics      1            25000.    -     "shadow_length" "maximum length of orographic shadow" "m"
+rconfig   integer slope_rad               namelist,physics      max_domains    0       -     "slope_rad"  "1: use slope-dependent radiation, 0:not" ""
+rconfig   integer topo_shading            namelist,physics      max_domains    0       -     "topo_shading" "1: apply topographic shading to radiation, 0:not" ""
+rconfig   integer no_mp_heating           namelist,physics      1              0       -     "no_mp_heating" "switch to turn of latent heating in mp schemes"   ""
+
+#FDDA namelist parameters
+rconfig   real    FGDT                    namelist,fdda         max_domains    0       h        "FGDT"          ""      ""
+rconfig   integer  grid_fdda              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_no_pbl_nudging_uv   namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_no_pbl_nudging_t    namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_no_pbl_nudging_q    namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_zfac_uv             namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer   k_zfac_uv             namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_zfac_t              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer   k_zfac_t              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer  if_zfac_q              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   integer   k_zfac_q              namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real        guv                 namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real        gt                  namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real        gq                  namelist,fdda         max_domains    0       rh       "grid_fdda"            ""      ""
+rconfig   real    dtramp_min              namelist,fdda         1              0       h        "grid_fdda"            ""      ""
+rconfig   integer if_ramping              namelist,fdda         1              0       h        "grid_fdda"            ""      ""
+
+#Observational Nudging
+rconfig   integer     obs_nudge_opt       namelist,fdda            max_domains    0       rh       "obs_nudge_opt"     "Obs-nudging flag for domain"          ""
+rconfig   integer     max_obs             namelist,fdda            1              0       h        "max_obs"           "Maximum number of observations"       ""
+rconfig   real        fdda_start          namelist,fdda            max_domains    0       rh       "fdda_start"        "Nudging start time for domain"        "min"
+rconfig   real        fdda_end            namelist,fdda            max_domains    0       rh       "fdda_end"          "Nudging end time for domain"          "min"
+rconfig   integer     obs_nudge_wind      namelist,fdda            max_domains    0       rh       "obs_nudge_wind"    "Wind-nudging flag for domain"         ""
+rconfig   real        obs_coef_wind       namelist,fdda            max_domains    0       rh       "obs_coef_wind"     "Wind-nudging coeficient for domain"   "s-1"
+rconfig   integer     obs_nudge_temp      namelist,fdda            max_domains    0       rh       "obs_nudge_temp"    "Temperature-nudging flag for domain"  ""
+rconfig   real        obs_coef_temp       namelist,fdda            max_domains    0       rh       "obs_coef_temp"     "Temperature-nudging coef for domain"  "s-1"
+rconfig   integer     obs_nudge_mois      namelist,fdda            max_domains    0       rh       "obs_nudge_mois"    "Moisture-nudging flag for domain"     ""
+rconfig   real        obs_coef_mois       namelist,fdda            max_domains    0       rh       "obs_coef_mois"     "Moisture-nudging coef for domain"     "s-1"
+rconfig   integer     obs_nudge_pstr      namelist,fdda            max_domains    0       rh       "obs_nudge_pstr"    "Not used"                             ""
+rconfig   real        obs_coef_pstr       namelist,fdda            max_domains    0       rh       "obs_coef_pstr"     "Not used"                             ""
+rconfig   real        obs_rinxy           namelist,fdda            max_domains    0       rh       "obs_rinxy"         "Horizontal radius of influence"       "km"
+rconfig   real        obs_rinsig          namelist,fdda            1              0       h        "obs_rinsig"        "Vertical radius of influence"         "sigma"
+rconfig   real        obs_twindo          namelist,fdda            max_domains    0       rh       "obs_twindo"        "Half-period time window for nudging"  "hrs"
+rconfig   integer     obs_npfi            namelist,fdda            1              0       h        "obs_npfi"          "Freq in cg timesteps for diag print"  ""
+rconfig   integer     obs_ionf            namelist,fdda            max_domains    1       rh       "obs_ionf"          "Freq in cg timesteps for obs input and error calc"   ""
+rconfig   integer     obs_idynin          namelist,fdda            1              0       h        "obs_idynin"        "Flag for dynamic initialization"      ""
+rconfig   real        obs_dtramp          namelist,fdda            1              0       h        "obs_dtramp"        "Time period for ramping (idynin)"     "min"
+rconfig   integer     obs_nobs_prt        namelist,fdda            max_domains    0       rh       "obs_nobs_prt"      "Number of current obs to print grid coord. info."   ""
+rconfig   logical     obs_ipf_in4dob      namelist,fdda            1              .false. h        "obs_ipf_in4dob"    "Print obs input diagnostics"   ""
+rconfig   logical     obs_ipf_errob       namelist,fdda            1              .false. h        "obs_ipf_errob"     "Print obs error diagnostics"   ""
+rconfig   logical     obs_ipf_nudob       namelist,fdda            1              .false. h        "obs_ipf_nudob"     "Print obs nudge diagnostics"   ""
+rconfig   logical     obs_ipf_init        namelist,fdda            1              .true.  h        "obs_ipf_init"      "Enable obs init warning messages"   ""
+
+
+# Dynamics
+# dynamics option (see package definitions, below)
+rconfig   integer rk_ord                  namelist,dynamics	1             3       irh   "rk_order"               ""      ""
+rconfig   integer w_damping               namelist,dynamics	1             0       irh    "w_damping"             ""      ""
+# diff_opt 1=old diffusion, 2=new
+rconfig   integer diff_opt                namelist,dynamics	1             1       irh    "diff_opt"              ""      ""
+# km_opt   1=old coefs, 2=tke, 3=Smagorinksy
+rconfig   integer km_opt                  namelist,dynamics	1             1       irh    "km_opt"                ""      ""
+# km_opt_dfi is needed for backward integration in dfi
+rconfig   integer km_opt_dfi              namelist,dynamics	1             1       irh    "km_opt_dfi"                ""      ""
+rconfig   integer damp_opt                namelist,dynamics	1             0       irh    "damp_opt"              ""      ""
+rconfig   real    zdamp                   namelist,dynamics	max_domains    5000.   h    "zdamp"         ""      ""
+rconfig   real    dampcoef                namelist,dynamics     max_domains    0.      h    "dampcoef"              ""      ""
+rconfig   real    khdif                   namelist,dynamics	max_domains    0       h    "khdif"         ""      ""
+rconfig   real    kvdif                   namelist,dynamics	max_domains    0       h    "kvdif"         ""      ""
+rconfig   real    diff_6th_factor         namelist,dynamics     max_domains    0.12    h    "diff_6th_factor" "factor that controls rate of 6th-order numerical diffusion"
+rconfig   integer diff_6th_opt            namelist,dynamics     max_domains    0      irh   "diff_6th_opt" "switch for 6th-order numerical diffusion"
+rconfig   real    c_s                     namelist,dynamics	max_domains    0.25    h    "c_s"         "Smagorinsky coeff"      ""
+rconfig   real    c_k                     namelist,dynamics	max_domains    0.15    h    "c_k"         "TKE coeff"      ""
+rconfig   real    smdiv                   namelist,dynamics	max_domains    0.1     h    "smdiv"         ""      ""
+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   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"               ""      ""
+rconfig   integer     h_sca_adv_order     namelist,dynamics	max_domains    5       rh       "h_sca_adv_order"               ""      ""
+rconfig   integer     v_sca_adv_order     namelist,dynamics	max_domains    3       rh       "v_sca_adv_order"               ""      ""
+rconfig   logical     pd_moist            namelist,dynamics	max_domains    .false.  rh    "pd_moist"         "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_moist_dfi        namelist,dynamics	max_domains    .false.  rh    "pd_moist_dfi"    "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_chem             namelist,dynamics	max_domains    .false. rh    "pd_chem"          "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_scalar           namelist,dynamics	max_domains    .false. rh    "pd_scalar"        "positive-definite RK3 transport switch"      ""
+rconfig   logical     pd_tke              namelist,dynamics	max_domains    .false. rh    "pd_tke"           "positive-definite RK3 transport switch"      ""
+rconfig   logical top_radiation           namelist,dynamics	max_domains    .false. rh    "top_radiation"         ""      ""
+rconfig   integer mix_isotropic           namelist,dynamics	max_domains    0       h    "mix_isotropic"            "0=anistropic, 1=isotropic"      ""
+rconfig   real    mix_upper_bound         namelist,dynamics	max_domains    0.1     h    "mix_upper_bound"          "non-dimensional limit"      ""
+rconfig   logical top_lid                 namelist,dynamics     max_domains    .false. rh    "top_lid"               ""      ""
+rconfig   real    tke_upper_bound         namelist,dynamics	max_domains    1000.   h    "tke_upper_bound"            ""      ""
+rconfig   real    tke_drag_coefficient    namelist,dynamics	max_domains    0.      h    "tke_drag_coefficient"       ""      "dimensionless"
+rconfig   real    tke_heat_flux           namelist,dynamics	max_domains    0.      h    "tke_heat_flux"              ""      "K m s-1"
+rconfig   logical pert_coriolis           namelist,dynamics	max_domains  .false.  irh  "pert_coriolis"    ""   ""
+rconfig   logical coriolis2d              namelist,dynamics	max_domains  .false.  irh  "coriolis2d"    ""   ""
+rconfig   logical mix_full_fields         namelist,dynamics     max_domains  .false.  irh  "mix_full_field"   ""   ""
+rconfig   real    base_pres               namelist,dynamics	1          100000.     h    "base_pres"  "Base state pressure - do not change (10^5 Pa), real only"      "Pa"
+rconfig   real    base_temp               namelist,dynamics	1             290.     h    "base_temp"  "Base state sea level temperature, real only"      "K"
+rconfig   real    base_lapse              namelist,dynamics	1              50.     h    "base_lapse" "Base state temperature difference between base pres and 1/e of atm depth - do not change, real only"      "K"
+rconfig   real    fft_filter_lat          namelist,dynamics     1              45.     h    "fft_filter_lat"   ""   "grid latitude to start polar filter"
+rconfig   logical rotated_pole            namelist,dynamics     1            .false.  irh   "rotated_pole"    ""   ""
+rconfig   logical do_coriolis             namelist,dynamics	max_domains  .true.   irh  "do_coriolis"    ""   ""
+rconfig   logical do_curvature            namelist,dynamics	max_domains  .true.   irh  "do_curvature"   ""   ""
+rconfig   logical do_gradp                namelist,dynamics	max_domains  .true.   irh  "do_gradp"    ""   ""
+
+
+# Bdy_control
+rconfig   integer spec_bdy_width          namelist,bdy_control		1             5       irh    "spec_bdy_width"                ""      ""
+rconfig   integer spec_zone               namelist,bdy_control		1             1       irh    "spec_zone"                     ""      ""
+rconfig   integer relax_zone              namelist,bdy_control		1             4       irh    "relax_zone"                    ""      ""
+rconfig   logical specified               namelist,bdy_control	max_domains    .false. rh    "specified"             ""      ""
+rconfig   logical periodic_x              namelist,bdy_control	max_domains    .false. rh    "periodic_x"            ""      ""
+rconfig   logical symmetric_xs            namelist,bdy_control	max_domains    .false. rh    "symmetric_xs"          ""      ""
+rconfig   logical symmetric_xe            namelist,bdy_control	max_domains    .false. rh    "symmetric_xe"          ""      ""
+rconfig   logical open_xs                 namelist,bdy_control	max_domains    .false. rh    "open_xs"               ""      ""
+rconfig   logical open_xe                 namelist,bdy_control	max_domains    .false. rh    "open_xe"               ""      ""
+rconfig   logical periodic_y              namelist,bdy_control	max_domains    .false. rh    "periodic_y"            ""      ""
+rconfig   logical symmetric_ys            namelist,bdy_control	max_domains    .false. rh    "symmetric_ys"          ""      ""
+rconfig   logical symmetric_ye            namelist,bdy_control	max_domains    .false. rh    "symmetric_ye"          ""      ""
+rconfig   logical open_ys                 namelist,bdy_control	max_domains    .false. rh    "open_ys"               ""      ""
+rconfig   logical open_ye                 namelist,bdy_control	max_domains    .false. rh    "open_ye"               ""      ""
+rconfig   logical polar                   namelist,bdy_control	max_domains    .false. rh    "polar"                 ""      ""
+rconfig   logical nested                  namelist,bdy_control	max_domains    .false. rh    "nested"                ""      ""
+rconfig   real    spec_exp                namelist,bdy_control          1     0.      irh    "spec_exp"              ""      ""
+rconfig   integer real_data_init_type     namelist,bdy_control		1                 1    irh   "real_data_init_type"   "REAL DATA INITIALIZATION OPTIONS: 1=SI, 2=MM5, 3=GENERIC" "PRE-PROCESSOR TYPES"
+
+rconfig   integer background_proc_id      namelist,grib2 	        1     255    rh    "background_proc_id"    "Background processing id for grib2"  ""
+rconfig   integer forecast_proc_id        namelist,grib2 	        1     255    rh    "forecast_proc_id"      "Analysis and forecast processing id for grib2"  ""
+rconfig   integer production_status       namelist,grib2 	        1     255    rh    "production_status"     "Background processing id for grib2"  ""
+rconfig   integer compression             namelist,grib2 	        1      40    rh    "compression"           "grib2 compression, 40 for JPEG2000 or 41 for PNG"  ""
+
+# NAMELIST DERIVED
+rconfig   integer nobs_ndg_vars           derived                       1         5       -        "num_ndg_vars"         "Number of nudging variables"          ""
+rconfig   integer nobs_err_flds           derived                       1         9       -        "num_err_flds"         "Number of error fields"               ""
+rconfig   real    cen_lat                 derived                  max_domains    0       -        "cen_lat"              "center latitude"      "degrees, negative is south"
+rconfig   real    cen_lon                 derived                  max_domains    0       -        "cen_lon"              "central longitude"      "degrees, negative is west"
+rconfig   real    truelat1                derived                  max_domains    0       -        "true_lat1"             "first standard parallel"      "degrees, negative is south"
+rconfig   real    truelat2                derived                  max_domains    0       -        "true_lat2"             "second standard parallel"      "degrees, negative is south"
+rconfig   real    moad_cen_lat            derived                  max_domains    0       -        "moad_cen_lat"             "center latitude of the most coarse grid"      "degrees, negative is south"
+rconfig   real    stand_lon               derived                  max_domains    0       -        "stand_lon"             "standard longitude, parallel to j-direction, perpendicular to i-direction "      "degrees, negative is west"
+rconfig   real    bdyfrq                  derived                  max_domains    0       -        "bdyfrq"               "lateral boundary input frequency"      "seconds"
+rconfig   integer iswater                 derived                  max_domains    0       -        "iswater"              "land use index of water"      "index category"
+rconfig   integer isice                   derived                  max_domains    0       -        "isice"                "land use index of ice"        "index category"
+rconfig   integer isurban                 derived                  max_domains    0       -        "isurban"              "land use index for 'urban and built-up"     "index category"
+rconfig   integer isoilwater              derived                  max_domains    0       -        "isoilwater"           "land use index of water for soil"        "index category"
+rconfig   integer map_proj                derived                  max_domains    0       -        "map_proj"             "domain map projection"      "0=none (Cylindrical), 1=Lambert, 2=polar, 3=Mercator"
+rconfig   integer use_wps_input           derived                       1         0       -        "use_wps_input"        "0/1 flag, using wps input"      "0=no, 1=yes"
+rconfig   integer dfi_stage               derived                       1         3       -        "dfi_stage"            "current stage of DFI processing"      "0=DFI setup, 1=DFI backward integration, 2=DFI forward integration, 3=WRF forecast"
+rconfig   integer mp_physics_dfi          derived                  max_domains   -1       -        "mp_physics_dfi"       ""      "-1 = no DFI and so no need to allocate DFI moist and scalar variables, >0 = running with DFI, so allocate DFI moist and scalar variables appropriate for selected microphysics package"
+
+#
+# Single dummy declaration to define a nodyn dyn option
+state integer nodyn_dummy - dyn_nodyn -  -  -  "" "" ""      
+
+#
+#---------------------------------------------------------------------------------------------------------------------------------------
+# Package Declarations
+#                                               
+
+#key      package       associated                package          associated 4d scalars
+#         name          namelist choice           state vars
+
+#package   passivec1     chem_opt==0                  -             
+package   passiveqv     mp_physics==0                -             moist:qv
+package   kesslerscheme mp_physics==1                -             moist:qv,qc,qr
+package   linscheme     mp_physics==2                -             moist:qv,qc,qr,qi,qs,qg
+package   wsm3scheme    mp_physics==3                -             moist:qv,qc,qr
+package   wsm5scheme    mp_physics==4                -             moist:qv,qc,qr,qi,qs
+package   etampnew      mp_physics==5                -             moist:qv,qc,qr,qi,qs,qg;scalar:qt
+package   wsm6scheme    mp_physics==6                -             moist:qv,qc,qr,qi,qs,qg
+package   gsfcgcescheme mp_physics==7                -             moist:qv,qc,qr,qi,qs,qg
+package   thompson       mp_physics==8               -             moist:qv,qc,qr,qi,qs,qg;scalar:qni
+package   morr_two_moment  mp_physics==10            -             moist:qv,qc,qr,qi,qs,qg;scalar:qni,qns,qnr,qng
+
+package   nodfimoist        mp_physics_dfi==-1       -             -
+package   passiveqv_dfi     mp_physics_dfi==0        -             dfi_moist:dfi_qv
+package   kesslerscheme_dfi mp_physics_dfi==1        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr
+package   linscheme_dfi     mp_physics_dfi==2        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg
+package   wsm3scheme_dfi    mp_physics_dfi==3        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr
+package   wsm5scheme_dfi    mp_physics_dfi==4        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs
+package   etampnew_dfi      mp_physics_dfi==5        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qt
+package   wsm6scheme_dfi    mp_physics_dfi==6        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg
+package   gsfcgcescheme_dfi mp_physics_dfi==7        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg
+package   thompson_dfi      mp_physics_dfi==8        -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qni
+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   noprogn       progn==0                     -             -
+package   progndrop     progn==1                     -             scalar:qndrop;dfi_scalar:dfi_qndrop
+
+package   rrtmscheme    ra_lw_physics==1             -             -
+package   camlwscheme   ra_lw_physics==3             -             ozmixm:mth01,mth02,mth03,mth04,mth05,mth06,mth07,mth08,mth09,mth10,mth11,mth12;aerosolc:sul,sslt,dust1,dust2,dust3,dust4,ocpho,bcpho,ocphi,bcphi,bg,volc
+package   gfdllwscheme  ra_lw_physics==99            -             -
+package   heldsuarez    ra_lw_physics==31            -             -
+
+package   swradscheme   ra_sw_physics==1             -             -
+package   gsfcswscheme  ra_sw_physics==2             -             -
+package   camswscheme   ra_sw_physics==3             -             ozmixm:mth01,mth02,mth03,mth04,mth05,mth06,mth07,mth08,mth09,mth10,mth11,mth12;aerosolc:sul,sslt,dust1,dust2,dust3,dust4,ocpho,bcpho,ocphi,bcphi,bg,volc
+package   gfdlswscheme  ra_sw_physics==99            -             -
+
+package   sfclayscheme   sf_sfclay_physics==1        -             state:regime
+package   myjsfcscheme   sf_sfclay_physics==2        -             -
+package   gfssfcscheme   sf_sfclay_physics==3        -             -
+package   pxsfcscheme    sf_sfclay_physics==7        -             state:regime
+
+package   slabscheme     sf_surface_physics==1       -             -
+package   lsmscheme      sf_surface_physics==2       -             -
+package   ruclsmscheme   sf_surface_physics==3       -             -
+package   pxlsmscheme    sf_surface_physics==7       -             fdda2d:t2_ndg_new,q2_ndg_new,t2_ndg_old,q2_ndg_old
+
+package   ysuscheme      bl_pbl_physics==1           -             state:regime
+package   myjpblscheme   bl_pbl_physics==2           -             -
+package   gfsscheme      bl_pbl_physics==3           -             -
+package   acmpblscheme   bl_pbl_physics==7           -             state:regime
+package   mrfscheme      bl_pbl_physics==99          -             state:regime
+
+package   kfetascheme    cu_physics==1               -             -
+package   bmjscheme      cu_physics==2               -             -
+package   gdscheme       cu_physics==3               -             -
+package   sasscheme      cu_physics==4               -             -
+package   g3scheme       cu_physics==5               -             state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten
+package   kfscheme       cu_physics==99              -             -
+
+package   psufddagd      grid_fdda==1                -             fdda3d:u_ndg_old,v_ndg_old,t_ndg_old,q_ndg_old,ph_ndg_old,u_ndg_new,v_ndg_new,t_ndg_new,q_ndg_new,ph_ndg_new;fdda2d:mu_ndg_old,mu_ndg_new,t2_ndg_new,q2_ndg_new,t2_ndg_old,q2_ndg_old,sn_ndg_new,sn_ndg_old;state:rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten
+
+package   restofwrf      use_wps_input==0            -             -
+
+package   dfi_setup      dfi_stage==0                -             -
+package   dfi_bck        dfi_stage==1                -             -
+package   dfi_fwd        dfi_stage==2                -             -
+package   dfi_fst        dfi_stage==3                -             -
+
+#package   digifilter     dfi_opt==1                  -             dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qndrop,dfi_qni,dfi_qt,dfi_qns,dfi_qnr,dfi_qng;state:dfi_u,dfi_v,dfi_w,dfi_ph,dfi_phb,dfi_ph0,dfi_php,dfi_t,dfi_p,dfi_ww,dfi_mu,dfi_tke,dfi_pb,dfi_al,dfi_alt
+package   dfi_nodfi     dfi_opt==0                  -             -
+package   dfi_dfl       dfi_opt==1                  -             state:dfi_u,dfi_v,dfi_w,dfi_ph,dfi_phb,dfi_ph0,dfi_php,dfi_t,dfi_p,dfi_ww,dfi_mu,dfi_tke,dfi_pb,dfi_al,dfi_alt,dfi_TSLB,dfi_SMOIS,dfi_SNOW,dfi_SNOWH,dfi_CANWAT,dfi_SMFR3D,dfi_KEEPFR3DFLAG,dfi_TSK,dfi_SOILT1,dfi_TSNAV,dfi_SNOWC,dfi_QVG
+package   dfi_ddfi      dfi_opt==2                  -             state:dfi_u,dfi_v,dfi_w,dfi_ph,dfi_phb,dfi_ph0,dfi_php,dfi_t,dfi_p,dfi_ww,dfi_mu,dfi_tke,dfi_pb,dfi_al,dfi_alt,dfi_TSLB,dfi_SMOIS,dfi_SNOW,dfi_SNOWH,dfi_CANWAT,dfi_SMFR3D,dfi_KEEPFR3DFLAG,dfi_TSK,dfi_SOILT1,dfi_TSNAV,dfi_SNOWC,dfi_QVG
+package   dfi_tdfi      dfi_opt==3                  -             state:dfi_u,dfi_v,dfi_w,dfi_ph,dfi_phb,dfi_ph0,dfi_php,dfi_t,dfi_p,dfi_ww,dfi_mu,dfi_tke,dfi_pb,dfi_al,dfi_alt,dfi_TSLB,dfi_SMOIS,dfi_SNOW,dfi_SNOWH,dfi_CANWAT,dfi_SMFR3D,dfi_KEEPFR3DFLAG,dfi_TSK,dfi_SOILT1,dfi_TSNAV,dfi_SNOWC,dfi_QVG
+ifdef RUC_CLOUD
+package   realonly       use_wps_input==1            -             state:u_gc,v_gc,t_gc,rh_gc,ght_gc,p_gc,xlat_gc,xlong_gc,ht_gc,tsk_gc,tavgsfc,tmn_gc,pslv_gc,greenfrac,albedo12m,pd_gc,psfc_gc,intq_gc,pdhs,qv_gc,qr_gc,qc_gc,qs_gc,qi_gc,qg_gc,qni_gc
+endif
+ifndef RUC_CLOUD
+package   realonly       use_wps_input==1            -             state:u_gc,v_gc,t_gc,rh_gc,ght_gc,p_gc,xlat_gc,xlong_gc,ht_gc,tsk_gc,tavgsfc,tmn_gc,pslv_gc,greenfrac,albedo12m,pd_gc,psfc_gc,intq_gc,pdhs,qv_gc
+endif
+
+
+# only need to specify these once; not for every io_form* variable
+package   io_intio    io_form_restart==1                     -             -
+package   io_netcdf   io_form_restart==2                     -             -
+# Placeholders for additional packages (we can go beyond zzz
+# but that will entail modifying frame/module_io.F and frame/md_calls.m4)
+# Please note these are placeholders; HDF has not been implemented yet.
+package   io_hdf      io_form_restart==3                     -             -
+package   io_phdf5    io_form_restart==4                     -             -
+package   io_grib1    io_form_restart==5                     -             -
+package   io_mcel     io_form_restart==6                     -             -
+package   io_esmf     io_form_restart==7                     -             -
+package   io_yyy      io_form_restart==8                     -             -
+package   io_zzz      io_form_restart==9                     -             -
+package   io_grib2    io_form_restart==10                    -             -
+package   io_pnetcdf  io_form_restart==11                     -             -
+                                                
+#---------------------------------------------------------------------------------------------------------------------------------------
+## communications                                               
+
+### 8. Edit the Registry file and create a halo-exchange for x_1.
+
+# Halo Update Communications
+
+halo      HALO_EM_INIT_1 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,ph_1,ph_2
+halo      HALO_EM_INIT_2 dyn_em 48:t_1,t_2,mu_1,mu_2,tke_1,tke_2,ww,phb
+halo      HALO_EM_INIT_3 dyn_em 48:ph0,php,t_init,mub,mu0,p,al,alt,alb
+halo      HALO_EM_INIT_4 dyn_em 48:pb,h_diabatic,msftx,msfty,msfux,msfuy,msfvx,msfvy,msfvx_inv,f,e,sina,cosa,ht,potevp,snopcx,soiltb,xlat,xlong,xlat_u,xlat_v,xlong_u,xlong_v,clat,clong
+halo      HALO_EM_INIT_5 dyn_em 48:moist,chem,scalar
+halo      HALO_EM_VINTERP_UV_1 dyn_em 8:pd_gc,pb
+halo      HALO_EM_A dyn_em  8:ru,rv,rw,ww,php,alt,al,p,muu,muv,mut
+halo      HALO_EM_PHYS_A  dyn_em 4:u_2,v_2
+halo      HALO_EM_PHYS_PBL dyn_em        4:rublten,rvblten
+halo      HALO_EM_FDDA dyn_em            4:rundgdten,rvndgdten
+halo      HALO_EM_PHYS_DIFFUSION dyn_em  4:defor11,defor22,defor12,defor13,defor23,div,xkmv,xkmh,xkhv,xkhh,tke_1,tke_2
+halo      HALO_EM_TKE_ADVECT_3 dyn_em 24:tke_2
+halo      HALO_EM_TKE_ADVECT_5 dyn_em 48:tke_2
+halo      HALO_EM_TKE_A dyn_em 4:ph_2,phb
+halo      HALO_EM_TKE_B dyn_em 4:z,rdz,rdzw,zx,zy
+halo      HALO_EM_TKE_C dyn_em 8:u_2,v_2,z,zx,zy,rdz,rdzw,ustm
+halo      HALO_EM_TKE_D dyn_em 8:defor11,defor22,defor33,defor12,defor13,defor23,div
+halo      HALO_EM_TKE_E dyn_em 8:xkmv,xkmh,xkhv,xkhh,BN2,moist
+halo      HALO_EM_TKE_3 dyn_em   24:tke_1,tke_2
+halo      HALO_EM_TKE_5 dyn_em   48:tke_1,tke_2
+halo      HALO_EM_TKE_7 dyn_em   80:tke_1,tke_2
+halo      HALO_EM_TKE_F dyn_em   48:tke_1,tke_2
+halo      HALO_EM_TKE_OLD_E_5 dyn_em   48:tke_1
+halo      HALO_EM_TKE_OLD_E_7 dyn_em   80:tke_1
+halo      HALO_EM_B dyn_em 4:ph_2,al,p,t_1,t_save,u_save,v_save,mu_1,mu_2,mudf,php,alt,pb
+halo      HALO_EM_B2 dyn_em 4:ru_tend,rv_tend
+halo      HALO_EM_C dyn_em    4:u_2,v_2
+halo      HALO_EM_C2 dyn_em    4:ph_2,al,p,mu_2,muts,mudf
+halo      HALO_EM_D dyn_em    24:ru_m,rv_m,ww_m,mut
+halo      HALO_EM_D2_3 dyn_em 24:u_2,v_2,w_2,t_2,ph_2;24:moist,chem,scalar;4:mu_2,al
+halo      HALO_EM_D2_5 dyn_em 48:u_2,v_2,w_2,t_2,ph_2;24:moist,chem,scalar;4:mu_2,al
+halo      HALO_EM_D3_3 dyn_em 24:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,moist,chem,scalar;4:mu_1,mu_2
+halo      HALO_EM_D3_5 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,moist,chem,scalar;4:mu_1,mu_2
+halo      HALO_EM_E_3 dyn_em 24:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,;4:mu_1,mu_2
+halo      HALO_EM_E_5 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,;4:mu_1,mu_2
+halo      HALO_EM_MOIST_E_3 dyn_em 24:moist
+halo      HALO_EM_MOIST_E_5 dyn_em 48:moist
+halo      HALO_EM_MOIST_E_7 dyn_em 80:moist
+halo      HALO_CUP_G3_IN dyn_em 24:RTHFTEN,RQVFTEN,w_2
+halo      HALO_CUP_G3_OUT dyn_em 48:cugd_tten,cugd_qvten,cugd_ttens,cugd_qvtens,raincv
+halo      HALO_EM_CHEM_E_3 dyn_em 24:chem
+halo      HALO_EM_CHEM_E_5 dyn_em 48:chem
+halo      HALO_EM_CHEM_E_7 dyn_em 80:chem
+halo      HALO_EM_SCALAR_E_3 dyn_em 24:scalar
+halo      HALO_EM_SCALAR_E_5 dyn_em 48:scalar
+halo      HALO_EM_SCALAR_E_7 dyn_em 80:scalar
+halo      HALO_TOPOSHAD phys 24:ht_shad
+
+halo      HALO_EM_MOIST_OLD_E_3 dyn_em 24:moist_old
+halo      HALO_EM_MOIST_OLD_E_5 dyn_em 48:moist_old
+halo      HALO_EM_MOIST_OLD_E_7 dyn_em 80:moist_old
+halo      HALO_EM_CHEM_OLD_E_3 dyn_em 24:chem_old
+halo      HALO_EM_CHEM_OLD_E_5 dyn_em 48:chem_old
+halo      HALO_EM_CHEM_OLD_E_7 dyn_em 80:chem_old
+halo      HALO_EM_SCALAR_OLD_E_3 dyn_em 24:scalar_old
+halo      HALO_EM_SCALAR_OLD_E_5 dyn_em 48:scalar_old
+halo      HALO_EM_SCALAR_OLD_E_7 dyn_em 80:scalar_old
+
+halo      HALO_EM_FEEDBACK   dyn_em 48:ht
+halo      HALO_EM_HYDRO_UV   dyn_em 8:u_2,v_2
+
+halo      HALO_EM_COUPLE_A   dyn_em 24:mub,mu_1,mu_2
+period    PERIOD_EM_COUPLE_A dyn_em 2:mub,mu_1,mu_2
+halo      HALO_EM_COUPLE_B   dyn_em 48:ph_1,ph_2,w_1,w_2,t_1,t_2,u_1,u_2,v_1,v_2,\
+                                       moist,chem,scalar
+period    PERIOD_EM_COUPLE_B dyn_em 3:ph_1,ph_2,w_1,w_2,t_1,t_2,u_1,u_2,v_1,v_2,\
+                                       moist,chem,scalar
+
+# For moving nests
+halo      em_shift_halo_y  dyn_em 48:imask_nostag,imask_xstag,imask_ystag,imask_xystag,u_2,v_2,t_2
+halo      em_shift_halo_x  dyn_em 48:imask_nostag,imask_xstag,imask_ystag,imask_xystag,u_2,v_2,t_2
+
+# For observational nudging
+halo      HALO_OBS_NUDGE dyn_em 24:pb,p,uratx,vratx,tratx
+
+# Periodic Boundary Communications
+
+period    PERIOD_BDY_EM_INIT dyn_em 3:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,t_init,phb,ph0,php,pb,al,alt,alb,mu_1,mu_2,mub,mu0,ht,msftx,msfty,msfux,msfuy,msfvx,msfvy,msfvx_inv,sina,cosa,e,f
+period    PERIOD_BDY_EM_MOIST dyn_em 3:moist
+period    PERIOD_BDY_EM_CHEM dyn_em 3:chem
+period    PERIOD_BDY_EM_SCALAR dyn_em 3:scalar
+period    PERIOD_BDY_EM_MOIST2 dyn_em 3:moist
+period    PERIOD_BDY_EM_CHEM2 dyn_em 3:chem
+period    PERIOD_BDY_EM_SCALAR2 dyn_em 3:scalar
+period    PERIOD_BDY_EM_MOIST_OLD dyn_em 3:moist_old
+period    PERIOD_BDY_EM_CHEM_OLD dyn_em 3:chem_old
+period    PERIOD_BDY_EM_SCALAR_OLD dyn_em 3:scalar_old
+period    PERIOD_BDY_EM_TKE_OLD dyn_em 3:tke_1
+period    PERIOD_EM_HYDRO_UV dyn_em 1:u_2,v_2
+period    PERIOD_BDY_EM_A dyn_em 2:ru,rv,rw,ww,php,alt,p,muu,muv,mut,ph_2,al
+period    PERIOD_BDY_EM_A1  dyn_em 3:rdzw,rdz,z,zx,zy,ustm
+period    PERIOD_BDY_EM_PHY_BC dyn_em 2:rublten,rvblten,xkmh,xkmv,xkhh,xkhv,div,defor11,defor22,defor12,defor13,defor23,defor33,tke_2
+period    PERIOD_BDY_EM_FDDA_BC dyn_em 2:rundgdten,rvndgdten
+period    PERIOD_BDY_EM_B dyn_em 2:ru_tend,rv_tend,ph_2,al,p,t_1,t_save,u_save,v_save,mu_1,mu_2,mudf,php,alt,pb
+period    PERIOD_BDY_EM_B3 dyn_em 2:ph_2,al,p,mu_2,muts,mudf
+period    PERIOD_BDY_EM_B2 dyn_em 2:ru_tend,rv_tend
+period    PERIOD_BDY_EM_C dyn_em 2:u_2,u_save,v_2,v_save,t_2,t_save,muv,msfvx,msfvy,muu,msfux,msfuy,msfvx_inv
+period    PERIOD_BDY_EM_D dyn_em 3:u_2,v_2,w_2,t_2,ph_2,mu_2,tke_2
+period    PERIOD_BDY_EM_D3 dyn_em 3:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,mu_1,mu_2
+
+#
+#swap SWAP_ETAMP_NEW  dyn_em 1:dz8w,p_phy,pi_phy,rho,th_phy,moist,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,RAINNC,RAINNCV,SR,LOWLYR
+#swap SWAP_WSM3       dyn_em 1:th_phy,moist,w_2,rho,pi_phy,p_phy,dz8w,rainnc,rainncv
+#cycle CYCLE_TEST       dyn_em 1:xlong
+
+##
+
+# FDDA (Observational-nudging) Variables
+typedef fdob_type integer domain_tot   # total number of domains to apply obs-nudging
+typedef fdob_type integer IEODI        # end of obs data flag for current model step
+typedef fdob_type integer IWTSIG       # flag for nudging on pressure surfaces
+typedef fdob_type integer NSTAT        # number of obs stations used to nudge current model step
+typedef fdob_type integer NSTAW        # number of obs stations within current time window
+typedef fdob_type integer KTAUR        # restart model step
+typedef fdob_type integer SN_MAXCG     # coarse domain grid dimension in south-north coordinate
+typedef fdob_type integer WE_MAXCG     # coarse domain grid dimension in west-east coordinate
+typedef fdob_type integer SN_END       # ending north-south grid index
+typedef fdob_type integer LEVIDN(max_domains)   # level of nest
+typedef fdob_type real    WINDOW       # time window half-period for nudging (in minutes) 
+typedef fdob_type real    RTLAST       # time in hours of last obs used in current model step
+typedef fdob_type real    DATEND       # time in minutes after which data are asuumed to have ended
+typedef fdob_type real    RINFMN       # minimum radius of influence
+typedef fdob_type real    RINFMX       # maximum radius of influence
+typedef fdob_type real    PFREE        # pressure level (cb) where terrain effect becomes small
+typedef fdob_type real    DCON         # 1/DPSMX
+typedef fdob_type real    DPSMX        # max pres change (cb) allowed within infl range of surf obs 
+typedef fdob_type real    TFACI        # scale factor used for ramp-down in dynamic initialization
+typedef fdob_type real    KNOWN_LAT    # Latitude  of origin point (i,j)=(1,1)
+typedef fdob_type real    KNOWN_LON    # Longitude of origin point (i,j)=(1,1)
+
+# table entries are of the form
+#      <Table>  <Type>  <Sym>                <Dims>   <Use>   <NumTLev> <Stagger> <IO>     <DNAME>             <DESCRIP>     <UNITS>
+#Grid variables
+typedef fdob_type real    varobs               rz       -         1        -       -       "varobs"          "observational values in each variable"
+typedef fdob_type real    errf                 hz       -         1        -       -       "errf"            "errors between model and obs values"
+typedef fdob_type real    timeob               z        -         1        -       -       "timeob"          "model times for each observation"          "hours"
+typedef fdob_type real    nlevs_ob             z        -         1        -       -       "nlevs_ob"        "numbers of levels in sounding obs"
+typedef fdob_type real    lev_in_ob            z        -         1        -       -       "lev_in_ob"       "level in sounding-type obs"
+typedef fdob_type real    plfo                 z        -         1        -       -       "plfo"            "index for type of obs-platform"
+typedef fdob_type real    elevob               z        -         1        -       -       "elevob"          "elevation of observation"                  "meters"
+typedef fdob_type real    rio                  z        -         1        -       -       "rio"             "west-east grid coordinate"
+typedef fdob_type real    rjo                  z        -         1        -       -       "rjo"             "south-north grid coordinate"
+typedef fdob_type real    rko                  z        -         1        -       -       "rko"             "vertical grid coordinate"
+
+state fdob_type fdob - -
+
+# xpose variables for polar fft
+state    real   t_xxx          ikjx    -           1        -
+state    real   u_xxx          ikjx    -           1        X
+state    real   ru_xxx         ikjx    -           1        X
+state    real   v_xxx          ikjx    -           1        Y
+state    real   rv_xxx         ikjx    -           1        Y
+state    real   w_xxx          ikjx    -           1        Z
+state    real   ww_xxx         ikjx    -           1        Z
+state    real   ph_xxx         ikjx    -           1        Z
+state    real   dum_yyy        ikjy    -           1        -
+state    real   fourd_xxx      ikjx    -           1        -
+state    real   clat_xxx       ijx     -           1        -
+state    real   ht_xxx         ijx     -           1        -
+state    real   mf_xxx         ijx     -           1        -
+
+xpose XPOSE_POLAR_FILTER_TOPO dyn_em t_init,t_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_T  dyn_em t_2,t_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_U  dyn_em u_2,u_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_RU dyn_em ru_m,ru_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_V  dyn_em v_2,v_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_RV dyn_em rv_m,rv_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_W  dyn_em w_2,w_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_WW dyn_em ww_m,ww_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_PH dyn_em ph_2,ph_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_MOIST dyn_em moist,fourd_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_CHEM dyn_em chem,fourd_xxx,dum_yyy
+xpose XPOSE_POLAR_FILTER_SCALAR dyn_em scalar,fourd_xxx,dum_yyy
+
+##
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/Registry.bash
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/Registry.bash	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/Registry.bash	(revision 142)
@@ -0,0 +1,193 @@
+#! /bin/bash
+#
+# This is a script to generate FORTRAN code from registry
+#
+# A. Spiga - 17/03/08
+#
+
+
+#
+#
+#
+echo AUTOMATIC FILE GENERATION
+grep '#SAVEMARS2' Registry.EM | grep 'rhd' > fromregistry2
+grep '#SAVEMARS3' Registry.EM | grep 'rhd' > fromregistry3
+yeah2=$(awk 'END {print NR}' fromregistry2)
+yeah3=$(awk 'END {print NR}' fromregistry3)
+echo save ${yeah2} 2D arrays
+echo save ${yeah3} 3D arrays
+
+
+#
+#
+#
+\rm wrf_output_2d.h 2> /dev/null
+touch wrf_output_2d.h
+
+echo '!-------------------' >> test_include
+echo '! INCLUDE 'wrf_output_2d.h'' >> test_include
+echo '!-------------------' >> test_include
+if [ ${yeah2} -ne 0 ]
+then
+awk '{print "      INTEGER, PARAMETER :: ind_"$3" = " NR}' fromregistry2 >> test_include
+awk 'END {print "      INTEGER, PARAMETER :: n2d = " NR}' fromregistry2 >> test_include
+mv test_include wrf_output_2d.h
+else
+echo '           INTEGER, PARAMETER :: n2d = 1' >> test_include
+mv test_include wrf_output_2d.h
+fi
+
+\rm wrf_output_3d.h 2> /dev/null
+touch wrf_output_3d.h
+
+echo '!-------------------' >> test_include
+echo '! INCLUDE 'wrf_output_3d.h'' >> test_include
+echo '!-------------------' >> test_include
+if [ ${yeah3} -ne 0 ]
+then
+awk '{print "      INTEGER, PARAMETER :: ind_"$3" = " NR}' fromregistry3 >> test_include
+awk 'END {print "      INTEGER, PARAMETER :: n3d = " NR}' fromregistry3 >> test_include
+mv test_include wrf_output_3d.h
+else
+echo '           INTEGER, PARAMETER :: n3d = 1' >> test_include
+mv test_include wrf_output_3d.h
+fi
+
+
+#
+#
+#
+\rm fill_save_2d.F90 2> /dev/null
+if [ ${yeah2} -ne 0 ]
+then
+echo 'SUBROUTINE fill_save_2d( &' >> test_subroutine
+awk '{print $NF ",&"}' fromregistry2 >> test_subroutine
+echo 'ngrid,&' >> test_subroutine
+echo 'output_tab2d)' >> test_subroutine
+echo '   ' >> test_subroutine
+echo 'IMPLICIT NONE' >> test_subroutine
+echo '   ' >> test_subroutine
+echo 'include "wrf_output_2d.h"' >> test_subroutine
+#echo 'include "dimension.h"' >> test_subroutine
+echo '   ' >> test_subroutine
+echo 'INTEGER :: ngrid' >> test_subroutine
+awk '{print "REAL, DIMENSION(ngrid) :: " $NF}' fromregistry2 >> test_subroutine
+echo 'REAL, DIMENSION(ngrid,n2d) :: output_tab2d' >> test_subroutine
+echo '   ' >> test_subroutine
+awk '{print "output_tab2d(:,ind_"$3")="$NF"(:)"}' fromregistry2 >> test_subroutine
+echo '   ' >> test_subroutine
+echo 'END SUBROUTINE fill_save_2d' >> test_subroutine
+mv test_subroutine fill_save_2d.F90
+fi
+
+\rm fill_save_3d.F90 2> /dev/null
+if [ ${yeah3} -ne 0 ]
+then
+echo 'SUBROUTINE fill_save_3d( &' >> test_subroutine
+awk '{print $NF ",&"}' fromregistry3 >> test_subroutine
+echo 'ngrid,&' >> test_subroutine
+echo 'nlayer,&' >> test_subroutine
+echo 'output_tab3d)' >> test_subroutine
+echo '   ' >> test_subroutine
+echo 'IMPLICIT NONE' >> test_subroutine
+echo '   ' >> test_subroutine
+echo 'include "wrf_output_3d.h"' >> test_subroutine
+#echo 'include "dimension.h"' >> test_subroutine
+echo '   ' >> test_subroutine
+echo 'INTEGER :: ngrid' >> test_subroutine
+echo 'INTEGER :: nlayer' >> test_subroutine
+awk '{print "REAL, DIMENSION(ngrid,nlayer) :: " $NF}' fromregistry3 >> test_subroutine
+echo 'REAL, DIMENSION(ngrid,nlayer,n3d) :: output_tab3d' >> test_subroutine
+echo '   ' >> test_subroutine
+awk '{print "output_tab3d(:,:,ind_"$3")="$NF"(:,:)"}' fromregistry3 >> test_subroutine
+echo '   ' >> test_subroutine
+echo 'END SUBROUTINE fill_save_3d' >> test_subroutine
+mv test_subroutine fill_save_3d.F90
+fi
+
+
+#
+#
+#
+\rm fill_save.inc 2> /dev/null
+
+if [ ${yeah2} -ne 0 ]
+then
+echo '      CALL fill_save_2d(' >> fill_save.inc
+awk '{print "     . "$NF ","}' fromregistry2 >> fill_save.inc
+echo '     . ngrid,' >> fill_save.inc
+echo '     . output_tab2d)' >> fill_save.inc
+fi
+
+if [ ${yeah3} -ne 0 ]
+then
+echo '      CALL fill_save_3d(' >> fill_save.inc
+awk '{print "     . "$NF ","}' fromregistry3 >> fill_save.inc
+echo '     . ngrid,' >> fill_save.inc
+echo '     . nlayer,' >> fill_save.inc
+echo '     . output_tab3d)' >> fill_save.inc
+fi
+
+
+
+#
+#
+#
+\rm module_lmd_driver_output1.inc 2> /dev/null
+touch module_lmd_driver_output1.inc
+\rm module_lmd_driver_output2.inc 2> /dev/null
+touch module_lmd_driver_output2.inc
+\rm module_lmd_driver_output3.inc 2> /dev/null
+touch module_lmd_driver_output3.inc
+
+echo 'REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT)  :: &' >> module_lmd_driver_output2.inc
+
+if [ ${yeah2} -ne 0 ]
+then
+awk '{print "       " $3 ",&"}' fromregistry2 >> module_lmd_driver_output1.inc
+more module_lmd_driver_output1.inc >> module_lmd_driver_output2.inc
+awk '{print $3"(i,j) = output_tab2d(subs,ind_"$3")"}' fromregistry2 >> module_lmd_driver_output3.inc
+fi
+
+echo '   PSFC,TSK' >> module_lmd_driver_output2.inc
+echo 'REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(OUT)  :: &' >> module_lmd_driver_output2.inc
+
+if [ ${yeah3} -ne 0 ]
+then
+awk '{print "        " $3 ",&"}' fromregistry3 >> module_lmd_driver_output1.inc
+awk '{print "        " $3 ",&"}' fromregistry3 >> module_lmd_driver_output2.inc
+echo 'DO k = kps,kpe' >> module_lmd_driver_output3.inc
+awk '{print $3"(i,k,j) = output_tab3d(subs,k,ind_"$3")"}' fromregistry3 >> module_lmd_driver_output3.inc
+echo 'ENDDO' >> module_lmd_driver_output3.inc
+fi
+
+echo '   RTHBLTEN,RUBLTEN,RVBLTEN' >> module_lmd_driver_output2.inc
+
+
+
+#
+#
+#
+\rm module_lmd_driver_output4.inc 2> /dev/null
+touch module_lmd_driver_output4.inc
+awk '{print "  &    ,"$3"=grid%"$3"   &"}' fromregistry2 >> module_lmd_driver_output4.inc
+awk '{print "  &    ,"$3"=grid%"$3"   &"}' fromregistry3 >> module_lmd_driver_output4.inc
+
+
+
+#
+#
+#
+\rm fromregistry2
+\rm fromregistry3
+mv module_lmd_driver_output?.inc ../inc/
+\rm ../mars_lmd/libf/phymars/fill_save_?d.F90 2> /dev/null
+\rm ../mars_lmd/libf/phymars/wrf_output_?d.h 2> /dev/null
+mv fill_save.inc fill_save_?d.F90 wrf_output_?d.h ../mars_lmd/libf/phymars/
+
+#
+#
+#
+echo END of AUTOMATIC FILE GENERATION
+echo I guess you modified 'Registry.EM' ... 
+echo ... so remove the file 'Registry' and recompile the model
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench12proc
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench12proc	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench12proc	(revision 142)
@@ -0,0 +1,55 @@
+taskid: 0 hostname: auric
+ Quilting with   1 groups of   0 I/O tasks.
+ Namelist dfi_control not found in namelist.input. Using registry defaults for variables in dfi_control
+  Ntasks in X             3 , ntasks in Y             4
+ WRF V3.0.1.1 MODEL
+  *************************************
+  Parent domain
+  ids,ide,jds,jde             1          157            1          157
+  ims,ime,jms,jme            -4           59           -4           46
+  ips,ipe,jps,jpe             1           52            1           39
+  *************************************
+ DYNAMICS OPTION: Eulerian Mass Coordinate
+   med_initialdata_input: calling input_model_input
+  STEPRA,STEPCU,STEPBL        17760            1            1
+Timing for Writing wrfout_d01_2024-01-01_00:00:00 for domain        1:    1.38000 elapsed seconds.
+ WRF NUMBER OF TILES =   1
+Timing for main: time 2024-01-01_00:00:00 on domain   1:    8.88800 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:01 on domain   1:    2.27500 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:01 on domain   1:    2.21200 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:02 on domain   1:    2.39500 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:02 on domain   1:    2.23700 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:03 on domain   1:    2.23500 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:03 on domain   1:    2.21800 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:04 on domain   1:    2.17900 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:04 on domain   1:    2.30400 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:05 on domain   1:    2.27200 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:05 on domain   1:    2.46300 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:06 on domain   1:    2.20900 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:06 on domain   1:    2.17900 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:07 on domain   1:    2.14500 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:07 on domain   1:    2.22500 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:08 on domain   1:    2.11900 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:08 on domain   1:    2.23100 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:09 on domain   1:    2.20200 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:09 on domain   1:    2.30900 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:10 on domain   1:    2.16000 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:10 on domain   1:    2.17100 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:11 on domain   1:    2.28300 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:11 on domain   1:    2.24600 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:12 on domain   1:    2.11400 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:12 on domain   1:    2.10000 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:13 on domain   1:    2.20000 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:13 on domain   1:    2.24700 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:14 on domain   1:    2.24400 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:14 on domain   1:    2.14500 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:15 on domain   1:    2.21400 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:15 on domain   1:    2.73700 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:16 on domain   1:    2.13500 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:16 on domain   1:    2.18700 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:17 on domain   1:    2.45800 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:17 on domain   1:    2.21000 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:18 on domain   1:    2.19400 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:18 on domain   1:    2.41900 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:19 on domain   1:    2.27700 elapsed seconds.
+Timing for main: time 2024-01-01_00:00:19 on domain   1:    2.19700 elapsed seconds.
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench2proc
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench2proc	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench2proc	(revision 142)
@@ -0,0 +1,200 @@
+taskid: 0 hostname: auric
+ Quilting with   1 groups of   0 I/O tasks.
+ Namelist dfi_control not found in namelist.input. Using registry defaults for variables in dfi_control
+  Ntasks in X             1 , ntasks in Y             2
+ WRF V3.0.1.1 MODEL
+  *************************************
+  Parent domain
+  ids,ide,jds,jde             1          153            1          153
+  ims,ime,jms,jme            -4          158           -4           83
+  ips,ipe,jps,jpe             1          153            1           76
+  *************************************
+ DYNAMICS OPTION: Eulerian Mass Coordinate
+   med_initialdata_input: calling input_model_input
+  STEPRA,STEPCU,STEPBL        17760            1            1
+Timing for Writing wrfout_d01_2024-01-01_12:00:00 for domain        1:    1.54700 elapsed seconds.
+ WRF NUMBER OF TILES =   1
+Timing for main: time 2024-01-01_12:00:00 on domain   1:   31.75500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:01 on domain   1:    4.03600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:01 on domain   1:    4.04900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:02 on domain   1:    4.02600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:02 on domain   1:    4.05200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:03 on domain   1:    4.00200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:03 on domain   1:    4.01800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:04 on domain   1:    4.08500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:04 on domain   1:    4.02900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:05 on domain   1:    4.07000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:05 on domain   1:    4.02400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:06 on domain   1:    4.03800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:06 on domain   1:    4.05700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:07 on domain   1:    3.99400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:07 on domain   1:    4.07800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:08 on domain   1:    4.02700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:08 on domain   1:    4.07200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:09 on domain   1:    4.03100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:09 on domain   1:    4.03900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:10 on domain   1:    4.06800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:10 on domain   1:    4.01800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:11 on domain   1:    4.06300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:11 on domain   1:    4.03800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:12 on domain   1:    4.06000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:12 on domain   1:    4.01500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:13 on domain   1:    4.01700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:13 on domain   1:    4.07800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:14 on domain   1:    4.02400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:14 on domain   1:    4.04300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:15 on domain   1:    4.02400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:15 on domain   1:    4.05300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:16 on domain   1:    4.01900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:16 on domain   1:    4.03700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:17 on domain   1:    4.07500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:17 on domain   1:    4.04000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:18 on domain   1:    4.06900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:18 on domain   1:    4.03000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:19 on domain   1:    4.04600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:19 on domain   1:    4.07200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:20 on domain   1:    3.88600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:20 on domain   1:    3.98900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:21 on domain   1:    3.83900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:21 on domain   1:    3.90600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:22 on domain   1:    3.90600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:22 on domain   1:    3.97400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:23 on domain   1:    4.08200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:23 on domain   1:    4.03000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:24 on domain   1:    4.05900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:24 on domain   1:    4.02000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:25 on domain   1:    4.04200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:25 on domain   1:    4.06900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:26 on domain   1:    4.00000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:26 on domain   1:    4.07400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:27 on domain   1:    4.02700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:27 on domain   1:    4.07000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:28 on domain   1:    3.99900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:28 on domain   1:    4.04200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:29 on domain   1:    4.06800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:29 on domain   1:    4.03300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:30 on domain   1:    4.03800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:30 on domain   1:    4.03300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:31 on domain   1:    4.06200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:31 on domain   1:    4.01200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:32 on domain   1:    4.02700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:32 on domain   1:    4.08300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:33 on domain   1:    4.02900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:33 on domain   1:    4.08200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:34 on domain   1:    4.01400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:34 on domain   1:    4.05800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:35 on domain   1:    4.05400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:35 on domain   1:    3.98900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:36 on domain   1:    4.07100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:36 on domain   1:    4.03000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:37 on domain   1:    4.06000 elapsed seconds.
+Timing for Writing wrfout_d01_2024-01-01_12:00:37 for domain        1:    0.90800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:37 on domain   1:    4.94100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:38 on domain   1:    4.06300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:38 on domain   1:    4.03400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:39 on domain   1:    3.99300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:39 on domain   1:    4.08700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:40 on domain   1:    4.02000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:40 on domain   1:    4.07200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:41 on domain   1:    3.99800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:41 on domain   1:    4.11700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:42 on domain   1:    4.03600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:42 on domain   1:    4.00000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:43 on domain   1:    4.08000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:43 on domain   1:    4.03000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:44 on domain   1:    4.07200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:44 on domain   1:    3.99100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:45 on domain   1:    4.04100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:45 on domain   1:    4.06000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:46 on domain   1:    4.03100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:46 on domain   1:    4.07100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:47 on domain   1:    4.01700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:47 on domain   1:    4.06800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:48 on domain   1:    4.04100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:48 on domain   1:    4.01700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:49 on domain   1:    4.08100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:49 on domain   1:    4.01400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:50 on domain   1:    4.07100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:50 on domain   1:    4.03100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:51 on domain   1:    4.05900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:51 on domain   1:    4.03700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:52 on domain   1:    4.00400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:52 on domain   1:    4.07900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:53 on domain   1:    4.04000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:53 on domain   1:    4.07300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:54 on domain   1:    4.00500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:54 on domain   1:    4.04600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:55 on domain   1:    4.04200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:55 on domain   1:    4.00300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:56 on domain   1:    4.07500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:56 on domain   1:    4.03700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:57 on domain   1:    4.08200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:57 on domain   1:    4.00100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:58 on domain   1:    4.04700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:58 on domain   1:    4.05900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:59 on domain   1:    4.03600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:59 on domain   1:    4.00300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:00 on domain   1:    3.83600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:00 on domain   1:    3.90900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:01 on domain   1:    3.88400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:01 on domain   1:    3.83400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:02 on domain   1:    4.06300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:02 on domain   1:    4.03200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:03 on domain   1:    4.06900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:03 on domain   1:    3.99400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:04 on domain   1:    4.05600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:04 on domain   1:    4.07800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:05 on domain   1:    4.03100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:05 on domain   1:    4.07500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:06 on domain   1:    4.01500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:06 on domain   1:    4.06200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:07 on domain   1:    4.04500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:07 on domain   1:    3.99600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:08 on domain   1:    4.07900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:08 on domain   1:    4.02000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:09 on domain   1:    4.06700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:09 on domain   1:    4.01200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:10 on domain   1:    4.06600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:10 on domain   1:    4.03400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:11 on domain   1:    4.01100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:11 on domain   1:    4.07000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:12 on domain   1:    4.04900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:12 on domain   1:    4.08100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:13 on domain   1:    4.00100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:13 on domain   1:    4.04600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:14 on domain   1:    4.04700 elapsed seconds.
+Timing for Writing wrfout_d01_2024-01-01_12:01:14 for domain        1:    0.91100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:14 on domain   1:    5.60600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:15 on domain   1:    4.04800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:15 on domain   1:    4.04200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:16 on domain   1:    4.09000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:16 on domain   1:    4.02700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:17 on domain   1:    4.08100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:17 on domain   1:    4.04200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:18 on domain   1:    4.05500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:18 on domain   1:    4.13700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:19 on domain   1:    4.03400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:19 on domain   1:    4.08800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:20 on domain   1:    4.01300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:20 on domain   1:    4.08800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:21 on domain   1:    4.04700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:21 on domain   1:    4.05300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:22 on domain   1:    4.04300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:22 on domain   1:    4.04800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:23 on domain   1:    4.08000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:23 on domain   1:    4.03800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:24 on domain   1:    4.05000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:24 on domain   1:    4.04800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:25 on domain   1:    4.03800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:25 on domain   1:    4.07000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:26 on domain   1:    4.00200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:26 on domain   1:    4.09000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:27 on domain   1:    4.02800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:27 on domain   1:    4.06600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:28 on domain   1:    4.03700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:28 on domain   1:    4.03800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:29 on domain   1:    4.08100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:29 on domain   1:    4.01700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:30 on domain   1:    4.07600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:30 on domain   1:    4.05200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:31 on domain   1:    4.06200 elapsed seconds.
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench4proc
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench4proc	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench4proc	(revision 142)
@@ -0,0 +1,200 @@
+taskid: 0 hostname: auric
+ Quilting with   1 groups of   0 I/O tasks.
+ Namelist dfi_control not found in namelist.input. Using registry defaults for variables in dfi_control
+  Ntasks in X             2 , ntasks in Y             2
+ WRF V3.0.1.1 MODEL
+  *************************************
+  Parent domain
+  ids,ide,jds,jde             1          153            1          153
+  ims,ime,jms,jme            -4           83           -4           83
+  ips,ipe,jps,jpe             1           76            1           76
+  *************************************
+ DYNAMICS OPTION: Eulerian Mass Coordinate
+   med_initialdata_input: calling input_model_input
+  STEPRA,STEPCU,STEPBL        17760            1            1
+Timing for Writing wrfout_d01_2024-01-01_12:00:00 for domain        1:    1.99800 elapsed seconds.
+ WRF NUMBER OF TILES =   1
+Timing for main: time 2024-01-01_12:00:00 on domain   1:   17.65900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:01 on domain   1:    2.62000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:01 on domain   1:    2.67700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:02 on domain   1:    2.76500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:02 on domain   1:    2.75000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:03 on domain   1:    2.73600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:03 on domain   1:    2.79000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:04 on domain   1:    2.85200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:04 on domain   1:    2.73200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:05 on domain   1:    2.74100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:05 on domain   1:    2.76800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:06 on domain   1:    2.74500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:06 on domain   1:    2.74300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:07 on domain   1:    2.71500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:07 on domain   1:    2.77900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:08 on domain   1:    2.74000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:08 on domain   1:    2.73800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:09 on domain   1:    2.77700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:09 on domain   1:    2.72400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:10 on domain   1:    2.73600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:10 on domain   1:    2.75300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:11 on domain   1:    2.75900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:11 on domain   1:    2.74000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:12 on domain   1:    2.73000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:12 on domain   1:    2.75700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:13 on domain   1:    2.73800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:13 on domain   1:    2.74300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:14 on domain   1:    2.75900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:14 on domain   1:    2.77300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:15 on domain   1:    2.71800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:15 on domain   1:    2.74000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:16 on domain   1:    2.77400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:16 on domain   1:    2.74200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:17 on domain   1:    2.73400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:17 on domain   1:    2.75700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:18 on domain   1:    2.76100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:18 on domain   1:    2.72600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:19 on domain   1:    2.74400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:19 on domain   1:    2.78100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:20 on domain   1:    2.72200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:20 on domain   1:    2.72600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:21 on domain   1:    2.76600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:21 on domain   1:    2.75400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:22 on domain   1:    2.74500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:22 on domain   1:    2.72700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:23 on domain   1:    2.76900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:23 on domain   1:    2.73600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:24 on domain   1:    2.75000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:24 on domain   1:    2.77300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:25 on domain   1:    2.74400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:25 on domain   1:    2.74100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:26 on domain   1:    2.71100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:26 on domain   1:    2.77200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:27 on domain   1:    2.74300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:27 on domain   1:    2.73700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:28 on domain   1:    2.76600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:28 on domain   1:    2.72100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:29 on domain   1:    2.74500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:29 on domain   1:    2.74600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:30 on domain   1:    2.76000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:30 on domain   1:    2.73200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:31 on domain   1:    2.73000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:31 on domain   1:    2.75300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:32 on domain   1:    2.74300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:32 on domain   1:    2.73800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:33 on domain   1:    2.75200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:33 on domain   1:    2.78000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:34 on domain   1:    2.72100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:34 on domain   1:    2.73300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:35 on domain   1:    2.77000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:35 on domain   1:    2.74000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:36 on domain   1:    2.72700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:36 on domain   1:    2.75100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:37 on domain   1:    2.76500 elapsed seconds.
+Timing for Writing wrfout_d01_2024-01-01_12:00:37 for domain        1:    1.09000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:37 on domain   1:    3.82300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:38 on domain   1:    2.75300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:38 on domain   1:    2.77100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:39 on domain   1:    2.72100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:39 on domain   1:    2.75100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:40 on domain   1:    2.77800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:40 on domain   1:    2.74800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:41 on domain   1:    2.74500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:41 on domain   1:    2.75000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:42 on domain   1:    2.75400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:42 on domain   1:    2.90500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:43 on domain   1:    2.73800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:43 on domain   1:    2.77800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:44 on domain   1:    2.73700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:44 on domain   1:    2.70400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:45 on domain   1:    2.77600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:45 on domain   1:    2.74900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:46 on domain   1:    2.73700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:46 on domain   1:    2.73800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:47 on domain   1:    2.77000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:47 on domain   1:    2.72700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:48 on domain   1:    2.73900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:48 on domain   1:    2.76900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:49 on domain   1:    2.74200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:49 on domain   1:    2.74200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:50 on domain   1:    2.72400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:50 on domain   1:    2.78300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:51 on domain   1:    2.72600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:51 on domain   1:    2.74400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:52 on domain   1:    2.78600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:52 on domain   1:    2.72500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:53 on domain   1:    2.74800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:53 on domain   1:    2.75400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:54 on domain   1:    2.76700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:54 on domain   1:    2.72800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:55 on domain   1:    2.72500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:55 on domain   1:    2.76100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:56 on domain   1:    2.63400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:56 on domain   1:    2.61500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:57 on domain   1:    2.63500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:57 on domain   1:    2.73600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:58 on domain   1:    2.61700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:58 on domain   1:    2.63600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:59 on domain   1:    2.82300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:59 on domain   1:    2.74900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:00 on domain   1:    2.74300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:00 on domain   1:    2.74800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:01 on domain   1:    2.76900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:01 on domain   1:    2.72100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:02 on domain   1:    2.73600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:02 on domain   1:    2.77500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:03 on domain   1:    2.74700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:03 on domain   1:    2.73200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:04 on domain   1:    2.75700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:04 on domain   1:    2.77000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:05 on domain   1:    2.73700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:05 on domain   1:    2.74400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:06 on domain   1:    2.78600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:06 on domain   1:    2.74200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:07 on domain   1:    2.71000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:07 on domain   1:    2.75800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:08 on domain   1:    2.76200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:08 on domain   1:    2.74000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:09 on domain   1:    2.74600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:09 on domain   1:    2.77800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:10 on domain   1:    2.73500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:10 on domain   1:    3.04700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:11 on domain   1:    2.83100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:11 on domain   1:    2.75400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:12 on domain   1:    2.73100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:12 on domain   1:    2.72100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:13 on domain   1:    2.78200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:13 on domain   1:    2.74400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:14 on domain   1:    2.72200 elapsed seconds.
+Timing for Writing wrfout_d01_2024-01-01_12:01:14 for domain        1:    1.09400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:14 on domain   1:    4.18900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:15 on domain   1:    2.72500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:15 on domain   1:    2.74800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:16 on domain   1:    2.78300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:16 on domain   1:    2.76100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:17 on domain   1:    2.74300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:17 on domain   1:    2.74500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:18 on domain   1:    2.78300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:18 on domain   1:    2.73900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:19 on domain   1:    2.73700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:19 on domain   1:    2.88800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:20 on domain   1:    2.74500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:20 on domain   1:    2.74300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:21 on domain   1:    2.75900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:21 on domain   1:    2.76800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:22 on domain   1:    2.91100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:22 on domain   1:    2.73700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:23 on domain   1:    2.79000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:23 on domain   1:    2.74600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:24 on domain   1:    2.74300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:24 on domain   1:    2.76600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:25 on domain   1:    2.75600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:25 on domain   1:    2.95700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:26 on domain   1:    2.75700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:26 on domain   1:    2.76800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:27 on domain   1:    2.75200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:27 on domain   1:    2.74500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:28 on domain   1:    2.78000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:28 on domain   1:    2.75300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:29 on domain   1:    2.74400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:29 on domain   1:    2.76300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:30 on domain   1:    2.77500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:30 on domain   1:    2.73900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:31 on domain   1:    2.72700 elapsed seconds.
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench8proc
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench8proc	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/bench8proc	(revision 142)
@@ -0,0 +1,200 @@
+taskid: 0 hostname: auric
+ Quilting with   1 groups of   0 I/O tasks.
+ Namelist dfi_control not found in namelist.input. Using registry defaults for variables in dfi_control
+  Ntasks in X             2 , ntasks in Y             4
+ WRF V3.0.1.1 MODEL
+  *************************************
+  Parent domain
+  ids,ide,jds,jde             1          153            1          153
+  ims,ime,jms,jme            -4           83           -4           45
+  ips,ipe,jps,jpe             1           76            1           38
+  *************************************
+ DYNAMICS OPTION: Eulerian Mass Coordinate
+   med_initialdata_input: calling input_model_input
+  STEPRA,STEPCU,STEPBL        17760            1            1
+Timing for Writing wrfout_d01_2024-01-01_12:00:00 for domain        1:    2.41000 elapsed seconds.
+ WRF NUMBER OF TILES =   1
+Timing for main: time 2024-01-01_12:00:00 on domain   1:   11.95300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:01 on domain   1:    2.36100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:01 on domain   1:    2.17600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:02 on domain   1:    2.28800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:02 on domain   1:    2.33000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:03 on domain   1:    2.39500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:03 on domain   1:    2.29100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:04 on domain   1:    2.32000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:04 on domain   1:    2.27200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:05 on domain   1:    2.46300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:05 on domain   1:    2.32200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:06 on domain   1:    2.28700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:06 on domain   1:    2.32200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:07 on domain   1:    2.33700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:07 on domain   1:    2.36100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:08 on domain   1:    2.31900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:08 on domain   1:    2.21900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:09 on domain   1:    2.38500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:09 on domain   1:    2.36600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:10 on domain   1:    2.28300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:10 on domain   1:    2.29000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:11 on domain   1:    2.34400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:11 on domain   1:    2.27800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:12 on domain   1:    2.28400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:12 on domain   1:    2.35100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:13 on domain   1:    2.39100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:13 on domain   1:    2.38900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:14 on domain   1:    2.30700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:14 on domain   1:    2.19400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:15 on domain   1:    2.18300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:15 on domain   1:    2.30500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:16 on domain   1:    2.35400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:16 on domain   1:    2.30000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:17 on domain   1:    2.29300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:17 on domain   1:    2.26400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:18 on domain   1:    2.30400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:18 on domain   1:    2.29600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:19 on domain   1:    2.35200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:19 on domain   1:    2.32100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:20 on domain   1:    2.30300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:20 on domain   1:    2.23100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:21 on domain   1:    2.31900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:21 on domain   1:    2.22800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:22 on domain   1:    2.33500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:22 on domain   1:    2.20600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:23 on domain   1:    2.29100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:23 on domain   1:    2.28100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:24 on domain   1:    2.30300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:24 on domain   1:    2.31700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:25 on domain   1:    2.27400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:25 on domain   1:    2.22500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:26 on domain   1:    2.28100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:26 on domain   1:    2.39300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:27 on domain   1:    2.30400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:27 on domain   1:    2.32400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:28 on domain   1:    2.27100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:28 on domain   1:    2.28400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:29 on domain   1:    2.30000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:29 on domain   1:    2.29300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:30 on domain   1:    2.38300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:30 on domain   1:    2.29700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:31 on domain   1:    2.34700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:31 on domain   1:    2.19100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:32 on domain   1:    2.29200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:32 on domain   1:    2.31900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:33 on domain   1:    2.30100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:33 on domain   1:    2.27400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:34 on domain   1:    2.28400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:34 on domain   1:    2.34500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:35 on domain   1:    2.34400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:35 on domain   1:    2.30300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:36 on domain   1:    2.24900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:36 on domain   1:    2.40300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:37 on domain   1:    2.28400 elapsed seconds.
+Timing for Writing wrfout_d01_2024-01-01_12:00:37 for domain        1:    1.17400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:37 on domain   1:    3.44800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:38 on domain   1:    2.32200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:38 on domain   1:    2.38900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:39 on domain   1:    2.34200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:39 on domain   1:    2.34700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:40 on domain   1:    2.35700 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:40 on domain   1:    2.31900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:41 on domain   1:    2.21500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:41 on domain   1:    2.33400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:42 on domain   1:    2.29500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:42 on domain   1:    2.27800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:43 on domain   1:    2.22900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:43 on domain   1:    2.36200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:44 on domain   1:    2.30400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:44 on domain   1:    2.38800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:45 on domain   1:    2.30300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:45 on domain   1:    2.36800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:46 on domain   1:    2.26400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:46 on domain   1:    2.34200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:47 on domain   1:    2.24200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:47 on domain   1:    2.29000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:48 on domain   1:    2.33500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:48 on domain   1:    2.35500 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:49 on domain   1:    2.37200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:49 on domain   1:    2.27800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:50 on domain   1:    2.36000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:50 on domain   1:    2.35600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:51 on domain   1:    2.26300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:51 on domain   1:    2.28400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:52 on domain   1:    2.34900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:52 on domain   1:    2.33100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:53 on domain   1:    2.38400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:53 on domain   1:    2.40200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:54 on domain   1:    2.34400 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:54 on domain   1:    2.35900 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:55 on domain   1:    2.20000 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:55 on domain   1:    2.30100 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:56 on domain   1:    2.09600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:56 on domain   1:    2.15600 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:57 on domain   1:    2.10200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:57 on domain   1:    2.25300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:58 on domain   1:    2.10800 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:58 on domain   1:    2.09300 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:59 on domain   1:    2.06200 elapsed seconds.
+Timing for main: time 2024-01-01_12:00:59 on domain   1:    2.26400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:00 on domain   1:    2.37800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:00 on domain   1:    2.21800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:01 on domain   1:    2.35400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:01 on domain   1:    2.27800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:02 on domain   1:    2.34600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:02 on domain   1:    2.27800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:03 on domain   1:    2.34100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:03 on domain   1:    2.27100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:04 on domain   1:    2.35700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:04 on domain   1:    2.29400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:05 on domain   1:    2.28300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:05 on domain   1:    2.29700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:06 on domain   1:    2.30100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:06 on domain   1:    2.27600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:07 on domain   1:    2.30500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:07 on domain   1:    2.24600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:08 on domain   1:    2.63100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:08 on domain   1:    2.23600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:09 on domain   1:    2.33600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:09 on domain   1:    2.33000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:10 on domain   1:    2.48000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:10 on domain   1:    2.23700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:11 on domain   1:    2.30300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:11 on domain   1:    2.35900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:12 on domain   1:    2.36700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:12 on domain   1:    2.41500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:13 on domain   1:    2.25800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:13 on domain   1:    2.36800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:14 on domain   1:    2.28100 elapsed seconds.
+Timing for Writing wrfout_d01_2024-01-01_12:01:14 for domain        1:    1.43500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:14 on domain   1:    3.98400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:15 on domain   1:    2.33700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:15 on domain   1:    2.27800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:16 on domain   1:    2.29400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:16 on domain   1:    2.23900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:17 on domain   1:    2.34400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:17 on domain   1:    2.27300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:18 on domain   1:    2.33100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:18 on domain   1:    2.30600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:19 on domain   1:    2.25600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:19 on domain   1:    2.29600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:20 on domain   1:    2.28900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:20 on domain   1:    2.33000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:21 on domain   1:    2.36600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:21 on domain   1:    2.35500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:22 on domain   1:    2.28200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:22 on domain   1:    2.34600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:23 on domain   1:    2.23200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:23 on domain   1:    2.36500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:24 on domain   1:    2.31900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:24 on domain   1:    2.40200 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:25 on domain   1:    2.38300 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:25 on domain   1:    2.33900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:26 on domain   1:    2.34600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:26 on domain   1:    2.30800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:27 on domain   1:    2.37700 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:27 on domain   1:    2.30800 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:28 on domain   1:    2.27900 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:28 on domain   1:    2.32000 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:29 on domain   1:    2.38400 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:29 on domain   1:    2.30500 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:30 on domain   1:    2.30100 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:30 on domain   1:    2.34600 elapsed seconds.
+Timing for main: time 2024-01-01_12:01:31 on domain   1:    2.34000 elapsed seconds.
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf	(revision 142)
@@ -0,0 +1,525 @@
+# configure.wrf
+#
+# This file was automatically generated by the configure script in the
+# top level directory. You may make changes to the settings in this
+# file but be aware they will be overwritten each time you run configure.
+# Ordinarily, it is necessary to run configure once, when the code is
+# first installed.
+#
+# To permanently change options, change the settings for your platform
+# in the file arch/configure.defaults then rerun configure.
+#
+SHELL           =       /bin/sh
+DEVTOP          =       `pwd`
+LIBINCLUDE      =       .
+.SUFFIXES: .F .i .o .f90 .c
+
+#### Get core settings from environment (set in compile script)
+#### Note to add a core, this has to be added to.
+
+COREDEFS = -DEM_CORE=$(WRF_EM_CORE) \
+           -DNMM_CORE=$(WRF_NMM_CORE) -DNMM_MAX_DIM=2600 \
+	   -DCOAMPS_CORE=$(WRF_COAMPS_CORE) \
+	   -DDA_CORE=$(WRF_DA_CORE) \
+           -DEXP_CORE=$(WRF_EXP_CORE)
+
+#### Single location for defining total number of domains.  You need
+#### at least 1 + 2*(number of total nests).  For example, 1 coarse
+#### grid + three fine grids = 1 + 2(3) = 7, so MAX_DOMAINS=7.
+
+MAX_DOMAINS	=	21
+
+#### DM buffer length for the configuration flags.
+
+CONFIG_BUF_LEN	=	32768
+
+
+##############################################################################
+#### The settings in this section are defaults that may be overridden by the 
+#### architecture-specific settings in the next section.  
+##############################################################################
+
+##############################################################################
+#### NOTE:  Do not modify these default values here.  To override these 
+####        values, make changes after "Architecture specific settings".  
+##############################################################################
+
+#### Native size (in bytes) of Fortran REAL data type on this architecture ####
+#### Note:  to change real wordsize (for example, to promote REALs from 
+####        4-byte to 8-byte), modify the definition of RWORDSIZE in the 
+####        section following "Architecture specific settings".  Do not 
+####        change NATIVE_RWORDSIZE as is it architecture-specific.  
+NATIVE_RWORDSIZE = 4
+
+#### Default sed command and script for Fortran source files ####
+#SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/standard.sed
+SED_FTN = $(WRF_SRC_ROOT_DIR)/tools/standard.exe
+
+# Hack to work around $(PWD) not changing during OSF1 build.  
+# $(IO_GRIB_SHARE_DIR) is reset during the OSF1 build only.  
+IO_GRIB_SHARE_DIR = 
+
+#### ESMF switches                 ####
+#### These are set up by Config.pl ####
+# switch to use separately installed ESMF library for coupling:  1==true
+ESMF_COUPLING       = 0
+# select dependences on module_utility.o
+ESMF_MOD_DEPENDENCE = $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/module_utility.o
+# select -I options for external/io_esmf vs. external/esmf_time_f90
+ESMF_IO_INC         = -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90
+# select -I options for separately installed ESMF library, if present
+ESMF_MOD_INC        =  $(ESMF_IO_INC)
+# select cpp token for external/io_esmf vs. external/esmf_time_f90
+ESMF_IO_DEFS        = 
+# select build target for external/io_esmf vs. external/esmf_time_f90
+ESMF_TARGET         = esmf_time
+
+##############################################################################
+
+LIBWRFLIB = libwrflib.a
+
+
+#### Architecture specific settings ####
+
+# To enable over-decompostion with dmpar and dm+sm compiles, 
+# add -DALLOW_OVERDECOMP to ARCH_LOCAL, below. (not recommended)
+
+# Settings for Linux x86_64, PGI compiler with gcc  (serial)
+#
+DMPARALLEL      =       # 1
+OMPCPP          =       # -D_OPENMP
+OMP             =       # -mp -Minfo=mp
+SFC             =       pgf90
+SCC             =       gcc
+DM_FC           =       mpif90 -f90=$(SFC)
+DM_CC           =       mpicc -cc=$(SCC)
+FC              =        $(SFC)
+CC              =       $(SCC) -DFSEEKO64_OK 
+LD              =       $(FC)
+RWORDSIZE       =       $(NATIVE_RWORDSIZE)
+PROMOTION       =       -r$(RWORDSIZE) -i4
+ARCH_LOCAL      =       -DNONSTANDARD_SYSTEM_SUBR
+CFLAGS_LOCAL    =       -w -O3
+LDFLAGS_LOCAL   =       
+CPLUSPLUSLIB    =       
+ESMF_LDFLAG     =       $(CPLUSPLUSLIB)
+FCOPTIM         =       -fastsse -Mvect=noaltcode -Msmartalloc -Mprefetch=distance:8 -Mfprelaxed # -Minfo=all =Mneginfo=all
+FCREDUCEDOPT	=       $(FCOPTIM)
+FCNOOPT		=       -O0
+FCDEBUG         =       # -g $(FCNOOPT)
+FORMAT_FIXED    =       -Mfixed
+FORMAT_FREE     =       -Mfree
+FCSUFFIX        =
+BYTESWAPIO      =       -byteswapio
+FCBASEOPTS      =       -w $(FCDEBUG) $(FORMAT_FREE) $(BYTESWAPIO)
+MODULE_SRCH_FLAG =     -module $(WRF_SRC_ROOT_DIR)/main
+TRADFLAG        =      -traditional
+CPP             =      /lib/cpp -C -P
+AR              =      ar
+ARFLAGS         =      ru
+M4              =      m4 -B 14000
+RANLIB          =      ranlib
+CC_TOOLS        =      $(SCC)
+
+###########################################################
+######################
+
+ARCHFLAGS       =    $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
+                     $(ARCH_LOCAL) \
+                     $(DA_ARCHFLAGS) \
+                       \
+                       \
+                      -DNETCDF \
+                       \
+                       \
+                       \
+                       \
+                       \
+                       \
+                      -DGRIB1 \
+                      -DINTIO \
+                      -DLIMIT_ARGS \
+                      -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) \
+                      -DMAX_DOMAINS_F=$(MAX_DOMAINS) \
+		      -DNMM_NEST=$(WRF_NMM_NEST)
+CFLAGS          =    $(CFLAGS_LOCAL)  
+FCFLAGS         =    $(FCOPTIM) $(FCBASEOPTS) $(OMP)
+ESMF_LIB_FLAGS  =    
+ESMF_IO_LIB     =    $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a
+ESMF_IO_LIB_EXT =    -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a
+INCLUDE_MODULES =    $(MODULE_SRCH_FLAG) \
+                     $(ESMF_MOD_INC) $(ESMF_LIB_FLAGS) \
+                      -I$(WRF_SRC_ROOT_DIR)/main \
+                      -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf \
+                      -I$(WRF_SRC_ROOT_DIR)/external/io_int \
+                      -I$(WRF_SRC_ROOT_DIR)/frame \
+                      -I$(WRF_SRC_ROOT_DIR)/share \
+                      -I$(WRF_SRC_ROOT_DIR)/phys \
+                      -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc \
+                       \
+                      
+REGISTRY        =    Registry
+
+LIB_BUNDLED     = \
+                     -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
+                     -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
+                     -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
+                     -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
+                     $(ESMF_IO_LIB) \
+                     $(ESMF_IO_LIB) \
+                      \
+                     $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o \
+                     $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o 
+
+LIB_EXTERNAL    = \
+                     $(WRF_SRC_ROOT_DIR)/external/io_netcdf/libwrfio_nf.a -L/donnees/aslmd/MODELES/NETCDF/pgf90_64/netcdf-3.6.1/lib -lnetcdf    
+
+LIB_LMD         = \
+                     -L/donnees/aslmd/MODELES/LMD_MM_MARS/mpi_64/WRFV2/mars_lmd/libo -llmd
+
+LIB             =    $(LIB_BUNDLED) $(LIB_EXTERNAL) $(LIB_LOCAL) $(LIB_LMD)
+LDFLAGS         =    $(OMP) $(FCFLAGS) $(LDFLAGS_LOCAL) 
+ENVCOMPDEFS     =    
+WRF_CHEM	=	0 
+CPPFLAGS        =    $(ARCHFLAGS) $(ENVCOMPDEFS) -I$(LIBINCLUDE) $(TRADFLAG) 
+NETCDFPATH      =    /donnees/aslmd/MODELES/NETCDF/pgf90_64/netcdf-3.6.1
+PNETCDFPATH     =    
+
+bundled:  wrf_ioapi_includes wrfio_grib_share wrfio_grib1 wrfio_int esmf_time fftpack
+external:  wrfio_nf   gen_comms_serial module_dm_serial $(ESMF_TARGET)
+
+######################
+externals: bundled external
+
+gen_comms_serial :
+	( /bin/rm -f $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )
+
+module_dm_serial :
+	( if [ ! -e module_dm.F ] ; then /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F ; fi )
+
+gen_comms_rsllite :
+	( if [ ! -e $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ] ; then \
+          /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
+          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; fi )
+
+module_dm_rsllite :
+	( if [ ! -e module_dm.F ] ; then /bin/cp module_dm_warning module_dm.F ; \
+          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F ; fi )
+
+wrfio_nf : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
+          make NETCDFPATH="$(NETCDFPATH)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          CC="$(SCC)" CFLAGS="$(CFLAGS)" \
+          FC="$(SFC) $(PROMOTION) $(FCFLAGS)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+wrfio_pnf : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_pnetcdf ; \
+          make NETCDFPATH="$(PNETCDFPATH)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(FC) $(PROMOTION) $(FCFLAGS)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+wrfio_grib_share :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) $(FCSUFFIX)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" archive) 
+
+wrfio_grib1 :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) $(FCSUFFIX)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" archive)
+
+wrfio_grib2 :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS) " RM="$(RM)" RANLIB="$(RANLIB)" \
+          CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) $(FCSUFFIX)" TRADFLAG="-traditional" AR="$(AR)" ARFLAGS="$(ARFLAGS)" \
+          FIXED="$(FORMAT_FIXED)" archive)
+
+wrfio_int : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
+          make CC="$(CC)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" \
+          TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" all )
+
+esmf_time : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
+          make FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" \
+          CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(ARCHFLAGS) $(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+fftpack :
+	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
+          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
+	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CC="$(CC) $(CFLAGS)" \
+          FC="$(FC) $(FCFLAGS) $(PROMOTION) $(BYTESWAPIO)" \
+          CPP="$(CPP) -I. $(ARCHFLAGS) $(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" ;\
+          $(RANLIB) $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a )
+
+######################
+#	Macros, these should be generic for all machines
+
+LN	=	ln -sf
+MAKE	=	make -i -r
+RM	= 	rm -f
+
+
+# These sub-directory builds are identical across all architectures
+
+wrf_ioapi_includes :
+	( cd $(WRF_SRC_ROOT_DIR)/external/ioapi_share ; \
+          $(MAKE) NATIVE_RWORDSIZE="$(NATIVE_RWORDSIZE)" RWORDSIZE="$(RWORDSIZE)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+wrfio_esmf :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_esmf ; \
+          make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) $(ESMF_MOD_INC)" \
+          RANLIB="$(RANLIB)" CPP="$(CPP) $(POUND_DEF) " AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+#	There is probably no reason to modify these rules
+
+.F.i:
+	$(RM) $@
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.F > $@
+	mv $*.i $(DEVTOP)/pick/$*.f90
+	cp $*.F $(DEVTOP)/pick
+
+.F.o:
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -o $@ -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $*.f90
+
+.F.f90:
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $@
+	$(RM) $*.b
+
+.f90.o:
+	$(RM) $@
+	$(FC) -o $@ -c $(FCFLAGS) $(PROMOTION) $(FCSUFFIX) $*.f90
+
+.c.o:
+	$(RM) $@
+	$(CC) -o $@ -c $(CFLAGS) $*.c
+
+# A little more adventurous.  Allow full opt on 
+# mediation_integrate.o \
+# shift_domain_em.o \
+# solve_em.o  <-- gets a little kick from SOLVE_EM_SPECIAL too, if defined
+# mediation_feedback_domain.o : mediation_feedback_domain.F
+# mediation_force_domain.o : mediation_force_domain.F
+# mediation_interp_domain.o : mediation_interp_domain.F
+
+# compile these without high optimization to speed compile
+convert_nmm.o : convert_nmm.F
+init_modules_em.o : init_modules_em.F
+input_wrf.o : input_wrf.F
+module_io.o : module_io.F
+module_comm_dm.o : module_comm_dm.F
+module_configure.o : module_configure.F
+module_dm.o : module_dm.F
+module_domain.o : module_domain.F
+module_domain_type.o : module_domain_type.F
+module_alloc_space.o : module_alloc_space.F
+module_tiles.o : module_tiles.F
+module_fddaobs_rtfdda.o : module_fddaobs_rtfdda.F
+module_initialize.o : module_initialize.F
+module_physics_init.o : module_physics_init.F 
+module_initialize_b_wave.o : module_initialize_b_wave.F
+module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
+module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
+module_initialize_real.o : module_initialize_real.F
+module_initialize_real.o: module_initialize_real.F
+module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
+module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
+module_integrate.o : module_integrate.F
+module_io_mm5.o : module_io_mm5.F
+module_io_wrf.o : module_io_wrf.F
+module_si_io.o : module_si_io.F
+module_state_description.o : module_state_description.F 
+output_wrf.o : output_wrf.F
+solve_interface.o : solve_interface.F
+start_domain.o : start_domain.F
+start_domain_nmm.o : start_domain_nmm.F
+start_em.o : start_em.F
+wrf_auxhist10in.o : wrf_auxhist10in.F
+wrf_auxhist10out.o : wrf_auxhist10out.F
+wrf_auxhist11in.o : wrf_auxhist11in.F
+wrf_auxhist11out.o : wrf_auxhist11out.F
+wrf_auxhist1in.o : wrf_auxhist1in.F
+wrf_auxhist1out.o : wrf_auxhist1out.F
+wrf_auxhist2in.o : wrf_auxhist2in.F
+wrf_auxhist2out.o : wrf_auxhist2out.F
+wrf_auxhist3in.o : wrf_auxhist3in.F
+wrf_auxhist3out.o : wrf_auxhist3out.F
+wrf_auxhist4in.o : wrf_auxhist4in.F
+wrf_auxhist4out.o : wrf_auxhist4out.F
+wrf_auxhist5in.o : wrf_auxhist5in.F
+wrf_auxhist5out.o : wrf_auxhist5out.F
+wrf_auxhist6in.o : wrf_auxhist6in.F
+wrf_auxhist6out.o : wrf_auxhist6out.F
+wrf_auxhist7in.o : wrf_auxhist7in.F
+wrf_auxhist7out.o : wrf_auxhist7out.F
+wrf_auxhist8in.o : wrf_auxhist8in.F
+wrf_auxhist8out.o : wrf_auxhist8out.F
+wrf_auxhist9in.o : wrf_auxhist9in.F
+wrf_auxhist9out.o : wrf_auxhist9out.F
+wrf_auxinput10in.o : wrf_auxinput10in.F
+wrf_auxinput10out.o : wrf_auxinput10out.F
+wrf_auxinput11in.o : wrf_auxinput11in.F
+wrf_auxinput11out.o : wrf_auxinput11out.F
+wrf_auxinput1in.o : wrf_auxinput1in.F
+wrf_auxinput1out.o : wrf_auxinput1out.F
+wrf_auxinput2in.o : wrf_auxinput2in.F
+wrf_auxinput2out.o : wrf_auxinput2out.F
+wrf_auxinput3in.o : wrf_auxinput3in.F
+wrf_auxinput3out.o : wrf_auxinput3out.F
+wrf_auxinput4in.o : wrf_auxinput4in.F
+wrf_auxinput4out.o : wrf_auxinput4out.F
+wrf_auxinput5in.o : wrf_auxinput5in.F
+wrf_auxinput5out.o : wrf_auxinput5out.F
+wrf_auxinput6in.o : wrf_auxinput6in.F
+wrf_auxinput6out.o : wrf_auxinput6out.F
+wrf_auxinput7in.o : wrf_auxinput7in.F
+wrf_auxinput7out.o : wrf_auxinput7out.F
+wrf_auxinput8in.o : wrf_auxinput8in.F
+wrf_auxinput8out.o : wrf_auxinput8out.F
+wrf_auxinput9in.o : wrf_auxinput9in.F
+wrf_auxinput9out.o : wrf_auxinput9out.F
+wrf_bdyin.o : wrf_bdyin.F
+wrf_bdyout.o : wrf_bdyout.F
+wrf_ext_read_field.o : wrf_ext_read_field.F
+wrf_ext_write_field.o : wrf_ext_write_field.F
+wrf_fddaobs_in.o : wrf_fddaobs_in.F
+wrf_histin.o : wrf_histin.F
+wrf_histout.o : wrf_histout.F
+wrf_inputin.o : wrf_inputin.F
+wrf_inputout.o : wrf_inputout.F
+wrf_restartin.o : wrf_restartin.F
+wrf_restartout.o : wrf_restartout.F
+wrf_tsin.o : wrf_tsin.F
+nl_get_0_routines.o : nl_get_0_routines.F
+nl_get_1_routines.o : nl_get_1_routines.F
+nl_set_0_routines.o : nl_set_0_routines.F
+nl_set_1_routines.o : nl_set_1_routines.F
+
+convert_nmm.o \
+init_modules_em.o \
+module_comm_dm.o \
+module_dm.o \
+module_alloc_space.o \
+module_fddaobs_rtfdda.o \
+module_initialize.o \
+module_initialize_b_wave.o \
+module_initialize_hill2d_x.o \
+module_initialize_quarter_ss.o \
+module_initialize_real.o \
+module_initialize_squall2d_x.o \
+module_initialize_squall2d_y.o \
+module_integrate.o \
+module_io_mm5.o \
+module_io_wrf.o \
+module_si_io.o \
+module_tiles.o \
+output_wrf.o \
+solve_interface.o \
+start_domain.o \
+start_domain_nmm.o \
+start_em.o \
+wrf_fddaobs_in.o \
+wrf_tsin.o :
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(PROMOTION) $(FCNOOPT) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $(OMP) $*.f90
+
+#solve_em.o :
+#	$(RM) $@
+#	$(SED_FTN) $*.F > $*.b 
+#	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
+#	$(RM) $*.b
+#	$(FC) -o $@ -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $(SOLVE_EM_SPECIAL) $(OMP) $*.f90
+
+module_sf_ruclsm.o : module_sf_ruclsm.F
+module_cu_kf.o : module_cu_kf.F
+
+module_sf_ruclsm.o module_cu_kf.o :
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(PROMOTION) $(FCREDUCEDOPT) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $(OMP) $*.f90
+
+# compile without OMP
+input_wrf.o \
+module_domain.o \
+module_domain_type.o \
+module_physics_init.o \
+module_io.o \
+wrf_auxhist10in.o \
+wrf_auxhist10out.o \
+wrf_auxhist11in.o \
+wrf_auxhist11out.o \
+wrf_auxhist1in.o \
+wrf_auxhist1out.o \
+wrf_auxhist2in.o \
+wrf_auxhist2out.o \
+wrf_auxhist3in.o \
+wrf_auxhist3out.o \
+wrf_auxhist4in.o \
+wrf_auxhist4out.o \
+wrf_auxhist5in.o \
+wrf_auxhist5out.o \
+wrf_auxhist6in.o \
+wrf_auxhist6out.o \
+wrf_auxhist7in.o \
+wrf_auxhist7out.o \
+wrf_auxhist8in.o \
+wrf_auxhist8out.o \
+wrf_auxhist9in.o \
+wrf_auxhist9out.o \
+wrf_auxinput10in.o \
+wrf_auxinput10out.o \
+wrf_auxinput11in.o \
+wrf_auxinput11out.o \
+wrf_auxinput1in.o \
+wrf_auxinput1out.o \
+wrf_auxinput2in.o \
+wrf_auxinput2out.o \
+wrf_auxinput3in.o \
+wrf_auxinput3out.o \
+wrf_auxinput4in.o \
+wrf_auxinput4out.o \
+wrf_auxinput5in.o \
+wrf_auxinput5out.o \
+wrf_auxinput6in.o \
+wrf_auxinput6out.o \
+wrf_auxinput7in.o \
+wrf_auxinput7out.o \
+wrf_auxinput8in.o \
+wrf_auxinput8out.o \
+wrf_auxinput9in.o \
+wrf_auxinput9out.o \
+wrf_bdyin.o \
+wrf_bdyout.o \
+wrf_ext_read_field.o \
+wrf_ext_write_field.o \
+wrf_histin.o \
+wrf_histout.o \
+wrf_inputin.o \
+wrf_inputout.o \
+wrf_restartin.o \
+wrf_restartout.o \
+module_state_description.o \
+nl_set_0_routines.o \
+nl_set_1_routines.o \
+nl_get_0_routines.o \
+nl_get_1_routines.o \
+module_configure.o :
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(PROMOTION) $(FCSUFFIX) $(FCNOOPT) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf_dm
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf_dm	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf_dm	(revision 142)
@@ -0,0 +1,522 @@
+# configure.wrf
+#
+# This file was automatically generated by the configure script in the
+# top level directory. You may make changes to the settings in this
+# file but be aware they will be overwritten each time you run configure.
+# Ordinarily, it is necessary to run configure once, when the code is
+# first installed.
+#
+# To permanently change options, change the settings for your platform
+# in the file arch/configure.defaults then rerun configure.
+#
+SHELL           =       /bin/sh
+DEVTOP          =       `pwd`
+LIBINCLUDE      =       .
+.SUFFIXES: .F .i .o .f90 .c
+
+#### Get core settings from environment (set in compile script)
+#### Note to add a core, this has to be added to.
+
+COREDEFS = -DEM_CORE=$(WRF_EM_CORE) \
+           -DNMM_CORE=$(WRF_NMM_CORE) -DNMM_MAX_DIM=2600 \
+	   -DCOAMPS_CORE=$(WRF_COAMPS_CORE) \
+	   -DDA_CORE=$(WRF_DA_CORE) \
+           -DEXP_CORE=$(WRF_EXP_CORE)
+
+#### Single location for defining total number of domains.  You need
+#### at least 1 + 2*(number of total nests).  For example, 1 coarse
+#### grid + three fine grids = 1 + 2(3) = 7, so MAX_DOMAINS=7.
+
+MAX_DOMAINS	=	21
+
+#### DM buffer length for the configuration flags.
+
+CONFIG_BUF_LEN	=	32768
+
+
+##############################################################################
+#### The settings in this section are defaults that may be overridden by the 
+#### architecture-specific settings in the next section.  
+##############################################################################
+
+##############################################################################
+#### NOTE:  Do not modify these default values here.  To override these 
+####        values, make changes after "Architecture specific settings".  
+##############################################################################
+
+#### Native size (in bytes) of Fortran REAL data type on this architecture ####
+#### Note:  to change real wordsize (for example, to promote REALs from 
+####        4-byte to 8-byte), modify the definition of RWORDSIZE in the 
+####        section following "Architecture specific settings".  Do not 
+####        change NATIVE_RWORDSIZE as is it architecture-specific.  
+NATIVE_RWORDSIZE = 4
+
+#### Default sed command and script for Fortran source files ####
+#SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/standard.sed
+SED_FTN = $(WRF_SRC_ROOT_DIR)/tools/standard.exe
+
+# Hack to work around $(PWD) not changing during OSF1 build.  
+# $(IO_GRIB_SHARE_DIR) is reset during the OSF1 build only.  
+IO_GRIB_SHARE_DIR = 
+
+#### ESMF switches                 ####
+#### These are set up by Config.pl ####
+# switch to use separately installed ESMF library for coupling:  1==true
+ESMF_COUPLING       = 0
+# select dependences on module_utility.o
+ESMF_MOD_DEPENDENCE = $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/module_utility.o
+# select -I options for external/io_esmf vs. external/esmf_time_f90
+ESMF_IO_INC         = -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90
+# select -I options for separately installed ESMF library, if present
+ESMF_MOD_INC        =  $(ESMF_IO_INC)
+# select cpp token for external/io_esmf vs. external/esmf_time_f90
+ESMF_IO_DEFS        = 
+# select build target for external/io_esmf vs. external/esmf_time_f90
+ESMF_TARGET         = esmf_time
+
+##############################################################################
+
+LIBWRFLIB = libwrflib.a
+
+
+#### Architecture specific settings ####
+
+# To enable over-decompostion with dmpar and dm+sm compiles, 
+# add -DALLOW_OVERDECOMP to ARCH_LOCAL, below. (not recommended)
+
+# Settings for Linux x86_64, PGI compiler with gcc  (dmpar)
+#
+DMPARALLEL      =        1
+OMPCPP          =       # -D_OPENMP
+OMP             =       # -mp -Minfo=mp
+SFC             =       pgf90
+SCC             =       gcc
+DM_FC           =       /donnees/aslmd/MODELES/MPI/mpich2-1.0.8/bin/mpif90 -f90=$(SFC)
+DM_CC           =       /donnees/aslmd/MODELES/MPI/mpich2-1.0.8/bin/mpicc -cc=$(SCC) -DMPI2_SUPPORT
+FC              =        $(DM_FC)
+CC              =       $(DM_CC) -DFSEEKO64_OK 
+LD              =       $(FC)
+RWORDSIZE       =       $(NATIVE_RWORDSIZE)
+PROMOTION       =       -r$(RWORDSIZE) -i4
+ARCH_LOCAL      =       -DNONSTANDARD_SYSTEM_SUBR
+CFLAGS_LOCAL    =       -w -O3
+LDFLAGS_LOCAL   =       
+CPLUSPLUSLIB    =       
+ESMF_LDFLAG     =       $(CPLUSPLUSLIB)
+FCOPTIM         =       -fastsse -Mvect=noaltcode -Msmartalloc -Mprefetch=distance:8 -Mfprelaxed # -Minfo=all =Mneginfo=all
+FCREDUCEDOPT	=       $(FCOPTIM)
+FCNOOPT		=       -O0
+FCDEBUG         =       # -g $(FCNOOPT)
+FORMAT_FIXED    =       -Mfixed
+FORMAT_FREE     =       -Mfree
+FCSUFFIX        =
+BYTESWAPIO      =       -byteswapio
+FCBASEOPTS      =       -w $(FCDEBUG) $(FORMAT_FREE) $(BYTESWAPIO)
+MODULE_SRCH_FLAG =     -module $(WRF_SRC_ROOT_DIR)/main
+TRADFLAG        =      -traditional
+CPP             =      /lib/cpp -C -P
+AR              =      ar
+ARFLAGS         =      ru
+M4              =      m4 -B 14000
+RANLIB          =      ranlib
+CC_TOOLS        =      $(SCC)
+
+###########################################################
+######################
+
+ARCHFLAGS       =    $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
+                     $(ARCH_LOCAL) \
+                     $(DA_ARCHFLAGS) \
+                      -DDM_PARALLEL \
+                       \
+                      -DNETCDF \
+                       \
+                       \
+                       \
+                       \
+                       \
+                       \
+                      -DGRIB1 \
+                      -DINTIO \
+                      -DLIMIT_ARGS \
+                      -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) \
+                      -DMAX_DOMAINS_F=$(MAX_DOMAINS) \
+		      -DNMM_NEST=$(WRF_NMM_NEST)
+CFLAGS          =    $(CFLAGS_LOCAL) -DDM_PARALLEL 
+FCFLAGS         =    $(FCOPTIM) $(FCBASEOPTS) $(OMP)
+ESMF_LIB_FLAGS  =    
+ESMF_IO_LIB     =    $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a
+ESMF_IO_LIB_EXT =    -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a
+INCLUDE_MODULES =    $(MODULE_SRCH_FLAG) \
+                     $(ESMF_MOD_INC) $(ESMF_LIB_FLAGS) \
+                      -I$(WRF_SRC_ROOT_DIR)/main \
+                      -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf \
+                      -I$(WRF_SRC_ROOT_DIR)/external/io_int \
+                      -I$(WRF_SRC_ROOT_DIR)/frame \
+                      -I$(WRF_SRC_ROOT_DIR)/share \
+                      -I$(WRF_SRC_ROOT_DIR)/phys \
+                      -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc \
+                       \
+                      
+REGISTRY        =    Registry
+
+LIB_BUNDLED     = \
+                     -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
+                     -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
+                     -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
+                     -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
+                     $(ESMF_IO_LIB) \
+                     $(ESMF_IO_LIB) \
+                     $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a \
+                     $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o \
+                     $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o 
+
+LIB_EXTERNAL    = \
+                     $(WRF_SRC_ROOT_DIR)/external/io_netcdf/libwrfio_nf.a -L/donnees/aslmd/MODELES/NETCDF/pgf90_64/netcdf-3.6.1/lib -lnetcdf -L/donnees/aslmd/MODELES/LMD_MM_MARS/mpi_64/WRFV2/mars_lmd/libo -llmd   
+
+LIB             =    $(LIB_BUNDLED) $(LIB_EXTERNAL) $(LIB_LOCAL)
+LDFLAGS         =    $(OMP) $(FCFLAGS) $(LDFLAGS_LOCAL) 
+ENVCOMPDEFS     =    
+WRF_CHEM	=	0 
+CPPFLAGS        =    $(ARCHFLAGS) $(ENVCOMPDEFS) -I$(LIBINCLUDE) $(TRADFLAG) 
+NETCDFPATH      =    /donnees/aslmd/MODELES/NETCDF/pgf90_64/netcdf-3.6.1
+PNETCDFPATH     =    
+
+bundled:  wrf_ioapi_includes wrfio_grib_share wrfio_grib1 wrfio_int esmf_time fftpack
+external:  wrfio_nf   $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms_rsllite module_dm_rsllite $(ESMF_TARGET)
+
+######################
+externals: bundled external
+
+gen_comms_serial :
+	( /bin/rm -f $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )
+
+module_dm_serial :
+	( if [ ! -e module_dm.F ] ; then /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F ; fi )
+
+gen_comms_rsllite :
+	( if [ ! -e $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ] ; then \
+          /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
+          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; fi )
+
+module_dm_rsllite :
+	( if [ ! -e module_dm.F ] ; then /bin/cp module_dm_warning module_dm.F ; \
+          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F ; fi )
+
+wrfio_nf : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
+          make NETCDFPATH="$(NETCDFPATH)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          CC="$(SCC)" CFLAGS="$(CFLAGS)" \
+          FC="$(SFC) $(PROMOTION) $(FCFLAGS)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+wrfio_pnf : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_pnetcdf ; \
+          make NETCDFPATH="$(PNETCDFPATH)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(FC) $(PROMOTION) $(FCFLAGS)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+wrfio_grib_share :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) $(FCSUFFIX)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" archive) 
+
+wrfio_grib1 :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) $(FCSUFFIX)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" archive)
+
+wrfio_grib2 :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS) " RM="$(RM)" RANLIB="$(RANLIB)" \
+          CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) $(FCSUFFIX)" TRADFLAG="-traditional" AR="$(AR)" ARFLAGS="$(ARFLAGS)" \
+          FIXED="$(FORMAT_FIXED)" archive)
+
+wrfio_int : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
+          make CC="$(CC)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" \
+          TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" all )
+
+esmf_time : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
+          make FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" \
+          CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(ARCHFLAGS) $(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+fftpack :
+	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
+          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
+	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CC="$(CC) $(CFLAGS)" \
+          FC="$(FC) $(FCFLAGS) $(PROMOTION) $(BYTESWAPIO)" \
+          CPP="$(CPP) -I. $(ARCHFLAGS) $(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" ;\
+          $(RANLIB) $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a )
+
+######################
+#	Macros, these should be generic for all machines
+
+LN	=	ln -sf
+MAKE	=	make -i -r
+RM	= 	rm -f
+
+
+# These sub-directory builds are identical across all architectures
+
+wrf_ioapi_includes :
+	( cd $(WRF_SRC_ROOT_DIR)/external/ioapi_share ; \
+          $(MAKE) NATIVE_RWORDSIZE="$(NATIVE_RWORDSIZE)" RWORDSIZE="$(RWORDSIZE)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+wrfio_esmf :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_esmf ; \
+          make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) $(ESMF_MOD_INC)" \
+          RANLIB="$(RANLIB)" CPP="$(CPP) $(POUND_DEF) " AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+#	There is probably no reason to modify these rules
+
+.F.i:
+	$(RM) $@
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.F > $@
+	mv $*.i $(DEVTOP)/pick/$*.f90
+	cp $*.F $(DEVTOP)/pick
+
+.F.o:
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -o $@ -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $*.f90
+
+.F.f90:
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $@
+	$(RM) $*.b
+
+.f90.o:
+	$(RM) $@
+	$(FC) -o $@ -c $(FCFLAGS) $(PROMOTION) $(FCSUFFIX) $*.f90
+
+.c.o:
+	$(RM) $@
+	$(CC) -o $@ -c $(CFLAGS) $*.c
+
+# A little more adventurous.  Allow full opt on 
+# mediation_integrate.o \
+# shift_domain_em.o \
+# solve_em.o  <-- gets a little kick from SOLVE_EM_SPECIAL too, if defined
+# mediation_feedback_domain.o : mediation_feedback_domain.F
+# mediation_force_domain.o : mediation_force_domain.F
+# mediation_interp_domain.o : mediation_interp_domain.F
+
+# compile these without high optimization to speed compile
+convert_nmm.o : convert_nmm.F
+init_modules_em.o : init_modules_em.F
+input_wrf.o : input_wrf.F
+module_io.o : module_io.F
+module_comm_dm.o : module_comm_dm.F
+module_configure.o : module_configure.F
+module_dm.o : module_dm.F
+module_domain.o : module_domain.F
+module_domain_type.o : module_domain_type.F
+module_alloc_space.o : module_alloc_space.F
+module_tiles.o : module_tiles.F
+module_fddaobs_rtfdda.o : module_fddaobs_rtfdda.F
+module_initialize.o : module_initialize.F
+module_physics_init.o : module_physics_init.F 
+module_initialize_b_wave.o : module_initialize_b_wave.F
+module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
+module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
+module_initialize_real.o : module_initialize_real.F
+module_initialize_real.o: module_initialize_real.F
+module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
+module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
+module_integrate.o : module_integrate.F
+module_io_mm5.o : module_io_mm5.F
+module_io_wrf.o : module_io_wrf.F
+module_si_io.o : module_si_io.F
+module_state_description.o : module_state_description.F 
+output_wrf.o : output_wrf.F
+solve_interface.o : solve_interface.F
+start_domain.o : start_domain.F
+start_domain_nmm.o : start_domain_nmm.F
+start_em.o : start_em.F
+wrf_auxhist10in.o : wrf_auxhist10in.F
+wrf_auxhist10out.o : wrf_auxhist10out.F
+wrf_auxhist11in.o : wrf_auxhist11in.F
+wrf_auxhist11out.o : wrf_auxhist11out.F
+wrf_auxhist1in.o : wrf_auxhist1in.F
+wrf_auxhist1out.o : wrf_auxhist1out.F
+wrf_auxhist2in.o : wrf_auxhist2in.F
+wrf_auxhist2out.o : wrf_auxhist2out.F
+wrf_auxhist3in.o : wrf_auxhist3in.F
+wrf_auxhist3out.o : wrf_auxhist3out.F
+wrf_auxhist4in.o : wrf_auxhist4in.F
+wrf_auxhist4out.o : wrf_auxhist4out.F
+wrf_auxhist5in.o : wrf_auxhist5in.F
+wrf_auxhist5out.o : wrf_auxhist5out.F
+wrf_auxhist6in.o : wrf_auxhist6in.F
+wrf_auxhist6out.o : wrf_auxhist6out.F
+wrf_auxhist7in.o : wrf_auxhist7in.F
+wrf_auxhist7out.o : wrf_auxhist7out.F
+wrf_auxhist8in.o : wrf_auxhist8in.F
+wrf_auxhist8out.o : wrf_auxhist8out.F
+wrf_auxhist9in.o : wrf_auxhist9in.F
+wrf_auxhist9out.o : wrf_auxhist9out.F
+wrf_auxinput10in.o : wrf_auxinput10in.F
+wrf_auxinput10out.o : wrf_auxinput10out.F
+wrf_auxinput11in.o : wrf_auxinput11in.F
+wrf_auxinput11out.o : wrf_auxinput11out.F
+wrf_auxinput1in.o : wrf_auxinput1in.F
+wrf_auxinput1out.o : wrf_auxinput1out.F
+wrf_auxinput2in.o : wrf_auxinput2in.F
+wrf_auxinput2out.o : wrf_auxinput2out.F
+wrf_auxinput3in.o : wrf_auxinput3in.F
+wrf_auxinput3out.o : wrf_auxinput3out.F
+wrf_auxinput4in.o : wrf_auxinput4in.F
+wrf_auxinput4out.o : wrf_auxinput4out.F
+wrf_auxinput5in.o : wrf_auxinput5in.F
+wrf_auxinput5out.o : wrf_auxinput5out.F
+wrf_auxinput6in.o : wrf_auxinput6in.F
+wrf_auxinput6out.o : wrf_auxinput6out.F
+wrf_auxinput7in.o : wrf_auxinput7in.F
+wrf_auxinput7out.o : wrf_auxinput7out.F
+wrf_auxinput8in.o : wrf_auxinput8in.F
+wrf_auxinput8out.o : wrf_auxinput8out.F
+wrf_auxinput9in.o : wrf_auxinput9in.F
+wrf_auxinput9out.o : wrf_auxinput9out.F
+wrf_bdyin.o : wrf_bdyin.F
+wrf_bdyout.o : wrf_bdyout.F
+wrf_ext_read_field.o : wrf_ext_read_field.F
+wrf_ext_write_field.o : wrf_ext_write_field.F
+wrf_fddaobs_in.o : wrf_fddaobs_in.F
+wrf_histin.o : wrf_histin.F
+wrf_histout.o : wrf_histout.F
+wrf_inputin.o : wrf_inputin.F
+wrf_inputout.o : wrf_inputout.F
+wrf_restartin.o : wrf_restartin.F
+wrf_restartout.o : wrf_restartout.F
+wrf_tsin.o : wrf_tsin.F
+nl_get_0_routines.o : nl_get_0_routines.F
+nl_get_1_routines.o : nl_get_1_routines.F
+nl_set_0_routines.o : nl_set_0_routines.F
+nl_set_1_routines.o : nl_set_1_routines.F
+
+convert_nmm.o \
+init_modules_em.o \
+module_comm_dm.o \
+module_dm.o \
+module_alloc_space.o \
+module_fddaobs_rtfdda.o \
+module_initialize.o \
+module_initialize_b_wave.o \
+module_initialize_hill2d_x.o \
+module_initialize_quarter_ss.o \
+module_initialize_real.o \
+module_initialize_squall2d_x.o \
+module_initialize_squall2d_y.o \
+module_integrate.o \
+module_io_mm5.o \
+module_io_wrf.o \
+module_si_io.o \
+module_tiles.o \
+output_wrf.o \
+solve_interface.o \
+start_domain.o \
+start_domain_nmm.o \
+start_em.o \
+wrf_fddaobs_in.o \
+wrf_tsin.o :
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(PROMOTION) $(FCNOOPT) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $(OMP) $*.f90
+
+#solve_em.o :
+#	$(RM) $@
+#	$(SED_FTN) $*.F > $*.b 
+#	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
+#	$(RM) $*.b
+#	$(FC) -o $@ -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $(SOLVE_EM_SPECIAL) $(OMP) $*.f90
+
+module_sf_ruclsm.o : module_sf_ruclsm.F
+module_cu_kf.o : module_cu_kf.F
+
+module_sf_ruclsm.o module_cu_kf.o :
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(PROMOTION) $(FCREDUCEDOPT) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $(OMP) $*.f90
+
+# compile without OMP
+input_wrf.o \
+module_domain.o \
+module_domain_type.o \
+module_physics_init.o \
+module_io.o \
+wrf_auxhist10in.o \
+wrf_auxhist10out.o \
+wrf_auxhist11in.o \
+wrf_auxhist11out.o \
+wrf_auxhist1in.o \
+wrf_auxhist1out.o \
+wrf_auxhist2in.o \
+wrf_auxhist2out.o \
+wrf_auxhist3in.o \
+wrf_auxhist3out.o \
+wrf_auxhist4in.o \
+wrf_auxhist4out.o \
+wrf_auxhist5in.o \
+wrf_auxhist5out.o \
+wrf_auxhist6in.o \
+wrf_auxhist6out.o \
+wrf_auxhist7in.o \
+wrf_auxhist7out.o \
+wrf_auxhist8in.o \
+wrf_auxhist8out.o \
+wrf_auxhist9in.o \
+wrf_auxhist9out.o \
+wrf_auxinput10in.o \
+wrf_auxinput10out.o \
+wrf_auxinput11in.o \
+wrf_auxinput11out.o \
+wrf_auxinput1in.o \
+wrf_auxinput1out.o \
+wrf_auxinput2in.o \
+wrf_auxinput2out.o \
+wrf_auxinput3in.o \
+wrf_auxinput3out.o \
+wrf_auxinput4in.o \
+wrf_auxinput4out.o \
+wrf_auxinput5in.o \
+wrf_auxinput5out.o \
+wrf_auxinput6in.o \
+wrf_auxinput6out.o \
+wrf_auxinput7in.o \
+wrf_auxinput7out.o \
+wrf_auxinput8in.o \
+wrf_auxinput8out.o \
+wrf_auxinput9in.o \
+wrf_auxinput9out.o \
+wrf_bdyin.o \
+wrf_bdyout.o \
+wrf_ext_read_field.o \
+wrf_ext_write_field.o \
+wrf_histin.o \
+wrf_histout.o \
+wrf_inputin.o \
+wrf_inputout.o \
+wrf_restartin.o \
+wrf_restartout.o \
+module_state_description.o \
+nl_set_0_routines.o \
+nl_set_1_routines.o \
+nl_get_0_routines.o \
+nl_get_1_routines.o \
+module_configure.o :
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(PROMOTION) $(FCSUFFIX) $(FCNOOPT) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf_dmsm
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf_dmsm	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf_dmsm	(revision 142)
@@ -0,0 +1,525 @@
+# configure.wrf
+#
+# This file was automatically generated by the configure script in the
+# top level directory. You may make changes to the settings in this
+# file but be aware they will be overwritten each time you run configure.
+# Ordinarily, it is necessary to run configure once, when the code is
+# first installed.
+#
+# To permanently change options, change the settings for your platform
+# in the file arch/configure.defaults then rerun configure.
+#
+SHELL           =       /bin/sh
+DEVTOP          =       `pwd`
+LIBINCLUDE      =       .
+.SUFFIXES: .F .i .o .f90 .c
+
+#### Get core settings from environment (set in compile script)
+#### Note to add a core, this has to be added to.
+
+COREDEFS = -DEM_CORE=$(WRF_EM_CORE) \
+           -DNMM_CORE=$(WRF_NMM_CORE) -DNMM_MAX_DIM=2600 \
+	   -DCOAMPS_CORE=$(WRF_COAMPS_CORE) \
+	   -DDA_CORE=$(WRF_DA_CORE) \
+           -DEXP_CORE=$(WRF_EXP_CORE)
+
+#### Single location for defining total number of domains.  You need
+#### at least 1 + 2*(number of total nests).  For example, 1 coarse
+#### grid + three fine grids = 1 + 2(3) = 7, so MAX_DOMAINS=7.
+
+MAX_DOMAINS	=	21
+
+#### DM buffer length for the configuration flags.
+
+CONFIG_BUF_LEN	=	32768
+
+
+##############################################################################
+#### The settings in this section are defaults that may be overridden by the 
+#### architecture-specific settings in the next section.  
+##############################################################################
+
+##############################################################################
+#### NOTE:  Do not modify these default values here.  To override these 
+####        values, make changes after "Architecture specific settings".  
+##############################################################################
+
+#### Native size (in bytes) of Fortran REAL data type on this architecture ####
+#### Note:  to change real wordsize (for example, to promote REALs from 
+####        4-byte to 8-byte), modify the definition of RWORDSIZE in the 
+####        section following "Architecture specific settings".  Do not 
+####        change NATIVE_RWORDSIZE as is it architecture-specific.  
+NATIVE_RWORDSIZE = 4
+
+#### Default sed command and script for Fortran source files ####
+#SED_FTN = sed -f $(WRF_SRC_ROOT_DIR)/arch/standard.sed
+SED_FTN = $(WRF_SRC_ROOT_DIR)/tools/standard.exe
+
+# Hack to work around $(PWD) not changing during OSF1 build.  
+# $(IO_GRIB_SHARE_DIR) is reset during the OSF1 build only.  
+IO_GRIB_SHARE_DIR = 
+
+#### ESMF switches                 ####
+#### These are set up by Config.pl ####
+# switch to use separately installed ESMF library for coupling:  1==true
+ESMF_COUPLING       = 0
+# select dependences on module_utility.o
+ESMF_MOD_DEPENDENCE = $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/module_utility.o
+# select -I options for external/io_esmf vs. external/esmf_time_f90
+ESMF_IO_INC         = -I$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90
+# select -I options for separately installed ESMF library, if present
+ESMF_MOD_INC        =  $(ESMF_IO_INC)
+# select cpp token for external/io_esmf vs. external/esmf_time_f90
+ESMF_IO_DEFS        = 
+# select build target for external/io_esmf vs. external/esmf_time_f90
+ESMF_TARGET         = esmf_time
+
+##############################################################################
+
+LIBWRFLIB = libwrflib.a
+
+
+#### Architecture specific settings ####
+
+# To enable over-decompostion with dmpar and dm+sm compiles, 
+# add -DALLOW_OVERDECOMP to ARCH_LOCAL, below. (not recommended)
+
+# Settings for Linux x86_64, PGI compiler with gcc  (dm+sm)
+#
+DMPARALLEL      =        1
+OMPCPP          =        -D_OPENMP
+OMP             =        -mp=nonuma -Minfo=mp
+SFC             =       pgf90
+SCC             =       gcc
+DM_FC           =       /donnees/aslmd/MODELES/MPI/mpich2-1.0.8/bin/mpif90 -f90=$(SFC)
+DM_CC           =       /donnees/aslmd/MODELES/MPI/mpich2-1.0.8/bin/mpicc -cc=$(SCC) -DMPI2_SUPPORT -DMPI2_THREAD_SUPPORT
+FC              =        $(DM_FC)
+CC              =       $(DM_CC) -DFSEEKO64_OK 
+LD              =       $(FC)
+RWORDSIZE       =       $(NATIVE_RWORDSIZE)
+PROMOTION       =       -r$(RWORDSIZE) -i4
+ARCH_LOCAL      =       -DNONSTANDARD_SYSTEM_SUBR
+CFLAGS_LOCAL    =       -w -O3
+LDFLAGS_LOCAL   =       
+CPLUSPLUSLIB    =       
+ESMF_LDFLAG     =       $(CPLUSPLUSLIB)
+FCOPTIM         =       -fastsse -Mvect=noaltcode -Msmartalloc -Mprefetch=distance:8 -Mfprelaxed # -Minfo=all =Mneginfo=all
+FCREDUCEDOPT	=       $(FCOPTIM)
+FCNOOPT		=       -O0
+FCDEBUG         =       # -g $(FCNOOPT)
+FORMAT_FIXED    =       -Mfixed
+FORMAT_FREE     =       -Mfree
+FCSUFFIX        =
+BYTESWAPIO      =       -byteswapio
+FCBASEOPTS      =       -w $(FCDEBUG) $(FORMAT_FREE) $(BYTESWAPIO)
+MODULE_SRCH_FLAG =     -module $(WRF_SRC_ROOT_DIR)/main
+TRADFLAG        =      -traditional
+CPP             =      /lib/cpp -C -P
+AR              =      ar
+ARFLAGS         =      ru
+M4              =      m4 -B 14000
+RANLIB          =      ranlib
+CC_TOOLS        =      $(SCC)
+
+###########################################################
+######################
+
+ARCHFLAGS       =    $(COREDEFS) -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 \
+                     $(ARCH_LOCAL) \
+                     $(DA_ARCHFLAGS) \
+                      -DDM_PARALLEL \
+                       \
+                      -DNETCDF \
+                       \
+                       \
+                       \
+                       \
+                       \
+                       \
+                      -DGRIB1 \
+                      -DINTIO \
+                      -DLIMIT_ARGS \
+                      -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) \
+                      -DMAX_DOMAINS_F=$(MAX_DOMAINS) \
+		      -DNMM_NEST=$(WRF_NMM_NEST)
+CFLAGS          =    $(CFLAGS_LOCAL) -DDM_PARALLEL 
+FCFLAGS         =    $(FCOPTIM) $(FCBASEOPTS) $(OMP)
+ESMF_LIB_FLAGS  =    
+ESMF_IO_LIB     =    $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a
+ESMF_IO_LIB_EXT =    -L$(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a
+INCLUDE_MODULES =    $(MODULE_SRCH_FLAG) \
+                     $(ESMF_MOD_INC) $(ESMF_LIB_FLAGS) \
+                      -I$(WRF_SRC_ROOT_DIR)/main \
+                      -I$(WRF_SRC_ROOT_DIR)/external/io_netcdf \
+                      -I$(WRF_SRC_ROOT_DIR)/external/io_int \
+                      -I$(WRF_SRC_ROOT_DIR)/frame \
+                      -I$(WRF_SRC_ROOT_DIR)/share \
+                      -I$(WRF_SRC_ROOT_DIR)/phys \
+                      -I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc \
+                       \
+                      
+REGISTRY        =    Registry
+
+LIB_BUNDLED     = \
+                     -L$(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 -lfftpack \
+                     -L$(WRF_SRC_ROOT_DIR)/external/io_grib1 -lio_grib1 \
+                     -L$(WRF_SRC_ROOT_DIR)/external/io_grib_share -lio_grib_share \
+                     -L$(WRF_SRC_ROOT_DIR)/external/io_int -lwrfio_int \
+                     $(ESMF_IO_LIB) \
+                     $(ESMF_IO_LIB) \
+                     $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a \
+                     $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o \
+                     $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o 
+
+LIB_EXTERNAL    = \
+                     $(WRF_SRC_ROOT_DIR)/external/io_netcdf/libwrfio_nf.a -L/donnees/aslmd/MODELES/NETCDF/pgf90_64/netcdf-3.6.1/lib -lnetcdf    
+
+LIB_LMD         = \
+                     -L/donnees/aslmd/MODELES/LMD_MM_MARS/mpi_64/WRFV2/mars_lmd/libo -llmd
+
+LIB             =    $(LIB_BUNDLED) $(LIB_EXTERNAL) $(LIB_LOCAL) $(LIB_LMD)
+LDFLAGS         =    $(OMP) $(FCFLAGS) $(LDFLAGS_LOCAL) 
+ENVCOMPDEFS     =    
+WRF_CHEM	=	0 
+CPPFLAGS        =    $(ARCHFLAGS) $(ENVCOMPDEFS) -I$(LIBINCLUDE) $(TRADFLAG) 
+NETCDFPATH      =    /donnees/aslmd/MODELES/NETCDF/pgf90_64/netcdf-3.6.1
+PNETCDFPATH     =    
+
+bundled:  wrf_ioapi_includes wrfio_grib_share wrfio_grib1 wrfio_int esmf_time fftpack
+external:  wrfio_nf   $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a gen_comms_rsllite module_dm_rsllite $(ESMF_TARGET)
+
+######################
+externals: bundled external
+
+gen_comms_serial :
+	( /bin/rm -f $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c )
+
+module_dm_serial :
+	( if [ ! -e module_dm.F ] ; then /bin/cp module_dm_warning module_dm.F ; cat module_dm_stubs.F >> module_dm.F ; fi )
+
+gen_comms_rsllite :
+	( if [ ! -e $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ] ; then \
+          /bin/cp $(WRF_SRC_ROOT_DIR)/tools/gen_comms_warning $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; \
+          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/gen_comms.c >> $(WRF_SRC_ROOT_DIR)/tools/gen_comms.c ; fi )
+
+module_dm_rsllite :
+	( if [ ! -e module_dm.F ] ; then /bin/cp module_dm_warning module_dm.F ; \
+          cat $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/module_dm.F >> module_dm.F ; fi )
+
+wrfio_nf : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_netcdf ; \
+          make NETCDFPATH="$(NETCDFPATH)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          CC="$(SCC)" CFLAGS="$(CFLAGS)" \
+          FC="$(SFC) $(PROMOTION) $(FCFLAGS)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+wrfio_pnf : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_pnetcdf ; \
+          make NETCDFPATH="$(PNETCDFPATH)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(FC) $(PROMOTION) $(FCFLAGS)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+wrfio_grib_share :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib_share ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) $(FCSUFFIX)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" archive) 
+
+wrfio_grib1 :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib1 ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) $(FCSUFFIX)" TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" archive)
+
+wrfio_grib2 :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_grib2 ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS) " RM="$(RM)" RANLIB="$(RANLIB)" \
+          CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) $(FCSUFFIX)" TRADFLAG="-traditional" AR="$(AR)" ARFLAGS="$(ARFLAGS)" \
+          FIXED="$(FORMAT_FIXED)" archive)
+
+wrfio_int : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_int ; \
+          make CC="$(CC)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" \
+          FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" \
+          TRADFLAG="$(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" all )
+
+esmf_time : 
+	( cd $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90 ; \
+          make FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" \
+          CPP="$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc -I. $(ARCHFLAGS) $(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+fftpack :
+	( cd $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5 ; \
+          make FC="$(SFC)" FFLAGS="$(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+$(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a :
+	( cd $(WRF_SRC_ROOT_DIR)/external/RSL_LITE ; make CC="$(CC) $(CFLAGS)" \
+          FC="$(FC) $(FCFLAGS) $(PROMOTION) $(BYTESWAPIO)" \
+          CPP="$(CPP) -I. $(ARCHFLAGS) $(TRADFLAG)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" ;\
+          $(RANLIB) $(WRF_SRC_ROOT_DIR)/external/RSL_LITE/librsl_lite.a )
+
+######################
+#	Macros, these should be generic for all machines
+
+LN	=	ln -sf
+MAKE	=	make -i -r
+RM	= 	rm -f
+
+
+# These sub-directory builds are identical across all architectures
+
+wrf_ioapi_includes :
+	( cd $(WRF_SRC_ROOT_DIR)/external/ioapi_share ; \
+          $(MAKE) NATIVE_RWORDSIZE="$(NATIVE_RWORDSIZE)" RWORDSIZE="$(RWORDSIZE)" AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+wrfio_esmf :
+	( cd $(WRF_SRC_ROOT_DIR)/external/io_esmf ; \
+          make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) $(ESMF_MOD_INC)" \
+          RANLIB="$(RANLIB)" CPP="$(CPP) $(POUND_DEF) " AR="$(AR)" ARFLAGS="$(ARFLAGS)" )
+
+#	There is probably no reason to modify these rules
+
+.F.i:
+	$(RM) $@
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.F > $@
+	mv $*.i $(DEVTOP)/pick/$*.f90
+	cp $*.F $(DEVTOP)/pick
+
+.F.o:
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -o $@ -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $*.f90
+
+.F.f90:
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $@
+	$(RM) $*.b
+
+.f90.o:
+	$(RM) $@
+	$(FC) -o $@ -c $(FCFLAGS) $(PROMOTION) $(FCSUFFIX) $*.f90
+
+.c.o:
+	$(RM) $@
+	$(CC) -o $@ -c $(CFLAGS) $*.c
+
+# A little more adventurous.  Allow full opt on 
+# mediation_integrate.o \
+# shift_domain_em.o \
+# solve_em.o  <-- gets a little kick from SOLVE_EM_SPECIAL too, if defined
+# mediation_feedback_domain.o : mediation_feedback_domain.F
+# mediation_force_domain.o : mediation_force_domain.F
+# mediation_interp_domain.o : mediation_interp_domain.F
+
+# compile these without high optimization to speed compile
+convert_nmm.o : convert_nmm.F
+init_modules_em.o : init_modules_em.F
+input_wrf.o : input_wrf.F
+module_io.o : module_io.F
+module_comm_dm.o : module_comm_dm.F
+module_configure.o : module_configure.F
+module_dm.o : module_dm.F
+module_domain.o : module_domain.F
+module_domain_type.o : module_domain_type.F
+module_alloc_space.o : module_alloc_space.F
+module_tiles.o : module_tiles.F
+module_fddaobs_rtfdda.o : module_fddaobs_rtfdda.F
+module_initialize.o : module_initialize.F
+module_physics_init.o : module_physics_init.F 
+module_initialize_b_wave.o : module_initialize_b_wave.F
+module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
+module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
+module_initialize_real.o : module_initialize_real.F
+module_initialize_real.o: module_initialize_real.F
+module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
+module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
+module_integrate.o : module_integrate.F
+module_io_mm5.o : module_io_mm5.F
+module_io_wrf.o : module_io_wrf.F
+module_si_io.o : module_si_io.F
+module_state_description.o : module_state_description.F 
+output_wrf.o : output_wrf.F
+solve_interface.o : solve_interface.F
+start_domain.o : start_domain.F
+start_domain_nmm.o : start_domain_nmm.F
+start_em.o : start_em.F
+wrf_auxhist10in.o : wrf_auxhist10in.F
+wrf_auxhist10out.o : wrf_auxhist10out.F
+wrf_auxhist11in.o : wrf_auxhist11in.F
+wrf_auxhist11out.o : wrf_auxhist11out.F
+wrf_auxhist1in.o : wrf_auxhist1in.F
+wrf_auxhist1out.o : wrf_auxhist1out.F
+wrf_auxhist2in.o : wrf_auxhist2in.F
+wrf_auxhist2out.o : wrf_auxhist2out.F
+wrf_auxhist3in.o : wrf_auxhist3in.F
+wrf_auxhist3out.o : wrf_auxhist3out.F
+wrf_auxhist4in.o : wrf_auxhist4in.F
+wrf_auxhist4out.o : wrf_auxhist4out.F
+wrf_auxhist5in.o : wrf_auxhist5in.F
+wrf_auxhist5out.o : wrf_auxhist5out.F
+wrf_auxhist6in.o : wrf_auxhist6in.F
+wrf_auxhist6out.o : wrf_auxhist6out.F
+wrf_auxhist7in.o : wrf_auxhist7in.F
+wrf_auxhist7out.o : wrf_auxhist7out.F
+wrf_auxhist8in.o : wrf_auxhist8in.F
+wrf_auxhist8out.o : wrf_auxhist8out.F
+wrf_auxhist9in.o : wrf_auxhist9in.F
+wrf_auxhist9out.o : wrf_auxhist9out.F
+wrf_auxinput10in.o : wrf_auxinput10in.F
+wrf_auxinput10out.o : wrf_auxinput10out.F
+wrf_auxinput11in.o : wrf_auxinput11in.F
+wrf_auxinput11out.o : wrf_auxinput11out.F
+wrf_auxinput1in.o : wrf_auxinput1in.F
+wrf_auxinput1out.o : wrf_auxinput1out.F
+wrf_auxinput2in.o : wrf_auxinput2in.F
+wrf_auxinput2out.o : wrf_auxinput2out.F
+wrf_auxinput3in.o : wrf_auxinput3in.F
+wrf_auxinput3out.o : wrf_auxinput3out.F
+wrf_auxinput4in.o : wrf_auxinput4in.F
+wrf_auxinput4out.o : wrf_auxinput4out.F
+wrf_auxinput5in.o : wrf_auxinput5in.F
+wrf_auxinput5out.o : wrf_auxinput5out.F
+wrf_auxinput6in.o : wrf_auxinput6in.F
+wrf_auxinput6out.o : wrf_auxinput6out.F
+wrf_auxinput7in.o : wrf_auxinput7in.F
+wrf_auxinput7out.o : wrf_auxinput7out.F
+wrf_auxinput8in.o : wrf_auxinput8in.F
+wrf_auxinput8out.o : wrf_auxinput8out.F
+wrf_auxinput9in.o : wrf_auxinput9in.F
+wrf_auxinput9out.o : wrf_auxinput9out.F
+wrf_bdyin.o : wrf_bdyin.F
+wrf_bdyout.o : wrf_bdyout.F
+wrf_ext_read_field.o : wrf_ext_read_field.F
+wrf_ext_write_field.o : wrf_ext_write_field.F
+wrf_fddaobs_in.o : wrf_fddaobs_in.F
+wrf_histin.o : wrf_histin.F
+wrf_histout.o : wrf_histout.F
+wrf_inputin.o : wrf_inputin.F
+wrf_inputout.o : wrf_inputout.F
+wrf_restartin.o : wrf_restartin.F
+wrf_restartout.o : wrf_restartout.F
+wrf_tsin.o : wrf_tsin.F
+nl_get_0_routines.o : nl_get_0_routines.F
+nl_get_1_routines.o : nl_get_1_routines.F
+nl_set_0_routines.o : nl_set_0_routines.F
+nl_set_1_routines.o : nl_set_1_routines.F
+
+convert_nmm.o \
+init_modules_em.o \
+module_comm_dm.o \
+module_dm.o \
+module_alloc_space.o \
+module_fddaobs_rtfdda.o \
+module_initialize.o \
+module_initialize_b_wave.o \
+module_initialize_hill2d_x.o \
+module_initialize_quarter_ss.o \
+module_initialize_real.o \
+module_initialize_squall2d_x.o \
+module_initialize_squall2d_y.o \
+module_integrate.o \
+module_io_mm5.o \
+module_io_wrf.o \
+module_si_io.o \
+module_tiles.o \
+output_wrf.o \
+solve_interface.o \
+start_domain.o \
+start_domain_nmm.o \
+start_em.o \
+wrf_fddaobs_in.o \
+wrf_tsin.o :
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(PROMOTION) $(FCNOOPT) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $(OMP) $*.f90
+
+#solve_em.o :
+#	$(RM) $@
+#	$(SED_FTN) $*.F > $*.b 
+#	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $*.b  > $*.f90
+#	$(RM) $*.b
+#	$(FC) -o $@ -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $(SOLVE_EM_SPECIAL) $(OMP) $*.f90
+
+module_sf_ruclsm.o : module_sf_ruclsm.F
+module_cu_kf.o : module_cu_kf.F
+
+module_sf_ruclsm.o module_cu_kf.o :
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(PROMOTION) $(FCREDUCEDOPT) $(FCBASEOPTS) $(MODULE_DIRS) $(FCSUFFIX) $(OMP) $*.f90
+
+# compile without OMP
+input_wrf.o \
+module_domain.o \
+module_domain_type.o \
+module_physics_init.o \
+module_io.o \
+wrf_auxhist10in.o \
+wrf_auxhist10out.o \
+wrf_auxhist11in.o \
+wrf_auxhist11out.o \
+wrf_auxhist1in.o \
+wrf_auxhist1out.o \
+wrf_auxhist2in.o \
+wrf_auxhist2out.o \
+wrf_auxhist3in.o \
+wrf_auxhist3out.o \
+wrf_auxhist4in.o \
+wrf_auxhist4out.o \
+wrf_auxhist5in.o \
+wrf_auxhist5out.o \
+wrf_auxhist6in.o \
+wrf_auxhist6out.o \
+wrf_auxhist7in.o \
+wrf_auxhist7out.o \
+wrf_auxhist8in.o \
+wrf_auxhist8out.o \
+wrf_auxhist9in.o \
+wrf_auxhist9out.o \
+wrf_auxinput10in.o \
+wrf_auxinput10out.o \
+wrf_auxinput11in.o \
+wrf_auxinput11out.o \
+wrf_auxinput1in.o \
+wrf_auxinput1out.o \
+wrf_auxinput2in.o \
+wrf_auxinput2out.o \
+wrf_auxinput3in.o \
+wrf_auxinput3out.o \
+wrf_auxinput4in.o \
+wrf_auxinput4out.o \
+wrf_auxinput5in.o \
+wrf_auxinput5out.o \
+wrf_auxinput6in.o \
+wrf_auxinput6out.o \
+wrf_auxinput7in.o \
+wrf_auxinput7out.o \
+wrf_auxinput8in.o \
+wrf_auxinput8out.o \
+wrf_auxinput9in.o \
+wrf_auxinput9out.o \
+wrf_bdyin.o \
+wrf_bdyout.o \
+wrf_ext_read_field.o \
+wrf_ext_write_field.o \
+wrf_histin.o \
+wrf_histout.o \
+wrf_inputin.o \
+wrf_inputout.o \
+wrf_restartin.o \
+wrf_restartout.o \
+module_state_description.o \
+nl_set_0_routines.o \
+nl_set_1_routines.o \
+nl_get_0_routines.o \
+nl_get_1_routines.o \
+module_configure.o :
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I$(WRF_SRC_ROOT_DIR)/inc $(CPPFLAGS) $(OMPCPP) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(PROMOTION) $(FCSUFFIX) $(FCNOOPT) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf_example
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf_example	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/configure.wrf_example	(revision 142)
@@ -0,0 +1,263 @@
+# configure.wrf
+#
+# This file was automatically generated by the configure script in the
+# top level directory. You may make changes to the settings in this
+# file but be aware they will be overwritten each time you run configure.
+# Ordinarily, it is necessary to run configure once, when the code is
+# first installed.
+#
+# To permanently change options, change the settings for your platform
+# in the file arch/configure.defaults then rerun configure.
+#
+SHELL           =       /bin/sh
+DEVTOP          =       `pwd`
+LIBINCLUDE      =       .
+.SUFFIXES: .F .i .o .f90 .c
+
+#### Get core settings from environment (set in compile script)
+#### Note to add a core, this has to be added to.
+
+COREDEFS = -DEM_CORE=$(WRF_EM_CORE) \
+           -DNMM_CORE=$(WRF_NMM_CORE) -DNMM_MAX_DIM=2600 \
+	   -DCOAMPS_CORE=$(WRF_COAMPS_CORE) \
+           -DEXP_CORE=$(WRF_EXP_CORE)
+
+#### Single location for defining total number of domains.  You need
+#### at least 1 + 2*(number of total nests).  For example, 1 coarse
+#### grid + three fine grids = 1 + 2(3) = 7, so MAX_DOMAINS=7.
+
+MAX_DOMAINS	=	21
+
+#### DM buffer length for the configuration flags.
+
+CONFIG_BUF_LEN	=	16384
+
+
+##############################################################################
+#### The settings in this section are defaults that may be overridden by the 
+#### architecture-specific settings in the next section.  
+##############################################################################
+
+##############################################################################
+#### NOTE:  Do not modify these default values here.  To override these 
+####        values, make changes after "Architecture specific settings".  
+##############################################################################
+
+#### Native size (in bytes) of Fortran REAL data type on this architecture ####
+#### Note:  to change real wordsize (for example, to promote REALs from 
+####        4-byte to 8-byte), modify the definition of RWORDSIZE in the 
+####        section following "Architecture specific settings".  Do not 
+####        change NATIVE_RWORDSIZE as is it architecture-specific.  
+NATIVE_RWORDSIZE = 4
+
+#### Default sed command and script for Fortran source files ####
+SED_FTN = sed -f ../arch/standard.sed
+
+# Hack to work around $(PWD) not changing during OSF1 build.  
+# $(IO_GRIB_SHARE_DIR) is reset during the OSF1 build only.  
+IO_GRIB_SHARE_DIR = 
+
+#### ESMF switches                 ####
+#### These are set up by Config.pl ####
+# switch to use separately installed ESMF library for coupling:  1==true
+ESMF_COUPLING       = 0
+# select dependences on module_utility.o
+ESMF_MOD_DEPENDENCE = ../external/esmf_time_f90/module_utility.o
+# select -I options for separately installed ESMF library, if present
+ESMF_MOD_INC        = 
+# select -I options for external/io_esmf vs. external/esmf_time_f90
+ESMF_IO_INC         = -I../external/esmf_time_f90
+# select cpp token for external/io_esmf vs. external/esmf_time_f90
+ESMF_IO_DEFS        = 
+# select build target for external/io_esmf vs. external/esmf_time_f90
+ESMF_TARGET         = esmf_time
+
+##############################################################################
+
+
+#### Architecture specific settings ####
+
+# Settings for PC Linux x86_64 (IA64 and Opteron), PGI 5.2 or higher DM-Parallel   (RSL_LITE, MPICH, Allows nesting, No periodic LBCs)
+#        Note that for 5.1.x comment out -Mpia=fast
+#
+# Notes: for experimental implementation of moving nests, add -DMOVE_NESTS to ARCHFLAGS
+#        for experimental implementation of vortex tracking nests, add -DMOVE_NESTS -DVORTEX_CENTER to ARCHFLAGS
+#
+DMPARALLEL      =       1
+MAX_PROC        =       1024
+FC              =       /donnees/aslmd/MODELES/MPI/mpich2-1.0.8/bin/mpif90
+LD              =       /donnees/aslmd/MODELES/MPI/mpich2-1.0.8/bin/mpif90
+CC              =       /donnees/aslmd/MODELES/MPI/mpich2-1.0.8/bin/mpicc -DMPI2_SUPPORT -DMPI2_SUPPORT -DFSEEKO64_OK 
+SCC		=	gcc
+SFC             =       pgf90
+RWORDSIZE       =       $(NATIVE_RWORDSIZE)
+PROMOTION	=	-r$(RWORDSIZE) -i4
+CFLAGS          =       -DDM_PARALLEL \
+                        -DMAXDOM_MAKE=$(MAX_DOMAINS) -DMAXPROC_MAKE=$(MAX_PROC) -I../external/RSL_LITE \
+                        -DLANDREAD_STUB
+FCOPTIM         =       -fastsse #-Mipa=fast
+FCDEBUG		=	#-g
+#FCBASEOPTS      =       -w -byteswapio -Ktrap=fp -Mfree $(FCDEBUG)
+FCBASEOPTS      =       -w -byteswapio -Mfree $(FCDEBUG)
+FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
+ARCHFLAGS       =       -DGRIB1  -DINTIO -DDM_PARALLEL \
+                        -DIWORDSIZE=4 -DDWORDSIZE=8 -DRWORDSIZE=$(RWORDSIZE) -DLWORDSIZE=4 -DNETCDF \
+			-DLIMIT_ARGS -DLANDREAD_STUB
+# machine-specific flags needed to link in ESMF library (C++ run-time-library, etc.)
+ESMF_LIB_FLAGS  =       
+ESMF_IO_LIB     =       -L../external/esmf_time_f90 -lesmf_time
+ESMF_IO_LIB_EXT =       -L../../external/esmf_time_f90 -lesmf_time
+INCLUDE_MODULES =       -module ../main -I../external/io_netcdf -I../external/io_int -I../external/esmf_time_f90 \
+                        -I../external -I../frame -I../share -I../phys -I../inc -I../chem
+PERL            =       perl
+REGISTRY        =       Registry
+LIB             =       -L../external/io_netcdf -lwrfio_nf -L/donnees/aslmd/MODELES/NETCDF/pgf90_64/netcdf-3.6.1/lib -lnetcdf -L../external/RSL_LITE -lrsl_lite \
+                        -L../external/io_grib1 -lio_grib1 \
+                         \
+                        -L../external/io_grib_share -lio_grib_share \
+			-L../external/io_int -lwrfio_int \
+			../frame/module_internal_header_util.o ../frame/pack_utils.o -L../external/esmf_time_f90 -lesmf_time -L../mars_lmd/libo -llmd 
+LDFLAGS         =       -byteswapio 
+ENVCOMPDEFS	=	
+WRF_CHEM	=	0 
+CPP             =       /lib/cpp -C -P -traditional
+POUND_DEF	=	-DNO_RRTM_PHYSICS  -traditional $(COREDEFS) -DNONSTANDARD_SYSTEM -DCONFIG_BUF_LEN=$(CONFIG_BUF_LEN) -DMAX_DOMAINS_F=$(MAX_DOMAINS)
+CPPFLAGS        =       -I$(LIBINCLUDE) -C -P $(ARCHFLAGS) -I../external/RSL_LITE -C -P `cat ../inc/dm_comm_cpp_flags` $(ENVCOMPDEFS) $(POUND_DEF)
+AR              =       ar ru
+M4              =       m4 -B 14000
+RANLIB          =       ranlib
+NETCDFPATH	=	/donnees/aslmd/MODELES/NETCDF/pgf90_64/netcdf-3.6.1
+CC_TOOLS        =       cc
+
+externals : wrf_ioapi_includes wrfio_nf wrfio_grib_share wrfio_grib1  ../external/RSL_LITE/librsl_lite.a wrfio_int gen_comms.c module_dm.F esmf_time
+
+gen_comms.c : ../external/RSL_LITE/gen_comms.c
+	( /bin/cp ../tools/gen_comms_warning ../tools/gen_comms.c ; \
+          cat ../external/RSL_LITE/gen_comms.c >> ../tools/gen_comms.c )
+
+module_dm.F : ../external/RSL_LITE/module_dm.F
+	( /bin/cp module_dm_warning module_dm.F ; cat ../external/RSL_LITE/module_dm.F >> module_dm.F )
+
+wrfio_nf :
+	( cd ../external/io_netcdf ; \
+	  make NETCDFPATH=/donnees/aslmd/MODELES/NETCDF/pgf90_64/netcdf-3.6.1 RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -w" TRADFLAG="-traditional" )
+
+wrfio_grib_share :
+	( cd ../external/io_grib_share ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)
+
+wrfio_grib1 :
+	( cd ../external/io_grib1 ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" archive)
+
+wrfio_grib2 :
+	( cd ../external/io_grib2 ; \
+          make CC="$(SCC)" CFLAGS="$(CFLAGS) " RM="$(RM)" RANLIB="$(RANLIB)" CPP="$(CPP)" FC="$(SFC) $(PROMOTION) -I. $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" FIXED="-Mfixed" archive)
+
+wrfio_int :
+	( cd ../external/io_int ; \
+          make CC="$(CC)" RANLIB="$(RANLIB)" CPP="$(CPP)" SFC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" FC="$(SFC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) -w" TRADFLAG="-traditional" all )
+
+esmf_time : 
+	( cd ../external/esmf_time_f90 ; \
+	  make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS)" RANLIB="$(RANLIB)" CPP="$(CPP) -I../../inc -I. $(POUND_DEF)" )
+
+../external/RSL_LITE/librsl_lite.a :
+	( cd ../external/RSL_LITE ; make CC="$(CC)" FC="$(FC) $(PROMOTION) $(FCFLAGS) -byteswapio" MAX_DOMAINS=$(MAX_DOMAINS) MAX_PROC=$(MAX_PROC) LEARN_BCAST=-DLEARN_BCAST )
+
+# compile these without high optimization to speed compile
+solve_interface.o : solve_interface.F
+shift_domain_em.o : shift_domain_em.F
+module_io_mm5.o : module_io_mm5.F
+module_si_io.o : module_si_io.F
+module_io_wrf.o : module_io_wrf.F
+module_domain.o : module_domain.F
+module_start.o : module_start.F
+module_initialize.o : module_initialize.F
+module_initialize_b_wave.o : module_initialize_b_wave.F
+module_initialize_hill2d_x.o : module_initialize_hill2d_x.F
+module_initialize_quarter_ss.o : module_initialize_quarter_ss.F
+module_initialize_squall2d_x.o : module_initialize_squall2d_x.F
+module_initialize_squall2d_y.o : module_initialize_squall2d_y.F
+module_initialize_real.o : module_initialize_real.F
+module_dm.o : module_dm.F
+start_domain.o : start_domain.F
+mediation_integrate.o : mediation_integrate.F
+module_configure.o : module_configure.F
+
+solve_interface.o                                              \
+shift_domain_em.o                                              \
+module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o \
+module_start.o module_initialize.o module_initialize_b_wave.o  \
+module_initialize_hill2d_x.o module_initialize_quarter_ss.o    \
+module_initialize_squall2d_x.o module_initialize_squall2d_y.o  \
+mediation_integrate.o \
+module_configure.o                                             \
+module_initialize_real.o module_dm.o start_domain.o :
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I../inc $(CPPFLAGS) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(PROMOTION) $(FCBASEOPTS) $(MODULE_DIRS) $*.f90
+
+###########################################################
+
+
+# These sub-directory builds are identical across all architectures
+wrfio_esmf :
+	( cd ../external/io_esmf ; \
+	make FC="$(FC) $(PROMOTION) $(FCDEBUG) $(FCBASEOPTS) $(ESMF_MOD_INC)" RANLIB="$(RANLIB)" CPP="$(CPP) $(POUND_DEF) " )
+
+
+#
+#	Macros, these should be generic for all machines
+
+LN	=	ln -sf
+MAKE	=	make -i -r
+RM	= 	rm -f
+
+#	There is probably no reason to modify these rules
+
+wrf_ioapi_includes :
+	( cd ../external/ioapi_share ; \
+	$(MAKE) NATIVE_RWORDSIZE="$(NATIVE_RWORDSIZE)" RWORDSIZE="$(RWORDSIZE)" )
+
+.F.i:
+	$(RM) $@
+	$(CPP) -I../inc $(CPPFLAGS) $*.F > $@
+	mv $*.i $(DEVTOP)/pick/$*.f90
+	cp $*.F $(DEVTOP)/pick
+
+.F.o:
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I../inc $(CPPFLAGS) $*.b  > $*.f90
+	$(RM) $*.b
+	$(FC) -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $*.f90
+#PGI	if [ ! -e $@ ] ; then \
+#PGI	sleep 10 ; $(FC) -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $*.f90 ; \
+#PGI	fi
+#PGI	if [ ! -e $@ ] ; then \
+#PGI	sleep 10 ; $(FC) -c $(FCFLAGS) $(MODULE_DIRS) $(PROMOTION) $(FCSUFFIX) $*.f90 ; \
+#PGI	fi
+
+.F.f90:
+	$(RM) $@
+	$(SED_FTN) $*.F > $*.b 
+	$(CPP) -I../inc $(CPPFLAGS) $*.b  > $@
+	$(RM) $*.b
+
+.f90.o:
+	$(RM) $@
+	$(FC) -c $(FCFLAGS) $(PROMOTION) $(FCSUFFIX) $*.f90
+#PGI	if [ ! -e $@ ] ; then \
+#PGI	sleep 10 ; $(FC) -c $(FCFLAGS) $(PROMOTION) $(FCSUFFIX) $*.f90 ; \
+#PGI	fi
+#PGI	if [ ! -e $@ ] ; then \
+#PGI	sleep 10 ; $(FC) -c $(FCFLAGS) $(PROMOTION) $(FCSUFFIX) $*.f90 ; \
+#PGI	fi
+
+.c.o:
+	$(RM) $@
+	$(CC) -c $(CFLAGS) $*.c
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/call_meso_inifis.inc
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/call_meso_inifis.inc	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/call_meso_inifis.inc	(revision 142)
@@ -0,0 +1,19 @@
+!
+! part of the module_lmd_driver program
+! that is (number of domains)-dependent
+!
+
+
+       CALL meso_inifis(ngridmx,nlayer,nqmx,dt, &
+               wday_ini,wdaysec,               &
+               wappel_phys,wecri_phys,         &
+               lat_vec,lon_vec,aire_vec,1/reradius,g,r_d,cp,           &
+               womeg,wmugaz,                                           &
+               wyear_day,wperiheli,waphelie,wperi_day,wobliquit,       &
+               wz0,wemin_turb,wlmixmin,                                &
+               wemissiv,wemissiceN,wemissiceS,walbediceN,walbediceS,   &
+               wiceradiusN,wiceradiusS,wdtemisiceN,wdtemisiceS,        &
+               walbedodat,winertiedat,wphisfi,                         &
+               wzmea,wzstd,wzsig,wzgam,wzthe,                          &
+               wtheta,wpsi)
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/call_meso_physiq.inc
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/call_meso_physiq.inc	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/call_meso_physiq.inc	(revision 142)
@@ -0,0 +1,17 @@
+!
+! part of the module_lmd_driver program
+! that is (number of domains)-dependent
+!
+
+
+       CALL meso_physiq (ngrid,nlayer,nq,                              &
+               firstcall,lastcall,wday_ini,pday,ptime,ptimestep,       &
+               pplev,pplay,pphi,pu, pv, pt, pq, pw,                    &
+               pdu, pdv, pdt, pdq, pdpsrf, tracerdyn,          &
+               wtsurf,wtsoil,wemis,wq2,wqsurf,wco2ice,                 &
+               wecri_phys_sec,                &
+	       output_tab2d, output_tab3d)
+
+
+
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output1.inc
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output1.inc	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output1.inc	(revision 142)
@@ -0,0 +1,6 @@
+       TSURF,&
+       TAU_DUST,&
+       SWDOWN,&
+       LWDOWN,&
+       SWUP,&
+       LWUP,&
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output2.inc
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output2.inc	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output2.inc	(revision 142)
@@ -0,0 +1,10 @@
+REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT)  :: &
+       TSURF,&
+       TAU_DUST,&
+       SWDOWN,&
+       LWDOWN,&
+       SWUP,&
+       LWUP,&
+   PSFC,TSK
+REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(OUT)  :: &
+   RTHBLTEN,RUBLTEN,RVBLTEN
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output3.inc
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output3.inc	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output3.inc	(revision 142)
@@ -0,0 +1,6 @@
+TSURF(i,j) = output_tab2d(subs,ind_TSURF)
+TAU_DUST(i,j) = output_tab2d(subs,ind_TAU_DUST)
+SWDOWN(i,j) = output_tab2d(subs,ind_SWDOWN)
+LWDOWN(i,j) = output_tab2d(subs,ind_LWDOWN)
+SWUP(i,j) = output_tab2d(subs,ind_SWUP)
+LWUP(i,j) = output_tab2d(subs,ind_LWUP)
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output4.inc
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output4.inc	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/module_lmd_driver_output4.inc	(revision 142)
@@ -0,0 +1,6 @@
+  &    ,TSURF=grid%TSURF   &
+  &    ,TAU_DUST=grid%TAU_DUST   &
+  &    ,SWDOWN=grid%SWDOWN   &
+  &    ,LWDOWN=grid%LWDOWN   &
+  &    ,SWUP=grid%SWUP   &
+  &    ,LWUP=grid%LWUP   &
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/wrf_output_2d.h
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/wrf_output_2d.h	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/wrf_output_2d.h	(revision 142)
@@ -0,0 +1,10 @@
+!-------------------
+! INCLUDE wrf_output_2d.h
+!-------------------
+      INTEGER, PARAMETER :: ind_TSURF = 1
+      INTEGER, PARAMETER :: ind_TAU_DUST = 2
+      INTEGER, PARAMETER :: ind_SWDOWN = 3
+      INTEGER, PARAMETER :: ind_LWDOWN = 4
+      INTEGER, PARAMETER :: ind_SWUP = 5
+      INTEGER, PARAMETER :: ind_LWUP = 6
+      INTEGER, PARAMETER :: n2d = 6
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/wrf_output_3d.h
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/wrf_output_3d.h	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/inc_old/wrf_output_3d.h	(revision 142)
@@ -0,0 +1,4 @@
+!-------------------
+! INCLUDE wrf_output_3d.h
+!-------------------
+           INTEGER, PARAMETER :: n3d = 1
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/ls2sol.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/ls2sol.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/res/ls2sol.F	(revision 142)
@@ -0,0 +1,47 @@
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+      real function ls2sol(ls)
+
+c  Returns solar longitude, Ls (in deg.), from day number (in sol),
+c  where sol=0=Ls=0 at the northern hemisphere spring equinox
+
+      implicit none
+
+c  Arguments:
+      real ls
+
+c  Local:
+      double precision xref,zx0,zteta,zz
+c	xref: mean anomaly, zteta: true anomaly, zx0: eccentric anomaly
+      double precision year_day 
+      double precision peri_day,timeperi,e_elips
+      double precision pi,degrad 
+      parameter (year_day=668.6d0) ! number of sols in a amartian year
+c      data peri_day /485.0/
+      parameter (peri_day=485.35d0) ! date (in sols) of perihelion
+c  timeperi: 2*pi*( 1 - Ls(perihelion)/ 360 ); Ls(perihelion)=250.99
+      parameter (timeperi=1.90258341759902d0)
+      parameter (e_elips=0.0934d0)  ! eccentricity of orbit
+      parameter (pi=3.14159265358979d0)
+      parameter (degrad=57.2957795130823d0)
+
+      if (abs(ls).lt.1.0e-5) then
+         if (ls.ge.0.0) then
+            ls2sol = 0.0
+         else
+            ls2sol = year_day
+         end if
+         return
+      end if
+
+      zteta = ls/degrad + timeperi
+      zx0 = 2.0*datan(dtan(0.5*zteta)/dsqrt((1.+e_elips)/(1.-e_elips)))
+      xref = zx0-e_elips*dsin(zx0)
+      zz = xref/(2.*pi)
+      ls2sol = zz*year_day + peri_day
+      if (ls2sol.lt.0.0) ls2sol = ls2sol + year_day
+      if (ls2sol.ge.year_day) ls2sol = ls2sol - year_day
+
+      return
+      end
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/scridl
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/scridl	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/scridl	(revision 142)
@@ -0,0 +1,4 @@
+#! /bin/bash
+
+echo "getturb & exit" | /opt/idl-6.4/idl/bin/idl > logidl 2> logidl_err &
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/solve_em.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/solve_em.F	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/solve_em.F	(revision 142)
@@ -0,0 +1,3258 @@
+!WRF:MEDIATION_LAYER:SOLVER
+
+SUBROUTINE solve_em ( grid , config_flags  &
+! Arguments generated from Registry
+#include "dummy_new_args.inc"
+!
+                    )
+! Driver layer modules
+   USE module_state_description
+   USE module_domain, ONLY : domain, get_ijk_from_grid, get_ijk_from_subgrid, domain_get_current_time, domain_get_start_time
+   USE module_configure, ONLY : grid_config_rec_type
+   USE module_driver_constants
+   USE module_machine
+   USE module_tiles, ONLY : set_tiles
+#ifdef DM_PARALLEL
+   USE module_dm, ONLY : local_communicator, mytask, ntasks, ntasks_x, ntasks_y, local_communicator_periodic, wrf_dm_maxval
+#else
+   USE module_dm
+#endif
+   USE module_comm_dm
+   USE module_utility
+! Mediation layer modules
+! Model layer modules
+   USE module_model_constants
+   USE module_small_step_em
+   USE module_em
+   USE module_big_step_utilities_em
+   USE module_bc
+   USE module_bc_em
+   USE module_solvedebug_em
+   USE module_physics_addtendc
+   USE module_diffusion_em
+   USE module_polarfft
+!!!!****MARS MARS
+!!!!****MARS MARS
+!   USE module_microphysics_driver
+!   USE module_microphysics_zero_out
+!   USE module_fddaobs_driver
+!   USE module_diagnostics
+#ifdef WRF_CHEM
+   USE module_input_chem_data
+   USE module_chem_utilities
+#endif
+   USE module_first_rk_step_part1
+   USE module_first_rk_step_part2
+   USE module_llxy, ONLY : proj_cassini
+
+   IMPLICIT NONE
+
+   !  Input data.
+
+   TYPE(domain) , TARGET          :: grid
+
+   !  Definitions of dummy arguments to this routine (generated from Registry).
+#include "dummy_new_decl.inc"
+
+   !  Structure that contains run-time configuration (namelist) data for domain
+   TYPE (grid_config_rec_type) , INTENT(IN)          :: config_flags
+
+   ! Local data
+
+   INTEGER                         :: k_start , k_end, its, ite, jts, jte
+   INTEGER                         :: ids , ide , jds , jde , kds , kde , &
+                                      ims , ime , jms , jme , kms , kme , &
+                                      ips , ipe , jps , jpe , kps , kpe
+
+   INTEGER                         :: sids , side , sjds , sjde , skds , skde , &
+                                      sims , sime , sjms , sjme , skms , skme , &
+                                      sips , sipe , sjps , sjpe , skps , skpe
+
+
+   INTEGER ::              imsx, imex, jmsx, jmex, kmsx, kmex,    &
+                           ipsx, ipex, jpsx, jpex, kpsx, kpex,    &
+                           imsy, imey, jmsy, jmey, kmsy, kmey,    &
+                           ipsy, ipey, jpsy, jpey, kpsy, kpey
+
+   INTEGER                         :: ij , iteration
+   INTEGER                         :: im , num_3d_m , ic , num_3d_c , is , num_3d_s
+   INTEGER                         :: loop
+   INTEGER                         :: sz
+   INTEGER                         :: iswater
+
+   LOGICAL                         :: specified_bdy, channel_bdy
+
+   REAL                            :: t_new
+
+! storage for tendencies and decoupled state (generated from Registry)
+
+#include <i1_decl.inc>
+! Previous time level of tracer arrays now defined as i1 variables;
+! the state 4d arrays now redefined as 1-time level arrays in Registry.
+! Benefit: save memory in nested runs, since only 1 domain is active at a
+! time.  Potential problem on stack-limited architectures: increases
+! amount of data on program stack by making these automatic arrays.
+
+   INTEGER :: rc 
+   INTEGER :: number_of_small_timesteps, rk_step
+   INTEGER :: klevel,ijm,ijp,i,j,k,size1,size2    ! for prints/plots only
+   INTEGER :: idum1, idum2, dynamics_option
+
+   INTEGER :: rk_order, iwmax, jwmax, kwmax
+   REAL :: dt_rk, dts_rk, dts, dtm, wmax
+   REAL , ALLOCATABLE , DIMENSION(:)  :: max_vert_cfl_tmp, max_horiz_cfl_tmp
+   LOGICAL :: leapfrog
+   INTEGER :: l,kte,kk
+   REAL :: curr_secs
+   INTEGER :: num_sound_steps
+   INTEGER :: idex, jdex
+   REAL    :: max_msft
+   REAL    :: spacing
+
+   INTEGER :: ii, jj !kk is above after l,kte
+   REAL    :: dclat
+   INTEGER :: debug_level
+
+! urban related variables
+   INTEGER :: NUM_ROOF_LAYERS, NUM_WALL_LAYERS, NUM_ROAD_LAYERS   ! urban
+
+   TYPE(WRFU_TimeInterval)                    :: tmpTimeInterval
+   REAL                                       :: real_time
+   LOGICAL                                    :: adapt_step_flag
+
+! Define benchmarking timers if -DBENCH is compiled
+#include <bench_solve_em_def.h>
+
+!----------------------
+! Executable statements
+!----------------------
+
+!<DESCRIPTION>
+!<pre>
+! solve_em is the main driver for advancing a grid a single timestep.
+! It is a mediation-layer routine -> DM and SM calls are made where 
+! needed for parallel processing.  
+!
+! solve_em can integrate the equations using 3 time-integration methods
+!      
+!    - 3rd order Runge-Kutta time integration (recommended)
+!      
+!    - 2nd order Runge-Kutta time integration
+!      
+! The main sections of solve_em are
+!     
+! (1) Runge-Kutta (RK) loop
+!     
+! (2) Non-timesplit physics (i.e., tendencies computed for updating
+!     model state variables during the first RK sub-step (loop)
+!     
+! (3) Small (acoustic, sound) timestep loop - within the RK sub-steps
+!     
+! (4) scalar advance for moist and chem scalar variables (and TKE)
+!     within the RK sub-steps.
+!     
+! (5) time-split physics (after the RK step), currently this includes
+!     only microphyics
+!
+! A more detailed description of these sections follows.
+!</pre>
+!</DESCRIPTION>
+
+! Initialize timers if compiled with -DBENCH
+#include <bench_solve_em_init.h>
+
+!  set runge-kutta solver (2nd or 3rd order)
+
+   dynamics_option = config_flags%rk_ord
+
+!  Obtain dimension information stored in the grid data structure.
+
+   CALL get_ijk_from_grid (  grid ,                   &
+                             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 )
+ 
+   CALL get_ijk_from_subgrid (  grid ,                   &
+                             sids, side, sjds, sjde, skds, skde,    &
+                             sims, sime, sjms, sjme, skms, skme,    &
+                             sips, sipe, sjps, sjpe, skps, skpe    )
+   k_start         = kps
+   k_end           = kpe
+
+   num_3d_m        = num_moist
+   num_3d_c        = num_chem
+   num_3d_s        = num_scalar
+
+
+!  Compute these starting and stopping locations for each tile and number of tiles.
+!  See: http://www.mmm.ucar.edu/wrf/WG2/topics/settiles
+   CALL set_tiles ( grid , ids , ide , jds , jde , ips , ipe , jps , jpe )
+
+!  Max values of CFL for adaptive time step scheme
+
+   ALLOCATE (max_vert_cfl_tmp(grid%num_tiles))
+   ALLOCATE (max_horiz_cfl_tmp(grid%num_tiles))
+
+   grid%itimestep = grid%itimestep + 1
+
+   IF (config_flags%polar) dclat = 90./REAL(jde-jds) !(0.5 * 180/ny)
+
+!**********************************************************************
+!
+!  LET US BEGIN.......
+!
+!<DESCRIPTION>
+!<pre>
+! (1) RK integration loop is named the "Runge_Kutta_loop:"
+!
+!   Predictor-corrector type time integration.
+!   Advection terms are evaluated at time t for the predictor step,
+!   and advection is re-evaluated with the latest predicted value for
+!   each succeeding time corrector step
+!
+!   2nd order Runge Kutta (rk_order = 2):
+!   Step 1 is taken to the midpoint predictor, step 2 is the full step.
+!
+!   3rd order Runge Kutta (rk_order = 3):
+!   Step 1 is taken to from t to dt/3, step 2 is from t to dt/2,
+!   and step 3 is from t to dt.
+!
+!   non-timesplit physics are evaluated during first RK step and
+!   these physics tendencies are stored for use in each RK pass.
+!</pre>
+!</DESCRIPTION>
+!**********************************************************************
+
+#ifdef WRF_CHEM
+!
+!    prepare chem aerosols for advection before communication
+!
+
+   kte=min(k_end,kde-1)
+# ifdef DM_PARALLEL
+   if ( num_chem >= PARAM_FIRST_SCALAR ) then
+!-----------------------------------------------------------------------
+! see matching halo calls below for stencils
+!--------------------------------------------------------------
+     CALL wrf_debug ( 200 , ' call HALO_RK_CHEM' )
+     IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
+#      include "HALO_EM_CHEM_E_3.inc"
+       IF( config_flags%progn > 0 ) THEN
+#         include "HALO_EM_SCALAR_E_3.inc"
+       ENDIF
+     ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
+#      include "HALO_EM_CHEM_E_5.inc"
+       IF( config_flags%progn > 0 ) THEN
+#         include "HALO_EM_SCALAR_E_5.inc"
+      ENDIF
+     ELSE
+       WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
+       CALL wrf_error_fatal(TRIM(wrf_err_message))
+     ENDIF
+   ENDIF
+# endif
+!--------------------------------------------------------------
+#endif
+
+   rk_order = config_flags%rk_ord
+
+
+  !
+  ! Calculate current time in seconds since beginning of model run.
+  !   Unfortunately, ESMF does not seem to have a way to return
+  !   floating point seconds based on a TimeInterval.  So, we will
+  !   calculate it here--but, this is not clean!!
+  !
+   tmpTimeInterval = domain_get_current_time ( grid ) - domain_get_start_time ( grid )
+   curr_secs = real_time(tmpTimeInterval)
+
+!-----------------------------------------------------------------------------
+! Adaptive time step: Added by T. Hutchinson, WSI  3/5/07
+!   In this call, we do the time-step adaptation and set time-dependent lateral
+!   boundary condition nudging weights.
+!
+   IF (config_flags%use_adaptive_time_step) THEN
+     CALL adapt_timestep(grid, config_flags)
+     adapt_step_flag = .TRUE.
+   ELSE
+     adapt_step_flag = .FALSE.
+   ENDIF
+! End of adaptive time step modifications
+!-----------------------------------------------------------------------------
+
+   IF ( grid%time_step_sound == 0 ) THEN
+! This function will give 4 for 6*dx and 6 for 10*dx and returns even numbers only
+     spacing = min(grid%dx, grid%dy)
+     IF ( ( config_flags%use_adaptive_time_step ) .AND. ( config_flags%map_proj == PROJ_CASSINI ) ) THEN
+       max_msft=MIN ( MAX(grid%max_msftx, grid%max_msfty) , &
+                      1.0/COS(config_flags%fft_filter_lat*degrad) )
+       num_sound_steps = max ( 2 * ( INT (300. * grid%dt / (spacing / max_msft) - 0.01 ) + 1 ), 4 )
+     ELSE IF  ( config_flags%use_adaptive_time_step ) THEN
+       max_msft= MAX(grid%max_msftx, grid%max_msfty)
+       num_sound_steps = max ( 2 * ( INT (300. * grid%dt / (spacing / max_msft) - 0.01 ) + 1 ), 4 )
+     ELSE
+       num_sound_steps = max ( 2 * ( INT (300. * grid%dt /  spacing             - 0.01 ) + 1 ), 4 )
+     END IF
+     WRITE(wrf_err_message,*)'grid spacing, dt, time_step_sound=',spacing,grid%dt,num_sound_steps
+     CALL wrf_debug ( 50 , wrf_err_message )
+   ELSE
+     num_sound_steps = grid%time_step_sound
+   ENDIF
+
+   IF (config_flags%use_adaptive_time_step) THEN
+  
+     CALL get_wrf_debug_level( debug_level )
+     IF ((config_flags%time_step < 0) .AND. (debug_level.GE.50)) THEN
+#ifdef DM_PARALLEL
+       CALL wrf_dm_maxval(grid%max_vert_cfl, idex, jdex)
+#endif
+       WRITE(wrf_err_message,*)'variable dt, max horiz cfl, max vert cfl: ',&
+            grid%dt, grid%max_horiz_cfl, grid%max_vert_cfl
+       CALL wrf_debug ( 0 , wrf_err_message )
+     ENDIF
+
+     grid%max_cfl_val = 0
+     grid%max_horiz_cfl = 0
+     grid%max_vert_cfl = 0
+   ENDIF
+
+   dts = grid%dt/float(num_sound_steps)
+
+   Runge_Kutta_loop:  DO rk_step = 1, rk_order
+
+   !  Set the step size and number of small timesteps for
+   !  each part of the timestep
+
+     dtm = grid%dt
+     IF ( rk_order == 1 ) THEN   
+
+       write(wrf_err_message,*)' leapfrog removed, error exit for dynamics_option = ',dynamics_option
+       CALL wrf_error_fatal( wrf_err_message )
+
+     ELSE IF ( rk_order == 2 ) THEN   ! 2nd order Runge-Kutta timestep
+
+       IF ( rk_step == 1) THEN
+         dt_rk  = 0.5*grid%dt
+         dts_rk = dts
+         number_of_small_timesteps = num_sound_steps/2
+       ELSE
+         dt_rk = grid%dt
+         dts_rk = dts
+         number_of_small_timesteps = num_sound_steps
+       ENDIF
+
+     ELSE IF ( rk_order == 3 ) THEN ! third order Runge-Kutta
+
+       IF ( rk_step == 1) THEN
+         dt_rk = grid%dt/3.
+         dts_rk = dt_rk
+         number_of_small_timesteps = 1
+       ELSE IF (rk_step == 2) THEN
+         dt_rk  = 0.5*grid%dt
+         dts_rk = dts
+         number_of_small_timesteps = num_sound_steps/2
+       ELSE
+         dt_rk = grid%dt
+         dts_rk = dts
+         number_of_small_timesteps = num_sound_steps
+       ENDIF
+
+     ELSE
+
+       write(wrf_err_message,*)' unknown solver, error exit for dynamics_option = ',dynamics_option
+       CALL wrf_error_fatal( wrf_err_message )
+
+     END IF
+
+!  Ensure that polar meridional velocity is zero
+     IF (config_flags%polar) THEN 
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+       DO ij = 1 , grid%num_tiles
+         CALL zero_pole ( grid%v_1,                      &
+                          ids, ide, jds, jde, kds, kde,     &
+                          ims, ime, jms, jme, kms, kme,     &
+                          grid%i_start(ij), grid%i_end(ij), &
+                          grid%j_start(ij), grid%j_end(ij), &
+                          k_start, k_end                   )
+         CALL zero_pole ( grid%v_2,                      &
+                          ids, ide, jds, jde, kds, kde,     &
+                          ims, ime, jms, jme, kms, kme,     &
+                          grid%i_start(ij), grid%i_end(ij), &
+                          grid%j_start(ij), grid%j_end(ij), &
+                          k_start, k_end                   )
+       END DO
+       !$OMP END PARALLEL DO
+     END IF
+!
+!  Time level t is in the *_2 variable in the first part 
+!  of the step, and in the *_1 variable after the predictor.
+!  the latest predicted values are stored in the *_2 variables.
+!
+     CALL wrf_debug ( 200 , ' call rk_step_prep ' )
+
+BENCH_START(step_prep_tim)
+     !$OMP PARALLEL DO   &
+     !$OMP PRIVATE ( ij )
+
+     DO ij = 1 , grid%num_tiles
+
+       CALL rk_step_prep  ( config_flags, rk_step,            &
+                            grid%u_2, grid%v_2, grid%w_2, grid%t_2, grid%ph_2, grid%mu_2,   &
+                            moist,                            &
+                            grid%ru, grid%rv, grid%rw, grid%ww, grid%php, grid%alt, grid%muu, grid%muv,   &
+                            grid%mub, grid%mut, grid%phb, grid%pb, grid%p, grid%al, grid%alb,    &
+                            cqu, cqv, cqw,                    &
+                            grid%msfux, grid%msfuy, grid%msfvx, grid%msfvx_inv,        &
+                            grid%msfvy, grid%msftx, grid%msfty,                        &
+                            grid%fnm, grid%fnp, grid%dnw, grid%rdx, grid%rdy,          &
+                            num_3d_m,                         &
+                            ids, ide, jds, jde, kds, kde,     &
+                            ims, ime, jms, jme, kms, kme,     &
+                            grid%i_start(ij), grid%i_end(ij), &
+                            grid%j_start(ij), grid%j_end(ij), &
+                            k_start, k_end                   )
+
+     END DO
+     !$OMP END PARALLEL DO
+BENCH_END(step_prep_tim)
+
+#ifdef DM_PARALLEL
+!-----------------------------------------------------------------------
+!  Stencils for patch communications  (WCS, 29 June 2001)
+!  Note:  the small size of this halo exchange reflects the 
+!         fact that we are carrying the uncoupled variables 
+!         as state variables in the mass coordinate model, as
+!         opposed to the coupled variables as in the height
+!         coordinate model.
+!
+!                           * * * * *
+!         *        * * *    * * * * *
+!       * + *      * + *    * * + * * 
+!         *        * * *    * * * * *
+!                           * * * * *
+!
+!  3D variables - note staggering!  ru(X), rv(Y), ww(Z), php(Z)
+!
+!  ru     x
+!  rv     x
+!  ww     x
+!  php    x
+!  alt    x
+!  ph_2   x
+!  phb    x
+!
+!  the following are 2D (xy) variables
+!
+!  muu    x
+!  muv    x
+!  mut    x
+!--------------------------------------------------------------
+#    include "HALO_EM_A.inc"
+#endif
+
+! set boundary conditions on variables 
+! from big_step_prep for use in big_step_proc
+
+#ifdef DM_PARALLEL
+#  include "PERIOD_BDY_EM_A.inc"
+#endif
+
+BENCH_START(set_phys_bc_tim)
+     !$OMP PARALLEL DO   &
+     !$OMP PRIVATE ( ij, ii, jj, kk )
+
+     DO ij = 1 , grid%num_tiles
+
+       CALL wrf_debug ( 200 , ' call rk_phys_bc_dry_1' )
+
+       CALL rk_phys_bc_dry_1( config_flags, grid%ru, grid%rv, grid%rw, grid%ww,      & 
+                              grid%muu, grid%muv, grid%mut, grid%php, grid%alt, grid%p,        &
+                              ids, ide, jds, jde, kds, kde,      &
+                              ims, ime, jms, jme, kms, kme,      &
+                              ips, ipe, jps, jpe, kps, kpe,      &
+                              grid%i_start(ij), grid%i_end(ij),  &
+                              grid%j_start(ij), grid%j_end(ij),  &
+                              k_start, k_end                )
+       CALL set_physical_bc3d( grid%al, 'p', config_flags,            &
+                              ids, ide, jds, jde, kds, kde,     &
+                              ims, ime, jms, jme, kms, kme,     &
+                              ips, ipe, jps, jpe, kps, kpe,     &
+                              grid%i_start(ij), grid%i_end(ij), &
+                              grid%j_start(ij), grid%j_end(ij), &
+                              k_start    , k_end               )
+       CALL set_physical_bc3d( grid%ph_2, 'w', config_flags,            &
+                              ids, ide, jds, jde, kds, kde, &
+                              ims, ime, jms, jme, kms, kme, &
+                              ips, ipe, jps, jpe, kps, kpe, &
+                              grid%i_start(ij), grid%i_end(ij),        &
+                              grid%j_start(ij), grid%j_end(ij),        &
+                              k_start, k_end                )
+
+       IF (config_flags%polar) THEN 
+
+!-------------------------------------------------------
+! lat-lon grid pole-point (v) specification (extrapolate v, rv to the pole)
+!-------------------------------------------------------
+
+         CALL pole_point_bc ( grid%v_1,                      &
+                              ids, ide, jds, jde, kds, kde,     &
+                              ims, ime, jms, jme, kms, kme,     &
+                              grid%i_start(ij), grid%i_end(ij), &
+                              grid%j_start(ij), grid%j_end(ij), &
+                              k_start, k_end                   )
+ 
+         CALL pole_point_bc ( grid%v_2,                      &
+                              ids, ide, jds, jde, kds, kde,     &
+                              ims, ime, jms, jme, kms, kme,     &
+                              grid%i_start(ij), grid%i_end(ij), &
+                              grid%j_start(ij), grid%j_end(ij), &
+                              k_start, k_end                   )
+ 
+!-------------------------------------------------------
+! end lat-lon grid pole-point (v) specification
+!-------------------------------------------------------
+
+       ENDIF
+     END DO
+     !$OMP END PARALLEL DO
+BENCH_END(set_phys_bc_tim)
+
+     rk_step_is_one : IF (rk_step == 1) THEN ! only need to initialize diffusion tendencies
+
+!<DESCRIPTION>
+!<pre>
+!(2) The non-timesplit physics begins with a call to "phy_prep"
+!    (which computes some diagnostic variables such as temperature,
+!    pressure, u and v at p points, etc).  This is followed by
+!    calls to the physics drivers:
+!
+!              radiation,
+!              surface,
+!              pbl,
+!              cumulus,
+!              fddagd,
+!              3D TKE and mixing.
+!<pre>
+!</DESCRIPTION>
+
+       CALL first_rk_step_part1 (    grid, config_flags         &
+                             , moist , moist_tend               &
+                             , chem  , chem_tend                &
+                             , scalar , scalar_tend             &
+                             , fdda3d, fdda2d                   &
+                             , ru_tendf, rv_tendf               &
+                             , rw_tendf, t_tendf                &
+                             , ph_tendf, mu_tendf               &
+                             , tke_tend                         &
+                             , adapt_step_flag , curr_secs      &
+                             , psim , psih , wspd , gz1oz0      &
+                             , br , chklowq                     &
+                             , cu_act_flag , hol , th_phy       &
+                             , pi_phy , p_phy , t_phy           &
+                             , u_phy , v_phy                    &
+                             , dz8w , p8w , t8w , rho_phy , rho &
+                             , z_at_w , mu_3d                   &
+                             , ids, ide, jds, jde, kds, kde     &
+                             , ims, ime, jms, jme, kms, kme     &
+                             , ips, ipe, jps, jpe, kps, kpe     &
+                             , k_start , k_end                  &
+                            )
+
+       CALL first_rk_step_part2 (    grid, config_flags         &
+                             , moist , moist_tend               &
+                             , chem  , chem_tend                &
+                             , scalar , scalar_tend             &
+                             , fdda3d, fdda2d                   &
+                             , ru_tendf, rv_tendf               &
+                             , rw_tendf, t_tendf                &
+                             , ph_tendf, mu_tendf               &
+                             , tke_tend                         &
+                             , adapt_step_flag , curr_secs      &
+                             , psim , psih , wspd , gz1oz0      &
+                             , br , chklowq                     &
+                             , cu_act_flag , hol , th_phy       &
+                             , pi_phy , p_phy , t_phy           &
+                             , u_phy , v_phy                    &
+                             , dz8w , p8w , t8w , rho_phy , rho &
+                             , z_at_w , mu_3d                   &
+                             , ids, ide, jds, jde, kds, kde     &
+                             , ims, ime, jms, jme, kms, kme     &
+                             , ips, ipe, jps, jpe, kps, kpe     &
+                             , k_start , k_end                  &
+                            )
+
+     END IF rk_step_is_one
+
+BENCH_START(rk_tend_tim)
+     !$OMP PARALLEL DO   &
+     !$OMP PRIVATE ( ij )
+     DO ij = 1 , grid%num_tiles
+
+       CALL wrf_debug ( 200 , ' call rk_tendency' )
+       CALL rk_tendency ( config_flags, rk_step                                                                &
+                         ,grid%ru_tend, grid%rv_tend, rw_tend, ph_tend, t_tend                                 &
+                         ,ru_tendf, rv_tendf, rw_tendf, ph_tendf, t_tendf                                      &
+                         ,mu_tend, grid%u_save, grid%v_save, w_save, ph_save                                   &
+                         ,grid%t_save, mu_save, grid%rthften                                                   &
+                         ,grid%ru, grid%rv, grid%rw, grid%ww                                                   &
+                         ,grid%u_2, grid%v_2, grid%w_2, grid%t_2, grid%ph_2                                    &
+                         ,grid%u_1, grid%v_1, grid%w_1, grid%t_1, grid%ph_1                                    &
+                         ,grid%h_diabatic, grid%phb, grid%t_init                                               &
+                         ,grid%mu_2, grid%mut, grid%muu, grid%muv, grid%mub                                    &
+                         ,grid%al, grid%alt, grid%p, grid%pb, grid%php, cqu, cqv, cqw                          &
+                         ,grid%u_base, grid%v_base, grid%t_base, grid%qv_base, grid%z_base                     &
+                         ,grid%msfux,grid%msfuy, grid%msfvx, grid%msfvx_inv                                    &
+                         ,grid%msfvy, grid%msftx,grid%msfty, grid%xlat, grid%f, grid%e, grid%sina, grid%cosa   &
+                         ,grid%fnm, grid%fnp, grid%rdn, grid%rdnw                                              &
+                         ,grid%dt, grid%rdx, grid%rdy, grid%khdif, grid%kvdif, grid%xkmh, grid%xkhh            &
+                         ,grid%diff_6th_opt, grid%diff_6th_factor                                              &
+                         ,grid%dampcoef,grid%zdamp,config_flags%damp_opt                                       &
+                         ,grid%cf1, grid%cf2, grid%cf3, grid%cfn, grid%cfn1, num_3d_m                          &
+                         ,config_flags%non_hydrostatic, config_flags%top_lid                                   &
+                         ,grid%u_frame, grid%v_frame                                                           &
+                         ,ids, ide, jds, jde, kds, kde                                                         &
+                         ,ims, ime, jms, jme, kms, kme                                                         &
+                         ,grid%i_start(ij), grid%i_end(ij)                                                     &
+                         ,grid%j_start(ij), grid%j_end(ij)                                                     &
+                         ,k_start, k_end                                                                       &
+                         ,max_vert_cfl_tmp(ij), max_horiz_cfl_tmp(ij)                                         )
+     END DO
+     !$OMP END PARALLEL DO
+BENCH_END(rk_tend_tim)
+
+     IF (config_flags%use_adaptive_time_step) THEN
+       DO ij = 1 , grid%num_tiles
+         IF (max_horiz_cfl_tmp(ij) .GT. grid%max_horiz_cfl) THEN
+           grid%max_horiz_cfl = max_horiz_cfl_tmp(ij)
+         ENDIF
+         IF (max_vert_cfl_tmp(ij) .GT. grid%max_vert_cfl) THEN
+           grid%max_vert_cfl = max_vert_cfl_tmp(ij)
+         ENDIF
+       END DO
+     
+       IF (grid%max_horiz_cfl .GT. grid%max_cfl_val) THEN
+         grid%max_cfl_val = grid%max_horiz_cfl
+       ENDIF
+       IF (grid%max_vert_cfl .GT. grid%max_cfl_val) THEN
+         grid%max_cfl_val = grid%max_vert_cfl
+       ENDIF
+     ENDIF
+
+BENCH_START(relax_bdy_dry_tim)
+     !$OMP PARALLEL DO   &
+     !$OMP PRIVATE ( ij )
+     DO ij = 1 , grid%num_tiles
+
+       IF( (config_flags%specified .or. config_flags%nested) .and. rk_step == 1 ) THEN 
+
+         CALL relax_bdy_dry ( config_flags,                                &
+                              grid%u_save, grid%v_save, ph_save, grid%t_save,             &
+                              w_save, mu_tend,                             & 
+                              grid%ru, grid%rv, grid%ph_2, grid%t_2,                           &
+                              grid%w_2, grid%mu_2, grid%mut,                              &
+                              grid%u_bxs,grid%u_bxe,grid%u_bys,grid%u_bye, &
+                              grid%v_bxs,grid%v_bxe,grid%v_bys,grid%v_bye, &
+                              grid%ph_bxs,grid%ph_bxe,grid%ph_bys,grid%ph_bye, &
+                              grid%t_bxs,grid%t_bxe,grid%t_bys,grid%t_bye, &
+                              grid%w_bxs,grid%w_bxe,grid%w_bys,grid%w_bye, &
+                              grid%mu_bxs,grid%mu_bxe,grid%mu_bys,grid%mu_bye, &
+                              grid%u_btxs,grid%u_btxe,grid%u_btys,grid%u_btye, &
+                              grid%v_btxs,grid%v_btxe,grid%v_btys,grid%v_btye, &
+                              grid%ph_btxs,grid%ph_btxe,grid%ph_btys,grid%ph_btye, &
+                              grid%t_btxs,grid%t_btxe,grid%t_btys,grid%t_btye, &
+                              grid%w_btxs,grid%w_btxe,grid%w_btys,grid%w_btye, &
+                              grid%mu_btxs,grid%mu_btxe,grid%mu_btys,grid%mu_btye, &
+                              config_flags%spec_bdy_width, grid%spec_zone, grid%relax_zone,       &
+                              grid%dtbc, grid%fcx, grid%gcx,                              &
+                              ids,ide, jds,jde, kds,kde,                   &
+                              ims,ime, jms,jme, kms,kme,                   &
+                              ips,ipe, jps,jpe, kps,kpe,                   &
+                              grid%i_start(ij), grid%i_end(ij),            &
+                              grid%j_start(ij), grid%j_end(ij),            &
+                              k_start, k_end                              )
+
+       ENDIF
+
+       CALL rk_addtend_dry( grid%ru_tend,  grid%rv_tend,  rw_tend,  ph_tend,  t_tend,  &
+                            ru_tendf, rv_tendf, rw_tendf, ph_tendf, t_tendf, &
+                            grid%u_save, grid%v_save, w_save, ph_save, grid%t_save, &
+                            mu_tend, mu_tendf, rk_step,                      &
+                            grid%h_diabatic, grid%mut, grid%msftx,        &
+                            grid%msfty, grid%msfux,grid%msfuy,               &
+                            grid%msfvx, grid%msfvx_inv, grid%msfvy,          &
+                            ids,ide, jds,jde, kds,kde,                       &
+                            ims,ime, jms,jme, kms,kme,                       &
+                            ips,ipe, jps,jpe, kps,kpe,                       &
+                            grid%i_start(ij), grid%i_end(ij),                &
+                            grid%j_start(ij), grid%j_end(ij),                &
+                            k_start, k_end                                  )
+
+       IF( config_flags%specified .or. config_flags%nested ) THEN 
+         CALL spec_bdy_dry ( config_flags,                                    &
+                             grid%ru_tend, grid%rv_tend, ph_tend, t_tend,               &
+                             rw_tend, mu_tend,                                &
+                             grid%u_bxs,grid%u_bxe,grid%u_bys,grid%u_bye, &
+                             grid%v_bxs,grid%v_bxe,grid%v_bys,grid%v_bye, &
+                             grid%ph_bxs,grid%ph_bxe,grid%ph_bys,grid%ph_bye, &
+                             grid%t_bxs,grid%t_bxe,grid%t_bys,grid%t_bye, &
+                             grid%w_bxs,grid%w_bxe,grid%w_bys,grid%w_bye, &
+                             grid%mu_bxs,grid%mu_bxe,grid%mu_bys,grid%mu_bye, &
+                             grid%u_btxs,grid%u_btxe,grid%u_btys,grid%u_btye, &
+                             grid%v_btxs,grid%v_btxe,grid%v_btys,grid%v_btye, &
+                             grid%ph_btxs,grid%ph_btxe,grid%ph_btys,grid%ph_btye, &
+                             grid%t_btxs,grid%t_btxe,grid%t_btys,grid%t_btye, &
+                             grid%w_btxs,grid%w_btxe,grid%w_btys,grid%w_btye, &
+                             grid%mu_btxs,grid%mu_btxe,grid%mu_btys,grid%mu_btye, &
+                             config_flags%spec_bdy_width, grid%spec_zone,                       &
+                             ids,ide, jds,jde, kds,kde,  & ! domain dims
+                             ims,ime, jms,jme, kms,kme,  & ! memory dims
+                             ips,ipe, jps,jpe, kps,kpe,  & ! patch  dims
+                             grid%i_start(ij), grid%i_end(ij),                &
+                             grid%j_start(ij), grid%j_end(ij),                &
+                             k_start, k_end                                  )
+     
+       ENDIF
+
+     END DO
+     !$OMP END PARALLEL DO
+BENCH_END(relax_bdy_dry_tim)
+
+!<DESCRIPTION>
+!<pre>
+! (3) Small (acoustic,sound) steps.
+!
+!    Several acoustic steps are taken each RK pass.  A small step 
+!    sequence begins with calculating perturbation variables 
+!    and coupling them to the column dry-air-mass mu 
+!    (call to small_step_prep).  This is followed by computing
+!    coefficients for the vertically implicit part of the
+!    small timestep (call to calc_coef_w).  
+!
+!    The small steps are taken
+!    in the named loop "small_steps:".  In the small_steps loop, first 
+!    the horizontal momentum (u and v) are advanced (call to advance_uv),
+!    next mu and theta are advanced (call to advance_mu_t) followed by
+!    advancing w and the geopotential (call to advance_w).  Diagnostic
+!    values for pressure and inverse density are updated at the end of
+!    each small_step.
+!
+!    The small-step section ends with the change of the perturbation variables
+!    back to full variables (call to small_step_finish).
+!</pre>
+!</DESCRIPTION>
+
+BENCH_START(small_step_prep_tim)
+     !$OMP PARALLEL DO   &
+     !$OMP PRIVATE ( ij )
+     DO ij = 1 , grid%num_tiles
+
+    ! Calculate coefficients for the vertically implicit acoustic/gravity wave
+    ! integration.  We only need calculate these for the first pass through -
+    ! the predictor step.  They are reused as is for the corrector step.
+    ! For third-order RK, we need to recompute these after the first 
+    ! predictor because we may have changed the small timestep -> grid%dts.
+
+       CALL wrf_debug ( 200 , ' call small_step_prep ' )
+
+       CALL small_step_prep( grid%u_1,grid%u_2,grid%v_1,grid%v_2,grid%w_1,grid%w_2,   &
+                             grid%t_1,grid%t_2,grid%ph_1,grid%ph_2,                   &
+                             grid%mub, grid%mu_1, grid%mu_2,                          &
+                             grid%muu, muus, grid%muv, muvs,                          &
+                             grid%mut, grid%muts, grid%mudf,                          &
+                             grid%u_save, grid%v_save, w_save,                        &
+                             grid%t_save, ph_save, mu_save,                           &
+                             grid%ww, ww1,                                            &
+                             grid%dnw, c2a, grid%pb, grid%p, grid%alt,                &
+                             grid%msfux,grid%msfuy, grid%msfvx, grid%msfvx_inv,       &
+                             grid%msfvy, grid%msftx,grid%msfty,                       &
+                             grid%rdx, grid%rdy, rk_step,                             &
+                             ids, ide, jds, jde, kds, kde,                            &
+                             ims, ime, jms, jme, kms, kme,                            &
+                             grid%i_start(ij), grid%i_end(ij),                        &
+                             grid%j_start(ij), grid%j_end(ij),                        &
+                             k_start    , k_end                                       )
+ 
+       CALL calc_p_rho( grid%al, grid%p, grid%ph_2,                 &
+                        grid%alt, grid%t_2, grid%t_save, c2a, pm1,  &
+                        grid%mu_2, grid%muts, grid%znu, t0,         &
+                        grid%rdnw, grid%dnw, grid%smdiv,            &
+                        config_flags%non_hydrostatic, 0,            &
+                        ids, ide, jds, jde, kds, kde,               &
+                        ims, ime, jms, jme, kms, kme,               &
+                        grid%i_start(ij), grid%i_end(ij),           &
+                        grid%j_start(ij), grid%j_end(ij),           &
+                        k_start    , k_end                          )
+
+       IF (config_flags%non_hydrostatic) THEN
+         CALL calc_coef_w( a,alpha,gamma,                    &
+                           grid%mut, cqw,                    &
+                           grid%rdn, grid%rdnw, c2a,         &
+                           dts_rk, g, grid%epssm,            &
+                           config_flags%top_lid,             &
+                           ids, ide, jds, jde, kds, kde,     &
+                           ims, ime, jms, jme, kms, kme,     &
+                           grid%i_start(ij), grid%i_end(ij), &
+                           grid%j_start(ij), grid%j_end(ij), &
+                           k_start    , k_end               )
+       ENDIF
+
+     ENDDO
+     !$OMP END PARALLEL DO
+BENCH_END(small_step_prep_tim)
+
+#ifdef DM_PARALLEL
+!-----------------------------------------------------------------------
+!  Stencils for patch communications  (WCS, 29 June 2001)
+!  Note:  the small size of this halo exchange reflects the 
+!         fact that we are carrying the uncoupled variables 
+!         as state variables in the mass coordinate model, as
+!         opposed to the coupled variables as in the height
+!         coordinate model.
+!
+!                              * * * * *
+!            *        * * *    * * * * *
+!          * + *      * + *    * * + * * 
+!            *        * * *    * * * * *
+!                              * * * * *
+!
+!  3D variables - note staggering!  ph_2(Z), u_save(X), v_save(Y)
+!
+!  ph_2      x
+!  al        x
+!  p         x
+!  t_1       x
+!  t_save    x
+!  u_save    x
+!  v_save    x
+!
+!  the following are 2D (xy) variables
+!
+!  mu_1      x
+!  mu_2      x
+!  mudf      x
+!  php       x
+!  alt       x
+!  pb        x
+!--------------------------------------------------------------
+#      include "HALO_EM_B.inc"
+#      include "PERIOD_BDY_EM_B.inc"
+#endif
+
+BENCH_START(set_phys_bc2_tim)
+     !$OMP PARALLEL DO   &
+     !$OMP PRIVATE ( ij )
+
+     DO ij = 1 , grid%num_tiles
+
+       CALL set_physical_bc3d( grid%ru_tend, 'u', config_flags,      &
+                               ids, ide, jds, jde, kds, kde,         &
+                               ims, ime, jms, jme, kms, kme,         &
+                               ips, ipe, jps, jpe, kps, kpe,         &
+                               grid%i_start(ij), grid%i_end(ij),     &
+                               grid%j_start(ij), grid%j_end(ij),     &
+                               k_start    , k_end                    )
+
+       CALL set_physical_bc3d( grid%rv_tend, 'v', config_flags,      &
+                               ids, ide, jds, jde, kds, kde,         &
+                               ims, ime, jms, jme, kms, kme,         &
+                               ips, ipe, jps, jpe, kps, kpe,         &
+                               grid%i_start(ij), grid%i_end(ij),     &
+                               grid%j_start(ij), grid%j_end(ij),     &
+                               k_start    , k_end                    )
+
+       CALL set_physical_bc3d( grid%ph_2, 'w', config_flags,         &
+                               ids, ide, jds, jde, kds, kde,         &
+                               ims, ime, jms, jme, kms, kme,         &
+                               ips, ipe, jps, jpe, kps, kpe,         &
+                               grid%i_start(ij), grid%i_end(ij),     &
+                               grid%j_start(ij), grid%j_end(ij),     &
+                               k_start    , k_end                    )
+
+       CALL set_physical_bc3d( grid%al, 'p', config_flags,           &
+                               ids, ide, jds, jde, kds, kde,         &
+                               ims, ime, jms, jme, kms, kme,         &
+                               ips, ipe, jps, jpe, kps, kpe,         &
+                               grid%i_start(ij), grid%i_end(ij),     &
+                               grid%j_start(ij), grid%j_end(ij),     &
+                               k_start    , k_end                    )
+
+       CALL set_physical_bc3d( grid%p, 'p', config_flags,            &
+                               ids, ide, jds, jde, kds, kde,         &
+                               ims, ime, jms, jme, kms, kme,         &
+                               ips, ipe, jps, jpe, kps, kpe,         &
+                               grid%i_start(ij), grid%i_end(ij),     &
+                               grid%j_start(ij), grid%j_end(ij),     &
+                               k_start    , k_end                    )
+
+       CALL set_physical_bc3d( grid%t_1, 'p', config_flags,          &
+                               ids, ide, jds, jde, kds, kde,         &
+                               ims, ime, jms, jme, kms, kme,         &
+                               ips, ipe, jps, jpe, kps, kpe,         &
+                               grid%i_start(ij), grid%i_end(ij),     &
+                               grid%j_start(ij), grid%j_end(ij),     &
+                               k_start    , k_end                    )
+
+       CALL set_physical_bc3d( grid%t_save, 't', config_flags,       &
+                               ids, ide, jds, jde, kds, kde,         &
+                               ims, ime, jms, jme, kms, kme,         &
+                               ips, ipe, jps, jpe, kps, kpe,         &
+                               grid%i_start(ij), grid%i_end(ij),     &
+                               grid%j_start(ij), grid%j_end(ij),     &
+                               k_start    , k_end                    )
+
+       CALL set_physical_bc2d( grid%mu_1, 't', config_flags,         &
+                               ids, ide, jds, jde,                   &
+                               ims, ime, jms, jme,                   &
+                               ips, ipe, jps, jpe,                   &
+                               grid%i_start(ij), grid%i_end(ij),     &
+                               grid%j_start(ij), grid%j_end(ij)      )
+
+       CALL set_physical_bc2d( grid%mu_2, 't', config_flags,         &
+                               ids, ide, jds, jde,                   &
+                               ims, ime, jms, jme,                   &
+                               ips, ipe, jps, jpe,                   &
+                               grid%i_start(ij), grid%i_end(ij),     &
+                               grid%j_start(ij), grid%j_end(ij)      )
+
+       CALL set_physical_bc2d( grid%mudf, 't', config_flags,         &
+                               ids, ide, jds, jde,                   &
+                               ims, ime, jms, jme,                   &
+                               ips, ipe, jps, jpe,                   &
+                               grid%i_start(ij), grid%i_end(ij),     &
+                               grid%j_start(ij), grid%j_end(ij)      )
+
+     END DO
+     !$OMP END PARALLEL DO
+BENCH_END(set_phys_bc2_tim)
+     small_steps : DO iteration = 1 , number_of_small_timesteps
+
+       ! Boundary condition time (or communication time).  
+#ifdef DM_PARALLEL
+#      include "PERIOD_BDY_EM_B.inc"
+#endif
+
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+
+       DO ij = 1 , grid%num_tiles
+
+BENCH_START(advance_uv_tim)
+         CALL advance_uv ( grid%u_2, grid%ru_tend, grid%v_2, grid%rv_tend,        &
+                           grid%p, grid%pb,                                       &
+                           grid%ph_2, grid%php, grid%alt,  grid%al,               &
+                           grid%mu_2,                                             &
+                           grid%muu, cqu, grid%muv, cqv, grid%mudf,               &
+                           grid%msfux, grid%msfuy, grid%msfvx,                    &
+                           grid%msfvx_inv, grid%msfvy,                            &
+                           grid%rdx, grid%rdy, dts_rk,                            &
+                           grid%cf1, grid%cf2, grid%cf3, grid%fnm, grid%fnp,      &
+                           grid%emdiv,                                            &
+                           grid%rdnw, config_flags,grid%spec_zone,                &
+                           config_flags%non_hydrostatic, config_flags%top_lid,    &
+                           ids, ide, jds, jde, kds, kde,                          &
+                           ims, ime, jms, jme, kms, kme,                          &
+                           grid%i_start(ij), grid%i_end(ij),                      &
+                           grid%j_start(ij), grid%j_end(ij),                      &
+                           k_start    , k_end                                     )
+BENCH_END(advance_uv_tim)
+
+       END DO
+       !$OMP END PARALLEL DO
+
+!-----------------------------------------------------------
+!  acoustic integration polar filter for smallstep u, v
+!-----------------------------------------------------------
+
+       IF (config_flags%polar) THEN
+
+         CALL pxft ( grid=grid                                              &
+               ,lineno=__LINE__                                             &
+               ,flag_uv            = 1                                      &
+               ,flag_rurv          = 0                                      &
+               ,flag_wph           = 0                                      &
+               ,flag_ww            = 0                                      &
+               ,flag_t             = 0                                      &
+               ,flag_mu            = 0                                      &
+               ,flag_mut           = 0                                      &
+               ,flag_moist         = 0                                      &
+               ,flag_chem          = 0                                      &
+               ,flag_scalar        = 0                                      &
+               ,positive_definite  = .FALSE.                                &
+               ,moist=moist,chem=chem,scalar=scalar                         &
+               ,fft_filter_lat = config_flags%fft_filter_lat                &
+               ,dclat = dclat                                               &
+               ,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             &
+               ,imsx=imsx,imex=imex,jmsx=jmsx,jmex=jmex,kmsx=kmsx,kmex=kmex &
+               ,ipsx=ipsx,ipex=ipex,jpsx=jmsx,jpex=jpex,kpsx=kpsx,kpex=kpex )
+
+       END IF
+
+!-----------------------------------------------------------
+!  end acoustic integration polar filter for smallstep u, v
+!-----------------------------------------------------------
+
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+       DO ij = 1 , grid%num_tiles
+
+BENCH_START(spec_bdy_uv_tim)
+         IF( config_flags%specified .or. config_flags%nested ) THEN
+           CALL spec_bdyupdate(grid%u_2, grid%ru_tend, dts_rk,      &
+                               'u'         , config_flags, &
+                                grid%spec_zone,                  &
+                                ids,ide, jds,jde, kds,kde,  & ! domain dims
+                                ims,ime, jms,jme, kms,kme,  & ! memory dims
+                                ips,ipe, jps,jpe, kps,kpe,  & ! patch  dims
+                                grid%i_start(ij), grid%i_end(ij),         &
+                                grid%j_start(ij), grid%j_end(ij),         &
+                                k_start    , k_end             )
+
+           CALL spec_bdyupdate(grid%v_2, grid%rv_tend, dts_rk,      &
+                                'v'         , config_flags, &
+                                grid%spec_zone,                  &
+                                ids,ide, jds,jde, kds,kde,  & ! domain dims
+                                ims,ime, jms,jme, kms,kme,  & ! memory dims
+                                ips,ipe, jps,jpe, kps,kpe,  & ! patch  dims
+                                grid%i_start(ij), grid%i_end(ij),         &
+                                grid%j_start(ij), grid%j_end(ij),         &
+                                k_start    , k_end             )
+
+         ENDIF
+BENCH_END(spec_bdy_uv_tim)
+
+       END DO
+       !$OMP END PARALLEL DO
+
+#ifdef DM_PARALLEL
+!
+!  Stencils for patch communications  (WCS, 29 June 2001)
+!
+!         *                     *
+!       * + *      * + *        +
+!         *                     *
+!
+!  u_2               x
+!  v_2                          x
+!
+#     include "HALO_EM_C.inc"
+#endif
+
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+       DO ij = 1 , grid%num_tiles
+
+        !  advance the mass in the column, theta, and calculate ww
+
+BENCH_START(advance_mu_t_tim)
+         CALL advance_mu_t( grid%ww, ww1, grid%u_2, grid%u_save, grid%v_2, grid%v_save, &
+                          grid%mu_2, grid%mut, muave, grid%muts, grid%muu, grid%muv,    &
+                          grid%mudf, grid%ru_m, grid%rv_m, grid%ww_m,                   &
+                          grid%t_2, grid%t_save, t_2save, t_tend,                       &
+                          mu_tend,                                                      &
+                          grid%rdx, grid%rdy, dts_rk, grid%epssm,                       &
+                          grid%dnw, grid%fnm, grid%fnp, grid%rdnw,                      &
+                          grid%msfux,grid%msfuy, grid%msfvx, grid%msfvx_inv,            &
+                          grid%msfvy, grid%msftx,grid%msfty,                            &
+                          iteration, config_flags,                                      &
+                          ids, ide, jds, jde, kds, kde,      &
+                          ims, ime, jms, jme, kms, kme,      &
+                          grid%i_start(ij), grid%i_end(ij),  &
+                          grid%j_start(ij), grid%j_end(ij),  &
+                          k_start    , k_end                )
+BENCH_END(advance_mu_t_tim)
+       ENDDO
+       !$OMP END PARALLEL DO
+
+!-----------------------------------------------------------
+!  acoustic integration polar filter for smallstep mu, t
+!-----------------------------------------------------------
+
+       IF ( (config_flags%polar) ) THEN
+
+         CALL pxft ( grid=grid                                               &
+                ,lineno=__LINE__                                             &
+                ,flag_uv            = 0                                      &
+                ,flag_rurv          = 0                                      &
+                ,flag_wph           = 0                                      &
+                ,flag_ww            = 0                                      &
+                ,flag_t             = 1                                      &
+                ,flag_mu            = 1                                      &
+                ,flag_mut           = 0                                      &
+                ,flag_moist         = 0                                      &
+                ,flag_chem          = 0                                      &
+                ,flag_scalar        = 0                                      &
+                ,positive_definite  = .FALSE.                                &
+                ,moist=moist,chem=chem,scalar=scalar                         &
+                ,fft_filter_lat = config_flags%fft_filter_lat                &
+                ,dclat = dclat                                               &
+                ,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             &
+                ,imsx=imsx,imex=imex,jmsx=jmsx,jmex=jmex,kmsx=kmsx,kmex=kmex &
+                ,ipsx=ipsx,ipex=ipex,jpsx=jmsx,jpex=jpex,kpsx=kpsx,kpex=kpex )
+
+         grid%muts = grid%mut + grid%mu_2  ! reset muts using filtered mu_2
+ 
+       END IF
+
+!-----------------------------------------------------------
+!  end acoustic integration polar filter for smallstep mu, t
+!-----------------------------------------------------------
+
+BENCH_START(spec_bdy_t_tim)
+
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+       DO ij = 1 , grid%num_tiles
+
+         IF( config_flags%specified .or. config_flags%nested ) THEN
+
+           CALL spec_bdyupdate(grid%t_2, t_tend, dts_rk,        &
+                               't'         , config_flags,      &
+                               grid%spec_zone,                  &
+                               ids,ide, jds,jde, kds,kde,       &
+                               ims,ime, jms,jme, kms,kme,       &
+                               ips,ipe, jps,jpe, kps,kpe,       &
+                               grid%i_start(ij), grid%i_end(ij),&
+                               grid%j_start(ij), grid%j_end(ij),&
+                               k_start    , k_end              )
+
+           CALL spec_bdyupdate(grid%mu_2, mu_tend, dts_rk,       &
+                               'm'         , config_flags,      &
+                               grid%spec_zone,                  &
+                               ids,ide, jds,jde, 1  ,1  ,       &
+                               ims,ime, jms,jme, 1  ,1  ,       &
+                               ips,ipe, jps,jpe, 1  ,1  ,       &
+                               grid%i_start(ij), grid%i_end(ij),&
+                               grid%j_start(ij), grid%j_end(ij),&
+                               1    , 1             )
+
+           CALL spec_bdyupdate(grid%muts, mu_tend, dts_rk,      &
+                              'm'         , config_flags, &
+                              grid%spec_zone,                  &
+                              ids,ide, jds,jde, 1  ,1  ,  & ! domain dims
+                              ims,ime, jms,jme, 1  ,1  ,  & ! memory dims
+                              ips,ipe, jps,jpe, 1  ,1  ,  & ! patch  dims
+                              grid%i_start(ij), grid%i_end(ij),         &
+                              grid%j_start(ij), grid%j_end(ij),         &
+                              1    , 1             )
+         ENDIF
+BENCH_END(spec_bdy_t_tim)
+
+         ! small (acoustic) step for the vertical momentum,
+         ! density and coupled potential temperature.
+
+
+BENCH_START(advance_w_tim)
+         IF ( config_flags%non_hydrostatic ) THEN
+           CALL advance_w( grid%w_2, rw_tend, grid%ww, w_save,         &
+                           grid%u_2, grid%v_2,                         &
+                           grid%mu_2, grid%mut, muave, grid%muts,      &
+                           t_2save, grid%t_2, grid%t_save,             &
+                           grid%ph_2, ph_save, grid%phb, ph_tend,      &
+                           grid%ht, c2a, cqw, grid%alt, grid%alb,      &
+                           a, alpha, gamma,                            &
+                           grid%rdx, grid%rdy, dts_rk, t0, grid%epssm, &
+                           grid%dnw, grid%fnm, grid%fnp, grid%rdnw,    &
+                           grid%rdn, grid%cf1, grid%cf2, grid%cf3,     &
+                           grid%msftx, grid%msfty,                     &
+                           config_flags,  config_flags%top_lid,        &
+                           ids,ide, jds,jde, kds,kde,                  &
+                           ims,ime, jms,jme, kms,kme,                  &
+                           grid%i_start(ij), grid%i_end(ij),           &
+                           grid%j_start(ij), grid%j_end(ij),           &
+                           k_start    , k_end                          )
+         ENDIF
+BENCH_END(advance_w_tim)
+
+       ENDDO
+       !$OMP END PARALLEL DO
+
+!-----------------------------------------------------------
+!  acoustic integration polar filter for smallstep w, geopotential
+!-----------------------------------------------------------
+
+       IF ( (config_flags%polar) .AND. (config_flags%non_hydrostatic) ) THEN
+
+         CALL pxft ( grid=grid                                               &
+                ,lineno=__LINE__                                             &
+                ,flag_uv            = 0                                      &
+                ,flag_rurv          = 0                                      &
+                ,flag_wph           = 1                                      &
+                ,flag_ww            = 0                                      &
+                ,flag_t             = 0                                      &
+                ,flag_mu            = 0                                      &
+                ,flag_mut           = 0                                      &
+                ,flag_moist         = 0                                      &
+                ,flag_chem          = 0                                      &
+                ,flag_scalar        = 0                                      &
+                ,positive_definite  = .FALSE.                                &
+                ,moist=moist,chem=chem,scalar=scalar                         &
+                ,fft_filter_lat = config_flags%fft_filter_lat                &
+                ,dclat = dclat                                               &
+                ,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             &
+                ,imsx=imsx,imex=imex,jmsx=jmsx,jmex=jmex,kmsx=kmsx,kmex=kmex &
+                ,ipsx=ipsx,ipex=ipex,jpsx=jmsx,jpex=jpex,kpsx=kpsx,kpex=kpex )
+
+       END IF
+
+!-----------------------------------------------------------
+!  end acoustic integration polar filter for smallstep w, geopotential
+!-----------------------------------------------------------
+
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+       DO ij = 1 , grid%num_tiles
+
+BENCH_START(sumflux_tim)
+         CALL sumflux ( grid%u_2, grid%v_2, grid%ww,          &
+                        grid%u_save, grid%v_save, ww1,        &
+                        grid%muu, grid%muv,                   &
+                        grid%ru_m, grid%rv_m, grid%ww_m, grid%epssm,  &
+                        grid%msfux, grid% msfuy, grid%msfvx,  &
+                        grid%msfvx_inv, grid%msfvy,           &
+                        iteration, number_of_small_timesteps, &
+                        ids, ide, jds, jde, kds, kde,         &
+                        ims, ime, jms, jme, kms, kme,         &
+                        grid%i_start(ij), grid%i_end(ij),     &
+                        grid%j_start(ij), grid%j_end(ij),     &
+                        k_start    , k_end                   )
+BENCH_END(sumflux_tim)
+
+         IF( config_flags%specified .or. config_flags%nested ) THEN
+
+BENCH_START(spec_bdynhyd_tim)
+           IF (config_flags%non_hydrostatic)  THEN
+             CALL spec_bdyupdate_ph( ph_save, grid%ph_2, ph_tend,     &
+                                     mu_tend, grid%muts, dts_rk,      &
+                                     'h'         , config_flags,      &
+                                     grid%spec_zone,                  &
+                                     ids,ide, jds,jde, kds,kde,       &
+                                     ims,ime, jms,jme, kms,kme,       &
+                                     ips,ipe, jps,jpe, kps,kpe,       &
+                                     grid%i_start(ij), grid%i_end(ij),&
+                                     grid%j_start(ij), grid%j_end(ij),&
+                                     k_start    , k_end               )
+             IF( config_flags%specified ) THEN
+               CALL zero_grad_bdy ( grid%w_2,                         &
+                                    'w'         , config_flags,       &
+                                    grid%spec_zone,                   &
+                                    ids,ide, jds,jde, kds,kde,        &
+                                    ims,ime, jms,jme, kms,kme,        &
+                                    ips,ipe, jps,jpe, kps,kpe,        &
+                                    grid%i_start(ij), grid%i_end(ij), &
+                                    grid%j_start(ij), grid%j_end(ij), &
+                                    k_start    , k_end                )
+             ELSE
+               CALL spec_bdyupdate ( grid%w_2, rw_tend, dts_rk,       &
+                                     'h'         , config_flags,      &
+                                     grid%spec_zone,                  &
+                                     ids,ide, jds,jde, kds,kde,       &
+                                     ims,ime, jms,jme, kms,kme,       &
+                                     ips,ipe, jps,jpe, kps,kpe,       &
+                                     grid%i_start(ij), grid%i_end(ij),&
+                                     grid%j_start(ij), grid%j_end(ij),&
+                                     k_start    , k_end               )
+             ENDIF
+           ENDIF
+BENCH_END(spec_bdynhyd_tim)
+         ENDIF
+
+BENCH_START(cald_p_rho_tim)
+         CALL calc_p_rho( grid%al, grid%p, grid%ph_2,                 &
+                          grid%alt, grid%t_2, grid%t_save, c2a, pm1,  &
+                          grid%mu_2, grid%muts, grid%znu, t0,         &
+                          grid%rdnw, grid%dnw, grid%smdiv,            &
+                          config_flags%non_hydrostatic, iteration,    &
+                          ids, ide, jds, jde, kds, kde,     &
+                          ims, ime, jms, jme, kms, kme,     &
+                          grid%i_start(ij), grid%i_end(ij), &
+                          grid%j_start(ij), grid%j_end(ij), &
+                          k_start    , k_end               )
+BENCH_END(cald_p_rho_tim)
+
+       ENDDO
+       !$OMP END PARALLEL DO
+
+#ifdef DM_PARALLEL
+!
+!  Stencils for patch communications  (WCS, 29 June 2001)
+!
+!         *                     *
+!       * + *      * + *        +
+!         *                     *
+!
+!  ph_2   x
+!  al     x
+!  p      x
+!
+!  2D variables (x,y)
+!
+!  mu_2   x
+!  muts   x
+!  mudf   x
+
+#      include "HALO_EM_C2.inc"
+#      include "PERIOD_BDY_EM_B3.inc"
+#endif
+
+BENCH_START(phys_bc_tim)
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+       DO ij = 1 , grid%num_tiles
+
+       ! boundary condition set for next small timestep
+
+         CALL set_physical_bc3d( grid%ph_2, 'w', config_flags,          &
+                                 ids, ide, jds, jde, kds, kde,     &
+                                 ims, ime, jms, jme, kms, kme,     &
+                                 ips, ipe, jps, jpe, kps, kpe,     &
+                                 grid%i_start(ij), grid%i_end(ij), &
+                                 grid%j_start(ij), grid%j_end(ij), &
+                                 k_start    , k_end               )
+
+         CALL set_physical_bc3d( grid%al, 'p', config_flags,            &
+                                 ids, ide, jds, jde, kds, kde,     &
+                                 ims, ime, jms, jme, kms, kme,     &
+                                 ips, ipe, jps, jpe, kps, kpe,     &
+                                 grid%i_start(ij), grid%i_end(ij), &
+                                 grid%j_start(ij), grid%j_end(ij), &
+                                 k_start    , k_end               )
+
+         CALL set_physical_bc3d( grid%p, 'p', config_flags,             &
+                                 ids, ide, jds, jde, kds, kde,     &
+                                 ims, ime, jms, jme, kms, kme,     &
+                                 ips, ipe, jps, jpe, kps, kpe,     &
+                                 grid%i_start(ij), grid%i_end(ij), &
+                                 grid%j_start(ij), grid%j_end(ij), &
+                                 k_start    , k_end               )
+
+         CALL set_physical_bc2d( grid%muts, 't', config_flags,          &
+                                 ids, ide, jds, jde,               &
+                                 ims, ime, jms, jme,               &
+                                 ips, ipe, jps, jpe,               &
+                                 grid%i_start(ij), grid%i_end(ij), &
+                                 grid%j_start(ij), grid%j_end(ij) )
+
+         CALL set_physical_bc2d( grid%mu_2, 't', config_flags,          &
+                                 ids, ide, jds, jde,               &
+                                 ims, ime, jms, jme,               &
+                                 ips, ipe, jps, jpe,               &
+                                 grid%i_start(ij), grid%i_end(ij), &
+                                 grid%j_start(ij), grid%j_end(ij) )
+
+         CALL set_physical_bc2d( grid%mudf, 't', config_flags,          &
+                                 ids, ide, jds, jde,               &
+                                 ims, ime, jms, jme,               &
+                                 ips, ipe, jps, jpe,               &
+                                 grid%i_start(ij), grid%i_end(ij), &
+                                 grid%j_start(ij), grid%j_end(ij) )
+
+       END DO
+       !$OMP END PARALLEL DO
+BENCH_END(phys_bc_tim)
+
+     END DO small_steps
+
+     !$OMP PARALLEL DO   &
+     !$OMP PRIVATE ( ij )
+     DO ij = 1 , grid%num_tiles
+
+       CALL wrf_debug ( 200 , ' call rk_small_finish' )
+
+      ! change time-perturbation variables back to 
+      ! full perturbation variables.
+      ! first get updated mu at u and v points
+
+BENCH_START(calc_mu_uv_tim)
+       CALL calc_mu_uv_1 ( config_flags,                     &
+                           grid%muts, muus, muvs,                 &
+                           ids, ide, jds, jde, kds, kde,     &
+                           ims, ime, jms, jme, kms, kme,     &
+                           grid%i_start(ij), grid%i_end(ij), &
+                           grid%j_start(ij), grid%j_end(ij), &
+                           k_start    , k_end               )
+BENCH_END(calc_mu_uv_tim)
+BENCH_START(small_step_finish_tim)
+       CALL small_step_finish( grid%u_2, grid%u_1, grid%v_2, grid%v_1, grid%w_2, grid%w_1,     &
+                               grid%t_2, grid%t_1, grid%ph_2, grid%ph_1, grid%ww, ww1,    &
+                               grid%mu_2, grid%mu_1,                       &
+                               grid%mut, grid%muts, grid%muu, muus, grid%muv, muvs,  & 
+                               grid%u_save, grid%v_save, w_save,           &
+                               grid%t_save, ph_save, mu_save,         &
+                               grid%msfux,grid%msfuy, grid%msfvx,grid%msfvy, grid%msftx,grid%msfty, &
+                               grid%h_diabatic,                       &
+                               number_of_small_timesteps,dts_rk, &
+                               rk_step, rk_order,                &
+                               ids, ide, jds, jde, kds, kde,     &
+                               ims, ime, jms, jme, kms, kme,     &
+                               grid%i_start(ij), grid%i_end(ij), &
+                               grid%j_start(ij), grid%j_end(ij), &
+                               k_start    , k_end               )
+!  call  to set ru_m, rv_m and ww_m b.c's for PD advection
+
+       IF (rk_step == rk_order) THEN
+
+         CALL set_physical_bc3d( grid%ru_m, 'u', config_flags,   &
+                                 ids, ide, jds, jde, kds, kde,      &
+                                 ims, ime, jms, jme, kms, kme,      &
+                                 ips, ipe, jps, jpe, kps, kpe,      &
+                                 grid%i_start(ij), grid%i_end(ij),  &
+                                 grid%j_start(ij), grid%j_end(ij),  &
+                                 k_start    , k_end                )
+
+         CALL set_physical_bc3d( grid%rv_m, 'v', config_flags,   &
+                                 ids, ide, jds, jde, kds, kde,      &
+                                 ims, ime, jms, jme, kms, kme,      &
+                                 ips, ipe, jps, jpe, kps, kpe,      &
+                                 grid%i_start(ij), grid%i_end(ij),  &
+                                 grid%j_start(ij), grid%j_end(ij),  &
+                                 k_start    , k_end                )
+
+         CALL set_physical_bc3d( grid%ww_m, 'w', config_flags,   &
+                                 ids, ide, jds, jde, kds, kde,      &
+                                 ims, ime, jms, jme, kms, kme,      &
+                                 ips, ipe, jps, jpe, kps, kpe,      &
+                                 grid%i_start(ij), grid%i_end(ij),  &
+                                 grid%j_start(ij), grid%j_end(ij),  &
+                                 k_start    , k_end                )
+
+         CALL set_physical_bc2d( grid%mut, 't', config_flags,   &
+                                 ids, ide, jds, jde,               &
+                                 ims, ime, jms, jme,                &
+                                 ips, ipe, jps, jpe,                &
+                                 grid%i_start(ij), grid%i_end(ij),  &
+                                 grid%j_start(ij), grid%j_end(ij) )
+ 
+       END IF
+
+BENCH_END(small_step_finish_tim)
+
+     END DO
+     !$OMP END PARALLEL DO
+
+!-----------------------------------------------------------
+!  polar filter for full dynamics variables and time-averaged mass fluxes 
+!-----------------------------------------------------------
+
+     IF (config_flags%polar) THEN
+
+       CALL pxft ( grid=grid                                                   &
+                  ,lineno=__LINE__                                             &
+                  ,flag_uv            = 1                                      &
+                  ,flag_rurv          = 1                                      &
+                  ,flag_wph           = 1                                      &
+                  ,flag_ww            = 1                                      &
+                  ,flag_t             = 1                                      &
+                  ,flag_mu            = 1                                      &
+                  ,flag_mut           = 1                                      &
+                  ,flag_moist         = 0                                      &
+                  ,flag_chem          = 0                                      &
+                  ,flag_scalar        = 0                                      &
+                  ,positive_definite  = .FALSE.                                &
+                  ,moist=moist,chem=chem,scalar=scalar                         &
+                  ,fft_filter_lat = config_flags%fft_filter_lat                &
+                  ,dclat = dclat                                               &
+                  ,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             &
+                  ,imsx=imsx,imex=imex,jmsx=jmsx,jmex=jmex,kmsx=kmsx,kmex=kmex &
+                  ,ipsx=ipsx,ipex=ipex,jpsx=jmsx,jpex=jpex,kpsx=kpsx,kpex=kpex )
+
+     END IF
+
+!-----------------------------------------------------------
+!  end polar filter for full dynamics variables and time-averaged mass fluxes 
+!-----------------------------------------------------------
+
+!-----------------------------------------------------------------------
+!  add in physics tendency first if positive definite advection is used.
+!  pd advection applies advective flux limiter on last runge-kutta step
+!-----------------------------------------------------------------------
+! first moisture
+
+     IF (config_flags%pd_moist .and. (rk_step == rk_order)) THEN
+
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+       DO ij = 1 , grid%num_tiles
+         CALL wrf_debug ( 200 , ' call rk_update_scalar_pd' )
+         DO im = PARAM_FIRST_SCALAR, num_3d_m
+           CALL rk_update_scalar_pd( im, im,                                   &
+                                     moist_old(ims,kms,jms,im),                &
+                                     moist_tend(ims,kms,jms,im),               &
+                                     grid%mu_1, grid%mu_1, grid%mub,  &
+                                     rk_step, dt_rk, grid%spec_zone,           &
+                                     config_flags,                             &
+                                     ids, ide, jds, jde, kds, kde,             &
+                                     ims, ime, jms, jme, kms, kme,             &
+                                     grid%i_start(ij), grid%i_end(ij),         &
+                                     grid%j_start(ij), grid%j_end(ij),         &
+                                     k_start    , k_end                       )
+         ENDDO
+       END DO
+       !$OMP END PARALLEL DO
+
+!---------------------- positive definite bc call
+#ifdef DM_PARALLEL
+       IF (config_flags%pd_moist) THEN
+         IF      ( config_flags%h_sca_adv_order <= 4 ) THEN
+#     include "HALO_EM_MOIST_OLD_E_5.inc"
+         ELSE IF ( config_flags%h_sca_adv_order <= 6 ) THEN
+#     include "HALO_EM_MOIST_OLD_E_7.inc"
+         ELSE
+           WRITE(wrf_err_message,*)'solve_em: invalid h_sca_adv_order = ',config_flags%h_sca_adv_order
+           CALL wrf_error_fatal(TRIM(wrf_err_message))
+         ENDIF
+       ENDIF
+#endif
+
+#ifdef DM_PARALLEL
+#  include "PERIOD_BDY_EM_MOIST_OLD.inc"
+#endif
+
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+       DO ij = 1 , grid%num_tiles
+         IF (num_3d_m >= PARAM_FIRST_SCALAR) THEN
+           DO im = PARAM_FIRST_SCALAR , num_3d_m
+             CALL set_physical_bc3d( moist_old(ims,kms,jms,im), 'p', config_flags,   &
+                                     ids, ide, jds, jde, kds, kde,                  &
+                                     ims, ime, jms, jme, kms, kme,                  &
+                                     ips, ipe, jps, jpe, kps, kpe,                  &
+                                     grid%i_start(ij), grid%i_end(ij),              &
+                                     grid%j_start(ij), grid%j_end(ij),              &
+                                     k_start    , k_end                            )
+           END DO
+         ENDIF
+       END DO
+       !$OMP END PARALLEL DO
+
+     END IF  ! end if for pd_moist
+
+! scalars
+
+     IF (config_flags%pd_scalar .and. (rk_step == rk_order)) THEN
+
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+       DO ij = 1 , grid%num_tiles
+         CALL wrf_debug ( 200 , ' call rk_update_scalar_pd' )
+         DO im = PARAM_FIRST_SCALAR, num_3d_s
+           CALL rk_update_scalar_pd( im, im,                                  &
+                                     scalar_old(ims,kms,jms,im),              &
+                                     scalar_tend(ims,kms,jms,im),             &
+                                     grid%mu_1, grid%mu_1, grid%mub, &
+                                     rk_step, dt_rk, grid%spec_zone,          &
+                                     config_flags,                            &
+                                     ids, ide, jds, jde, kds, kde,            &
+                                     ims, ime, jms, jme, kms, kme,            &
+                                     grid%i_start(ij), grid%i_end(ij),        &
+                                     grid%j_start(ij), grid%j_end(ij),        &
+                                     k_start    , k_end                      )
+         ENDDO
+       ENDDO
+       !$OMP END PARALLEL DO
+
+!---------------------- positive definite bc call
+#ifdef DM_PARALLEL
+       IF (config_flags%pd_scalar) THEN
+#ifndef RSL
+         IF      ( config_flags%h_sca_adv_order <= 4 ) THEN
+#     include "HALO_EM_SCALAR_OLD_E_5.inc"
+         ELSE IF ( config_flags%h_sca_adv_order <= 6 ) THEN
+#     include "HALO_EM_SCALAR_OLD_E_7.inc"
+         ELSE
+           WRITE(wrf_err_message,*)'solve_em: invalid h_sca_adv_order = ',config_flags%h_sca_adv_order
+           CALL wrf_error_fatal(TRIM(wrf_err_message))
+         ENDIF
+#else
+         WRITE(wrf_err_message,*)'cannot use pd scheme with RSL - use RSL-LITE'
+         CALL wrf_error_fatal(TRIM(wrf_err_message))
+#endif   
+  endif
+#endif
+
+#ifdef DM_PARALLEL
+#  include "PERIOD_BDY_EM_SCALAR_OLD.inc"
+#endif
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+
+         DO ij = 1 , grid%num_tiles
+           IF (num_3d_m >= PARAM_FIRST_SCALAR) THEN
+             DO im = PARAM_FIRST_SCALAR , num_3d_s
+               CALL set_physical_bc3d(  scalar_old(ims,kms,jms,im), 'p', config_flags, &
+                                        ids, ide, jds, jde, kds, kde,                    &
+                                        ims, ime, jms, jme, kms, kme,                    &
+                                        ips, ipe, jps, jpe, kps, kpe,                    &
+                                        grid%i_start(ij), grid%i_end(ij),                &
+                                        grid%j_start(ij), grid%j_end(ij),                &
+                                        k_start    , k_end                              )
+             END DO
+           ENDIF
+         END DO
+         !$OMP END PARALLEL DO
+
+       END IF  ! end if for pd_scalar
+
+! chem
+
+       IF (config_flags%pd_chem .and. (rk_step == rk_order)) THEN
+
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         DO ij = 1 , grid%num_tiles
+           CALL wrf_debug ( 200 , ' call rk_update_scalar_pd' )
+           DO im = PARAM_FIRST_SCALAR, num_3d_c
+             CALL rk_update_scalar_pd( im, im,                                  &
+                                       chem_old(ims,kms,jms,im),                &
+                                       chem_tend(ims,kms,jms,im),               &
+                                       grid%mu_1, grid%mu_1, grid%mub, &
+                                       rk_step, dt_rk, grid%spec_zone,          &
+                                       config_flags,                            &
+                                       ids, ide, jds, jde, kds, kde,            &
+                                       ims, ime, jms, jme, kms, kme,            &
+                                       grid%i_start(ij), grid%i_end(ij),        &
+                                       grid%j_start(ij), grid%j_end(ij),        &
+                                       k_start    , k_end                      )
+           ENDDO
+         END DO
+         !$OMP END PARALLEL DO
+
+!---------------------- positive definite bc call
+#ifdef DM_PARALLEL
+         IF (config_flags%pd_chem) THEN
+           IF      ( config_flags%h_sca_adv_order <= 4 ) THEN
+#     include "HALO_EM_CHEM_OLD_E_5.inc"
+           ELSE IF ( config_flags%h_sca_adv_order <= 6 ) THEN
+#     include "HALO_EM_CHEM_OLD_E_7.inc"
+           ELSE
+             WRITE(wrf_err_message,*)'solve_em: invalid h_sca_adv_order = ',config_flags%h_sca_adv_order
+             CALL wrf_error_fatal(TRIM(wrf_err_message))
+           ENDIF
+         ENDIF
+#endif
+
+#ifdef DM_PARALLEL
+#  include "PERIOD_BDY_EM_CHEM_OLD.inc"
+#endif
+
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         DO ij = 1 , grid%num_tiles
+           IF (num_3d_m >= PARAM_FIRST_SCALAR) THEN
+             DO im = PARAM_FIRST_SCALAR , num_3d_c
+               CALL set_physical_bc3d(  chem_old(ims,kms,jms,im), 'p', config_flags,     &
+                                        ids, ide, jds, jde, kds, kde,                    &
+                                        ims, ime, jms, jme, kms, kme,                    &
+                                        ips, ipe, jps, jpe, kps, kpe,                    &
+                                        grid%i_start(ij), grid%i_end(ij),                &
+                                        grid%j_start(ij), grid%j_end(ij),                &
+                                        k_start    , k_end                              )
+             END DO 
+           ENDIF
+         END DO
+         !$OMP END PARALLEL DO
+
+       ENDIF  ! end if for pd_chem
+
+! tke
+
+       IF (config_flags%pd_tke .and. (rk_step == rk_order) &
+           .and. (config_flags%km_opt .eq. 2)                ) THEN
+
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         DO ij = 1 , grid%num_tiles
+           CALL wrf_debug ( 200 , ' call rk_update_scalar_pd' )
+           CALL rk_update_scalar_pd( 1, 1,                                    &
+                                     grid%tke_1,                              &
+                                     tke_tend(ims,kms,jms),                   &
+                                     grid%mu_1, grid%mu_1, grid%mub,          &
+                                     rk_step, dt_rk, grid%spec_zone,          &
+                                     config_flags,                            &
+                                     ids, ide, jds, jde, kds, kde,            &
+                                     ims, ime, jms, jme, kms, kme,            &
+                                     grid%i_start(ij), grid%i_end(ij),        &
+                                     grid%j_start(ij), grid%j_end(ij),        &
+                                     k_start    , k_end                       )
+         ENDDO
+         !$OMP END PARALLEL DO
+
+!---------------------- positive definite bc call
+#ifdef DM_PARALLEL
+         IF (config_flags%pd_tke) THEN
+           IF      ( config_flags%h_sca_adv_order <= 4 ) THEN
+#     include "HALO_EM_TKE_OLD_E_5.inc"
+           ELSE IF ( config_flags%h_sca_adv_order <= 6 ) THEN
+#     include "HALO_EM_TKE_OLD_E_7.inc"
+           ELSE
+             WRITE(wrf_err_message,*)'solve_em: invalid h_sca_adv_order = ',config_flags%h_sca_adv_order
+             CALL wrf_error_fatal(TRIM(wrf_err_message))
+           ENDIF
+         ENDIF
+#endif
+
+#ifdef DM_PARALLEL
+#  include "PERIOD_BDY_EM_TKE_OLD.inc"
+#endif
+
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         DO ij = 1 , grid%num_tiles
+           CALL set_physical_bc3d(  grid%tke_1, 'p', config_flags,  &
+                                    ids, ide, jds, jde, kds, kde,      &
+                                    ims, ime, jms, jme, kms, kme,      &
+                                    ips, ipe, jps, jpe, kps, kpe,      &
+                                    grid%i_start(ij), grid%i_end(ij),  &
+                                    grid%j_start(ij), grid%j_end(ij),  &
+                                    k_start    , k_end                )
+         END DO
+         !$OMP END PARALLEL DO
+
+!---  end of positive definite physics tendency update
+
+       END IF  ! end if for pd_tke
+
+#ifdef DM_PARALLEL
+!
+!  Stencils for patch communications  (WCS, 29 June 2001)
+!
+!          * * * * *            
+!          * * * * *            
+!          * * + * *            
+!          * * * * *            
+!          * * * * *            
+!
+! ru_m         x
+! rv_m         x
+! ww_m         x
+! mut          x
+!
+!--------------------------------------------------------------
+
+#  include "HALO_EM_D.inc"
+#endif
+
+!<DESCRIPTION>
+!<pre>
+! (4) Still within the RK loop, the scalar variables are advanced.
+!
+!    For the moist and chem variables, each one is advanced
+!    individually, using named loops "moist_variable_loop:"
+!    and "chem_variable_loop:".  Each RK substep begins by
+!    calculating the advective tendency, and, for the first RK step, 
+!    3D mixing (calling rk_scalar_tend) followed by an update
+!    of the scalar (calling rk_scalar_update).
+!</pre>
+!</DESCRIPTION>
+
+
+       moist_scalar_advance: IF (num_3d_m >= PARAM_FIRST_SCALAR )  THEN
+
+         moist_variable_loop: DO im = PARAM_FIRST_SCALAR, num_3d_m
+
+! adv_moist_cond is set in module_physics_init based on mp_physics choice
+!       true except for Ferrier scheme
+
+           IF (grid%adv_moist_cond .or. im==p_qv ) THEN
+
+             !$OMP PARALLEL DO   &
+             !$OMP PRIVATE ( ij )
+             moist_tile_loop_1: DO ij = 1 , grid%num_tiles
+
+               CALL wrf_debug ( 200 , ' call rk_scalar_tend' )
+
+BENCH_START(rk_scalar_tend_tim)
+               CALL rk_scalar_tend (  im, im, config_flags,                  &
+                           rk_step, dt_rk,                                   &
+                           grid%ru_m, grid%rv_m, grid%ww_m,                  &
+                           grid%mut, grid%mub, grid%mu_1,                    &
+                           grid%alt,                                         &
+                           moist_old(ims,kms,jms,im),                        &
+                           moist(ims,kms,jms,im),                            &
+                           moist_tend(ims,kms,jms,im),                       &
+                           advect_tend,grid%rqvften,                         &
+                           grid%qv_base, .true., grid%fnm, grid%fnp,         &
+                           grid%msfux,grid%msfuy, grid%msfvx, grid%msfvx_inv,&
+                           grid%msfvy, grid%msftx,grid%msfty,                & 
+                           grid%rdx, grid%rdy, grid%rdn, grid%rdnw, grid%khdif, &
+                           grid%kvdif, grid%xkhh,                            &
+                           grid%diff_6th_opt, grid%diff_6th_factor,          &
+                           config_flags%pd_moist,            &
+                           ids, ide, jds, jde, kds, kde,     &
+                           ims, ime, jms, jme, kms, kme,     &
+                           grid%i_start(ij), grid%i_end(ij), &
+                           grid%j_start(ij), grid%j_end(ij), &
+                           k_start    , k_end               )
+
+BENCH_END(rk_scalar_tend_tim)
+
+BENCH_START(rlx_bdy_scalar_tim)
+               IF( ( config_flags%specified .or. config_flags%nested ) .and. rk_step == 1 ) THEN 
+                 IF ( im .EQ. P_QV .OR. config_flags%nested ) THEN
+                   CALL relax_bdy_scalar ( moist_tend(ims,kms,jms,im),            & 
+                                     moist(ims,kms,jms,im),  grid%mut,         &
+                                     moist_bxs(jms,kms,1,im),moist_bxe(jms,kms,1,im), &
+                                     moist_bys(ims,kms,1,im),moist_bye(ims,kms,1,im), &
+                                     moist_btxs(jms,kms,1,im),moist_btxe(jms,kms,1,im), &
+                                     moist_btys(ims,kms,1,im),moist_btye(ims,kms,1,im), &
+                                     config_flags%spec_bdy_width, grid%spec_zone, grid%relax_zone, &
+                                     grid%dtbc, grid%fcx, grid%gcx,             &
+                                     config_flags,               &
+                                     ids,ide, jds,jde, kds,kde,  & ! domain dims
+                                     ims,ime, jms,jme, kms,kme,  & ! memory dims
+                                     ips,ipe, jps,jpe, kps,kpe,  & ! patch  dims
+                                     grid%i_start(ij), grid%i_end(ij),      &
+                                     grid%j_start(ij), grid%j_end(ij),      &
+                                     k_start, k_end                        )
+
+                   CALL spec_bdy_scalar  ( moist_tend(ims,kms,jms,im),                &
+                                     moist_bxs(jms,kms,1,im),moist_bxe(jms,kms,1,im), &
+                                     moist_bys(ims,kms,1,im),moist_bye(ims,kms,1,im), &
+                                     moist_btxs(jms,kms,1,im),moist_btxe(jms,kms,1,im), &
+                                     moist_btys(ims,kms,1,im),moist_btye(ims,kms,1,im), &
+                                     config_flags%spec_bdy_width, grid%spec_zone,                 &
+                                     config_flags,               &
+                                     ids,ide, jds,jde, kds,kde,  & ! domain dims
+                                     ims,ime, jms,jme, kms,kme,  & ! memory dims
+                                     ips,ipe, jps,jpe, kps,kpe,  & ! patch  dims
+                                     grid%i_start(ij), grid%i_end(ij),          &
+                                     grid%j_start(ij), grid%j_end(ij),          &
+                                     k_start, k_end                               )
+                 ENDIF
+               ENDIF
+BENCH_END(rlx_bdy_scalar_tim)
+
+             ENDDO moist_tile_loop_1
+             !$OMP END PARALLEL DO
+
+             !$OMP PARALLEL DO   &
+             !$OMP PRIVATE ( ij )
+             moist_tile_loop_2: DO ij = 1 , grid%num_tiles
+
+               CALL wrf_debug ( 200 , ' call rk_update_scalar' )
+
+BENCH_START(update_scal_tim)
+               CALL rk_update_scalar( im, im,                     &
+                               moist_old(ims,kms,jms,im),         &
+                               moist(ims,kms,jms,im),             &
+                               moist_tend(ims,kms,jms,im),        &
+                               advect_tend, grid%msftx,grid%msfty, &
+                               grid%mu_1, grid%mu_2, grid%mub,    &
+                               rk_step, dt_rk, grid%spec_zone,    &
+                               config_flags,                      &
+                               ids, ide, jds, jde, kds, kde,     &
+                               ims, ime, jms, jme, kms, kme,     &
+                               grid%i_start(ij), grid%i_end(ij), &
+                               grid%j_start(ij), grid%j_end(ij), &
+                               k_start    , k_end                )
+BENCH_END(update_scal_tim)
+
+BENCH_START(flow_depbdy_tim)
+               IF( config_flags%specified ) THEN
+                 IF(im .ne. P_QV)THEN
+                   CALL flow_dep_bdy  (  moist(ims,kms,jms,im),                 &
+                                grid%ru_m, grid%rv_m, config_flags,             &
+                                grid%spec_zone,                                 &
+                                ids,ide, jds,jde, kds,kde,                      &
+                                ims,ime, jms,jme, kms,kme,                      &
+                                ips,ipe, jps,jpe, kps,kpe,                      &
+                                grid%i_start(ij), grid%i_end(ij),               &
+                                grid%j_start(ij), grid%j_end(ij),               &
+                                k_start, k_end                               )
+                 ENDIF
+               ENDIF
+BENCH_END(flow_depbdy_tim)
+
+             ENDDO moist_tile_loop_2
+             !$OMP END PARALLEL DO
+
+           ENDIF  !-- if (grid%adv_moist_cond .or. im==p_qv ) then
+
+         ENDDO moist_variable_loop
+
+       ENDIF moist_scalar_advance
+
+BENCH_START(tke_adv_tim)
+       TKE_advance: IF (config_flags%km_opt .eq. 2) then
+#ifdef DM_PARALLEL
+         IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
+#       include "HALO_EM_TKE_ADVECT_3.inc"
+         ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
+#       include "HALO_EM_TKE_ADVECT_5.inc"
+         ELSE
+          WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
+          CALL wrf_error_fatal(TRIM(wrf_err_message))
+         ENDIF
+#endif
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         tke_tile_loop_1: DO ij = 1 , grid%num_tiles
+
+           CALL wrf_debug ( 200 , ' call rk_scalar_tend for tke' )
+           CALL rk_scalar_tend ( 1, 1, config_flags,                               &
+                            rk_step, dt_rk,                                        &
+                            grid%ru_m, grid%rv_m, grid%ww_m,                       &
+                            grid%mut, grid%mub, grid%mu_1,                         &
+                            grid%alt,                                              &
+                            grid%tke_1,                                            &
+                            grid%tke_2,                                            &
+                            tke_tend(ims,kms,jms),                                 &
+                            advect_tend,grid%rqvften,                              &
+                            grid%qv_base, .false., grid%fnm, grid%fnp,             &
+                            grid%msfux,grid%msfuy, grid%msfvx, grid%msfvx_inv,     &
+                            grid%msfvy, grid%msftx,grid%msfty,                     &
+                            grid%rdx, grid%rdy, grid%rdn, grid%rdnw, grid%khdif,   &
+                            grid%kvdif, grid%xkhh,                                 &
+                            grid%diff_6th_opt, grid%diff_6th_factor,               &
+                            config_flags%pd_tke,              &
+                            ids, ide, jds, jde, kds, kde,     &
+                            ims, ime, jms, jme, kms, kme,     &
+                            grid%i_start(ij), grid%i_end(ij), &
+                            grid%j_start(ij), grid%j_end(ij), &
+                            k_start    , k_end               )
+
+         ENDDO tke_tile_loop_1
+         !$OMP END PARALLEL DO
+
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         tke_tile_loop_2: DO ij = 1 , grid%num_tiles
+
+           CALL wrf_debug ( 200 , ' call rk_update_scalar' )
+           CALL rk_update_scalar( 1, 1,                             &
+                             grid%tke_1,                            &
+                             grid%tke_2,                            &
+                             tke_tend(ims,kms,jms),                 &
+                             advect_tend,grid%msftx,grid%msfty,     &
+                             grid%mu_1, grid%mu_2, grid%mub,        &
+                             rk_step, dt_rk, grid%spec_zone,        &
+                             config_flags,                          &
+                             ids, ide, jds, jde, kds, kde,     &
+                             ims, ime, jms, jme, kms, kme,     &
+                             grid%i_start(ij), grid%i_end(ij), &
+                             grid%j_start(ij), grid%j_end(ij), &
+                             k_start    , k_end               ) 
+
+! bound the tke (greater than 0, less than tke_upper_bound)
+
+           CALL bound_tke( grid%tke_2, grid%tke_upper_bound,    &
+                           ids, ide, jds, jde, kds, kde,        &
+                           ims, ime, jms, jme, kms, kme,        &
+                           grid%i_start(ij), grid%i_end(ij),    &
+                           grid%j_start(ij), grid%j_end(ij),    &
+                           k_start    , k_end                  )
+
+           IF( config_flags%specified .or. config_flags%nested ) THEN
+              CALL flow_dep_bdy (  grid%tke_2,                     &
+                                   grid%ru_m, grid%rv_m, config_flags,               &
+                                   grid%spec_zone,                              &
+                                   ids,ide, jds,jde, kds,kde,  & ! domain dims
+                                   ims,ime, jms,jme, kms,kme,  & ! memory dims
+                                   ips,ipe, jps,jpe, kps,kpe,  & ! patch  dims
+                                   grid%i_start(ij), grid%i_end(ij),       &
+                                   grid%j_start(ij), grid%j_end(ij),       &
+                                   k_start, k_end                               )
+           ENDIF
+         ENDDO tke_tile_loop_2
+         !$OMP END PARALLEL DO
+
+       ENDIF TKE_advance
+BENCH_END(tke_adv_tim)
+
+#ifdef WRF_CHEM
+!  next the chemical species
+BENCH_START(chem_adv_tim)
+       chem_scalar_advance: IF (num_3d_c >= PARAM_FIRST_SCALAR)  THEN
+
+         chem_variable_loop: DO ic = PARAM_FIRST_SCALAR, num_3d_c
+
+           !$OMP PARALLEL DO   &
+           !$OMP PRIVATE ( ij )
+           chem_tile_loop_1: DO ij = 1 , grid%num_tiles
+
+             CALL wrf_debug ( 200 , ' call rk_scalar_tend in chem_tile_loop_1' )
+             CALL rk_scalar_tend ( ic, ic, config_flags,                         &
+                              rk_step, dt_rk,                                    &
+                              grid%ru_m, grid%rv_m, grid%ww_m,                   &
+                              grid%mut, grid%mub, grid%mu_1,                     &
+                              grid%alt,                                          &
+                              chem_old(ims,kms,jms,ic),                          &
+                              chem(ims,kms,jms,ic),                              &
+                              chem_tend(ims,kms,jms,ic),                         &
+                              advect_tend,grid%rqvften,                          &
+                              grid%qv_base, .false., grid%fnm, grid%fnp,         &
+                              grid%msfux,grid%msfuy, grid%msfvx, grid%msfvx_inv, &
+                              grid%msfvy, grid%msftx,grid%msfty,                 &
+                              grid%rdx, grid%rdy, grid%rdn, grid%rdnw,     &
+                              grid%khdif, grid%kvdif, grid%xkhh,                 &
+                              grid%diff_6th_opt, grid%diff_6th_factor,           &
+                              config_flags%pd_chem,                              &
+                              ids, ide, jds, jde, kds, kde,                      &
+                              ims, ime, jms, jme, kms, kme,                      &
+                              grid%i_start(ij), grid%i_end(ij),                  &
+                              grid%j_start(ij), grid%j_end(ij),                  &
+                              k_start    , k_end                                )
+!
+! Currently, chemistry species with specified boundaries (i.e. the mother
+! domain)  are being over written by flow_dep_bdy_chem. So, relax_bdy and
+! spec_bdy are only called for nests. For boundary conditions from global model or larger domain,
+! chem is uncoupled, and only used for one row/column on inflow (if have_bcs_chem=.true.) 
+!
+           IF( ( config_flags%nested ) .and. rk_step == 1 ) THEN
+             IF(ic.eq.1)CALL wrf_debug ( 10 , ' have_bcs_chem' )
+             CALL relax_bdy_scalar ( chem_tend(ims,kms,jms,ic),                                    &
+                                     chem(ims,kms,jms,ic),  grid%mut,                              &
+                                     chem_bxs(jms,kms,1,ic),chem_bxe(jms,kms,1,ic),                &
+                                     chem_bys(ims,kms,1,ic),chem_bye(ims,kms,1,ic),                &
+                                     chem_btxs(jms,kms,1,ic),chem_btxe(jms,kms,1,ic),              &
+                                     chem_btys(ims,kms,1,ic),chem_btye(ims,kms,1,ic),              &
+                                     config_flags%spec_bdy_width, grid%spec_zone, grid%relax_zone, &
+                                     grid%dtbc, grid%fcx, grid%gcx,                                &
+                                     config_flags,                                                 &
+                                     ids,ide, jds,jde, kds,kde,                                    &
+                                     ims,ime, jms,jme, kms,kme,                                    &
+                                     ips,ipe, jps,jpe, kps,kpe,                                    &
+                                     grid%i_start(ij), grid%i_end(ij),                             &
+                                     grid%j_start(ij), grid%j_end(ij),                             &
+                                     k_start, k_end                                                )
+             CALL spec_bdy_scalar  ( chem_tend(ims,kms,jms,ic),                 &
+                                     chem_bxs(jms,kms,1,ic),chem_bxe(jms,kms,1,ic),                &
+                                     chem_bys(ims,kms,1,ic),chem_bye(ims,kms,1,ic),                &
+                                     chem_btxs(jms,kms,1,ic),chem_btxe(jms,kms,1,ic),              &
+                                     chem_btys(ims,kms,1,ic),chem_btye(ims,kms,1,ic),              &
+                                     config_flags%spec_bdy_width, grid%spec_zone,                  &
+                                     config_flags,                                                 &
+                                     ids,ide, jds,jde, kds,kde,                                    &
+                                     ims,ime, jms,jme, kms,kme,                                    &
+                                     ips,ipe, jps,jpe, kps,kpe,                                    &
+                                     grid%i_start(ij), grid%i_end(ij),                             &
+                                     grid%j_start(ij), grid%j_end(ij),                             &
+                                     k_start, k_end                                                )
+           ENDIF
+
+         ENDDO chem_tile_loop_1
+         !$OMP END PARALLEL DO
+
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+
+         chem_tile_loop_2: DO ij = 1 , grid%num_tiles
+
+           CALL wrf_debug ( 200 , ' call rk_update_scalar' )
+           CALL rk_update_scalar( ic, ic,                           &
+                                  chem_old(ims,kms,jms,ic),         &  ! was chem_1
+                                  chem(ims,kms,jms,ic),             &
+                                  chem_tend(ims,kms,jms,ic),        &
+                                  advect_tend, grid%msftx, grid%msfty, &
+                                  grid%mu_1, grid%mu_2, grid%mub,      &
+                                  rk_step, dt_rk, grid%spec_zone,      &
+                                  config_flags,                     &
+                                  ids, ide, jds, jde, kds, kde,     &
+                                  ims, ime, jms, jme, kms, kme,     &
+                                  grid%i_start(ij), grid%i_end(ij), &
+                                  grid%j_start(ij), grid%j_end(ij), &
+                                  k_start    , k_end               )
+
+           IF( config_flags%specified  ) THEN
+             CALL flow_dep_bdy_chem( chem(ims,kms,jms,ic),                          &
+                                     chem_bxs(jms,kms,1,ic), chem_btxs(jms,kms,1,ic),  &
+                                     chem_bxe(jms,kms,1,ic), chem_btxe(jms,kms,1,ic),  &
+                                     chem_bys(ims,kms,1,ic), chem_btys(ims,kms,1,ic),  &
+                                     chem_bye(ims,kms,1,ic), chem_btye(ims,kms,1,ic),  &
+                                     dt_rk+grid%dtbc,                                  &
+                                     config_flags%spec_bdy_width,grid%z,      &
+                                     grid%have_bcs_chem,      &
+                                     grid%ru_m, grid%rv_m, config_flags,grid%alt,       &
+                                     grid%t_1,grid%pb,grid%p,t0,p1000mb,rcp,grid%ph_2,grid%phb,g, &
+                                     grid%spec_zone,ic,                  &
+                                     ids,ide, jds,jde, kds,kde,  & ! domain dims
+                                     ims,ime, jms,jme, kms,kme,  & ! memory dims
+                                     ips,ipe, jps,jpe, kps,kpe,  & ! patch  dims
+                                     grid%i_start(ij), grid%i_end(ij),   &
+                                     grid%j_start(ij), grid%j_end(ij),   &
+                                     k_start, k_end                      )
+           ENDIF
+         ENDDO chem_tile_loop_2
+         !$OMP END PARALLEL DO
+
+       ENDDO chem_variable_loop
+     ENDIF chem_scalar_advance
+BENCH_END(chem_adv_tim)
+#endif
+
+!  next the other scalar species
+     other_scalar_advance: IF (num_3d_s >= PARAM_FIRST_SCALAR)  THEN
+
+       scalar_variable_loop: do is = PARAM_FIRST_SCALAR, num_3d_s
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         scalar_tile_loop_1: DO ij = 1 , grid%num_tiles
+
+           CALL wrf_debug ( 200 , ' call rk_scalar_tend' )
+           CALL rk_scalar_tend ( is, is, config_flags,                            &
+                                 rk_step, dt_rk,                                  &
+                                 grid%ru_m, grid%rv_m, grid%ww_m,                 &
+                                 grid%mut, grid%mub, grid%mu_1,                   &
+                                 grid%alt,                                        &
+                                 scalar_old(ims,kms,jms,is),                      &
+                                 scalar(ims,kms,jms,is),                          &
+                                 scalar_tend(ims,kms,jms,is),                     &
+                                 advect_tend,grid%rqvften,                        &
+                                 grid%qv_base, .false., grid%fnm, grid%fnp,       &
+                                 grid%msfux,grid%msfuy, grid%msfvx, grid%msfvx_inv, &
+                                 grid%msfvy, grid%msftx,grid%msfty,               &
+                                 grid%rdx, grid%rdy, grid%rdn, grid%rdnw,         &
+                                 grid%khdif, grid%kvdif, grid%xkhh,               &
+                                 grid%diff_6th_opt, grid%diff_6th_factor,         &
+                                 config_flags%pd_scalar,           &
+                                 ids, ide, jds, jde, kds, kde,     &
+                                 ims, ime, jms, jme, kms, kme,     &
+                                 grid%i_start(ij), grid%i_end(ij), &
+                                 grid%j_start(ij), grid%j_end(ij), &
+                                 k_start    , k_end               )
+
+           IF( config_flags%nested .and. (rk_step == 1) ) THEN
+
+             IF (is .EQ. P_QNDROP .OR. is .EQ. P_QNI          & 
+                                  .OR. is .EQ. P_QNS          &
+                                  .OR. is .EQ. P_QNR          &
+                                  .OR. is .EQ. P_QNG) THEN             
+
+               CALL relax_bdy_scalar ( scalar_tend(ims,kms,jms,is),                            &
+                                       scalar(ims,kms,jms,is),  grid%mut,                      &
+                                       scalar_bxs(jms,kms,1,is),scalar_bxe(jms,kms,1,is),      &
+                                       scalar_bys(ims,kms,1,is),scalar_bye(ims,kms,1,is),      &
+                                       scalar_btxs(jms,kms,1,is),scalar_btxe(jms,kms,1,is),    &
+                                       scalar_btys(ims,kms,1,is),scalar_btye(ims,kms,1,is),    &
+                                       config_flags%spec_bdy_width, grid%spec_zone, grid%relax_zone, &
+                                       grid%dtbc, grid%fcx, grid%gcx,                          &
+                                       config_flags,                                           &
+                                       ids,ide, jds,jde, kds,kde,                              &
+                                       ims,ime, jms,jme, kms,kme,                              &
+                                       ips,ipe, jps,jpe, kps,kpe,                              &
+                                       grid%i_start(ij), grid%i_end(ij),                       &
+                                       grid%j_start(ij), grid%j_end(ij),                       &
+                                       k_start, k_end                                          )
+
+               CALL spec_bdy_scalar  ( scalar_tend(ims,kms,jms,is),                            &
+                                       scalar_bxs(jms,kms,1,is),scalar_bxe(jms,kms,1,is),      &
+                                       scalar_bys(ims,kms,1,is),scalar_bye(ims,kms,1,is),      &
+                                       scalar_btxs(jms,kms,1,is),scalar_btxe(jms,kms,1,is),    &
+                                       scalar_btys(ims,kms,1,is),scalar_btye(ims,kms,1,is),    &
+                                       config_flags%spec_bdy_width, grid%spec_zone,            &
+                                       config_flags,                                           &
+                                       ids,ide, jds,jde, kds,kde,                              &
+                                       ims,ime, jms,jme, kms,kme,                              &
+                                       ips,ipe, jps,jpe, kps,kpe,                              &
+                                       grid%i_start(ij), grid%i_end(ij),                       &
+                                       grid%j_start(ij), grid%j_end(ij),                       &
+                                       k_start, k_end                                          )
+
+             ENDIF
+
+           ENDIF ! b.c test for chem nested boundary condition
+
+         ENDDO scalar_tile_loop_1
+         !$OMP END PARALLEL DO
+
+         !$OMP PARALLEL DO   &
+         !$OMP PRIVATE ( ij )
+         scalar_tile_loop_2: DO ij = 1 , grid%num_tiles
+
+           CALL wrf_debug ( 200 , ' call rk_update_scalar' )
+           CALL rk_update_scalar( is, is,                           &
+                                  scalar_old(ims,kms,jms,is),       &  ! was scalar_1
+                                  scalar(ims,kms,jms,is),           &
+                                  scalar_tend(ims,kms,jms,is),      &
+                                  advect_tend, grid%msftx, grid%msfty, &
+                                  grid%mu_1, grid%mu_2, grid%mub,                  &
+                                  rk_step, dt_rk, grid%spec_zone,        &
+                                  config_flags,     &
+                                  ids, ide, jds, jde, kds, kde,     &
+                                  ims, ime, jms, jme, kms, kme,     &
+                                  grid%i_start(ij), grid%i_end(ij), &
+                                  grid%j_start(ij), grid%j_end(ij), &
+                                  k_start    , k_end               )
+
+
+           IF( config_flags%specified ) THEN
+             CALL flow_dep_bdy  ( scalar(ims,kms,jms,is),     &
+                                  grid%ru_m, grid%rv_m, config_flags,   &
+                                  grid%spec_zone,                  &
+                                  ids,ide, jds,jde, kds,kde,  & ! domain dims
+                                  ims,ime, jms,jme, kms,kme,  & ! memory dims
+                                  ips,ipe, jps,jpe, kps,kpe,  & ! patch  dims
+                                  grid%i_start(ij), grid%i_end(ij),  &
+                                  grid%j_start(ij), grid%j_end(ij),  &
+                                  k_start, k_end                    )
+           ENDIF
+
+         ENDDO scalar_tile_loop_2
+         !$OMP END PARALLEL DO
+
+       ENDDO scalar_variable_loop
+
+     ENDIF other_scalar_advance
+
+ !  update the pressure and density at the new time level
+
+     !$OMP PARALLEL DO   &
+     !$OMP PRIVATE ( ij )
+     DO ij = 1 , grid%num_tiles
+
+BENCH_START(calc_p_rho_tim)
+
+       CALL calc_p_rho_phi( moist, num_3d_m,                &
+                            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%rdn, config_flags%non_hydrostatic,             &
+                            ids, ide, jds, jde, kds, kde,     &
+                            ims, ime, jms, jme, kms, kme,     &
+                            grid%i_start(ij), grid%i_end(ij), &
+                            grid%j_start(ij), grid%j_end(ij), &
+                            k_start    , k_end               )
+
+BENCH_END(calc_p_rho_tim)
+
+     ENDDO
+     !$OMP END PARALLEL DO
+
+!  Reset the boundary conditions if there is another corrector step.
+!  (rk_step < rk_order), else we'll handle it at the end of everything
+!  (after the split physics, before exiting the timestep).
+
+     rk_step_1_check: IF ( rk_step < rk_order ) THEN
+
+!-----------------------------------------------------------
+!  rk3 substep polar filter for scalars (moist,chem,scalar)
+!-----------------------------------------------------------
+
+       IF (config_flags%polar) THEN 
+         IF ( num_3d_m >= PARAM_FIRST_SCALAR ) THEN
+           CALL wrf_debug ( 200 , ' call filter moist ' )
+           DO im = PARAM_FIRST_SCALAR, num_3d_m
+             CALL couple_scalars_for_filter ( FIELD=moist(ims,kms,jms,im)              &
+                    ,MU=grid%mu_2 , MUB=grid%mub                                 &
+                    ,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          )
+             CALL pxft ( grid=grid                                               &
+                    ,lineno=__LINE__                                             &
+                    ,flag_uv            = 0                                      &
+                    ,flag_rurv          = 0                                      &
+                    ,flag_wph           = 0                                      &
+                    ,flag_ww            = 0                                      &
+                    ,flag_t             = 0                                      &
+                    ,flag_mu            = 0                                      &
+                    ,flag_mut           = 0                                      &
+                    ,flag_moist         = im                                     &
+                    ,flag_chem          = 0                                      &
+                    ,flag_scalar        = 0                                      &
+                    ,positive_definite=.FALSE.                                   &
+                    ,moist=moist,chem=chem,scalar=scalar                         &
+                    ,fft_filter_lat = config_flags%fft_filter_lat                &
+                    ,dclat = dclat                                               &
+                    ,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             &
+                    ,imsx=imsx,imex=imex,jmsx=jmsx,jmex=jmex,kmsx=kmsx,kmex=kmex &
+                    ,ipsx=ipsx,ipex=ipex,jpsx=jmsx,jpex=jpex,kpsx=kpsx,kpex=kpex )
+             CALL uncouple_scalars_for_filter ( FIELD=moist(ims,kms,jms,im)            &
+                    ,MU=grid%mu_2 , MUB=grid%mub                                 &
+                    ,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          )
+           END DO
+         END IF
+   
+         IF ( num_3d_c >= PARAM_FIRST_SCALAR ) THEN
+           CALL wrf_debug ( 200 , ' call filter chem ' )
+           DO im = PARAM_FIRST_SCALAR, num_3d_c
+             CALL couple_scalars_for_filter ( FIELD=chem(ims,kms,jms,im)               &
+                    ,MU=grid%mu_2 , MUB=grid%mub                                 &
+                    ,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           )
+             CALL pxft ( grid=grid                                               &
+                    ,lineno=__LINE__                                             &
+                    ,flag_uv            = 0                                      &
+                    ,flag_rurv          = 0                                      &
+                    ,flag_wph           = 0                                      &
+                    ,flag_ww            = 0                                      &
+                    ,flag_t             = 0                                      &
+                    ,flag_mu            = 0                                      &
+                    ,flag_mut           = 0                                      &
+                    ,flag_moist         = 0                                      &
+                    ,flag_chem          = im                                     &
+                    ,flag_scalar        = 0                                      &
+                    ,positive_definite=.FALSE.                                   &
+                    ,moist=moist,chem=chem,scalar=scalar                         &
+                    ,fft_filter_lat = config_flags%fft_filter_lat                &
+                    ,dclat = dclat                                               &
+                    ,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             &
+                    ,imsx=imsx,imex=imex,jmsx=jmsx,jmex=jmex,kmsx=kmsx,kmex=kmex &
+                    ,ipsx=ipsx,ipex=ipex,jpsx=jmsx,jpex=jpex,kpsx=kpsx,kpex=kpex )
+             CALL uncouple_scalars_for_filter ( FIELD=chem(ims,kms,jms,im)             &
+                    ,MU=grid%mu_2 , MUB=grid%mub                                 &
+                    ,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          )
+           END DO
+         END IF
+   
+         IF ( num_3d_s >= PARAM_FIRST_SCALAR ) THEN
+           CALL wrf_debug ( 200 , ' call filter scalar ' )
+           DO im = PARAM_FIRST_SCALAR, num_3d_s
+             CALL couple_scalars_for_filter ( FIELD=scalar(ims,kms,jms,im)           &
+                  ,MU=grid%mu_2 , MUB=grid%mub                                 &
+                  ,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          )
+             CALL pxft ( grid=grid                                             &
+                  ,lineno=__LINE__                                             &
+                  ,flag_uv            = 0                                      &
+                  ,flag_rurv          = 0                                      &
+                  ,flag_wph           = 0                                      &
+                  ,flag_ww            = 0                                      &
+                  ,flag_t             = 0                                      &
+                  ,flag_mu            = 0                                      &
+                  ,flag_mut           = 0                                      &
+                  ,flag_moist         = 0                                      &
+                  ,flag_chem          = 0                                      &
+                  ,flag_scalar        = im                                     &
+                  ,positive_definite=.FALSE.                                   &
+                  ,moist=moist,chem=chem,scalar=scalar                         &
+                  ,fft_filter_lat = config_flags%fft_filter_lat                &
+                  ,dclat = dclat                                               &
+                  ,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             &
+                  ,imsx=imsx,imex=imex,jmsx=jmsx,jmex=jmex,kmsx=kmsx,kmex=kmex &
+                  ,ipsx=ipsx,ipex=ipex,jpsx=jmsx,jpex=jpex,kpsx=kpsx,kpex=kpex )
+             CALL uncouple_scalars_for_filter ( FIELD=scalar(ims,kms,jms,im)   &
+                  ,MU=grid%mu_2 , MUB=grid%mub                                 &
+                  ,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          )
+           END DO
+         END IF
+       END IF ! polar filter test
+
+!-----------------------------------------------------------
+!  END rk3 substep polar filter for scalars (moist,chem,scalar)
+!-----------------------------------------------------------
+
+!-----------------------------------------------------------
+!  Stencils for patch communications  (WCS, 29 June 2001)
+!
+!  here's where we need a wide comm stencil - these are the 
+!  uncoupled variables so are used for high order calc in
+!  advection and mixong routines.
+!
+!
+!                                  * * * * * * *
+!                     * * * * *    * * * * * * *
+!            *        * * * * *    * * * * * * *
+!          * + *      * * + * *    * * * + * * *
+!            *        * * * * *    * * * * * * *
+!                     * * * * *    * * * * * * *
+!                                  * * * * * * *
+!
+! al        x
+!
+!  2D variable
+! mu_2      x
+!
+! (adv order <=4)
+! u_2                     x
+! v_2                     x
+! w_2                     x
+! t_2                     x
+! ph_2                    x
+!
+! (adv order <=6)
+! u_2                                    x
+! v_2                                    x
+! w_2                                    x
+! t_2                                    x
+! ph_2                                   x
+!
+!  4D variable
+! moist                   x
+! chem                    x
+! scalar                  x
+
+#ifdef DM_PARALLEL
+       IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
+#    include "HALO_EM_D2_3.inc"
+       ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
+#    include "HALO_EM_D2_5.inc"
+       ELSE 
+         WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
+         CALL wrf_error_fatal(TRIM(wrf_err_message))
+       ENDIF
+#  include "PERIOD_BDY_EM_D.inc"
+#  include "PERIOD_BDY_EM_MOIST2.inc"
+#  include "PERIOD_BDY_EM_CHEM2.inc"
+#  include "PERIOD_BDY_EM_SCALAR2.inc"
+#endif
+
+BENCH_START(bc_end_tim)
+       !$OMP PARALLEL DO   &
+       !$OMP PRIVATE ( ij )
+       tile_bc_loop_1: DO ij = 1 , grid%num_tiles
+         CALL wrf_debug ( 200 , ' call rk_phys_bc_dry_2' )
+
+         CALL rk_phys_bc_dry_2( config_flags,                     &
+                                grid%u_2, grid%v_2, grid%w_2,     &
+                                grid%t_2, grid%ph_2, grid%mu_2,   &
+                                ids, ide, jds, jde, kds, kde,     &
+                                ims, ime, jms, jme, kms, kme,     &
+                                ips, ipe, jps, jpe, kps, kpe,     &
+                                grid%i_start(ij), grid%i_end(ij), &
+                                grid%j_start(ij), grid%j_end(ij), &
+                                k_start    , k_end               )
+
+BENCH_START(diag_w_tim)
+         IF (.not. config_flags%non_hydrostatic) THEN
+           CALL diagnose_w( ph_tend, grid%ph_2, grid%ph_1, grid%w_2, grid%muts, dt_rk,  &
+                            grid%u_2, grid%v_2, grid%ht,                           &
+                            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,           &
+                            grid%i_start(ij), grid%i_end(ij),       &
+                            grid%j_start(ij), grid%j_end(ij),       &
+                            k_start    , k_end                     )
+         ENDIF
+BENCH_END(diag_w_tim)
+
+         IF (num_3d_m >= PARAM_FIRST_SCALAR) THEN
+
+           moisture_loop_bdy_1 : DO im = PARAM_FIRST_SCALAR , num_3d_m
+  
+             CALL set_physical_bc3d( moist(ims,kms,jms,im), 'p', config_flags,   &
+                                     ids, ide, jds, jde, kds, kde,             &
+                                     ims, ime, jms, jme, kms, kme,             &
+                                     ips, ipe, jps, jpe, kps, kpe,             &
+                                     grid%i_start(ij), grid%i_end(ij),                   &
+                                     grid%j_start(ij), grid%j_end(ij),                   &
+                                     k_start    , k_end                       )
+           END DO moisture_loop_bdy_1
+
+         ENDIF
+
+         IF (num_3d_c >= PARAM_FIRST_SCALAR) THEN
+
+           chem_species_bdy_loop_1 : DO ic = PARAM_FIRST_SCALAR , num_3d_c
+
+             CALL set_physical_bc3d( chem(ims,kms,jms,ic), 'p', config_flags,   &
+                                     ids, ide, jds, jde, kds, kde,            &
+                                     ims, ime, jms, jme, kms, kme,            &
+                                     ips, ipe, jps, jpe, kps, kpe,            &
+                                     grid%i_start(ij), grid%i_end(ij),                  &
+                                     grid%j_start(ij), grid%j_end(ij),                  &
+                                     k_start    , k_end-1                    )
+
+           END DO chem_species_bdy_loop_1
+
+         END IF
+
+         IF (num_3d_s >= PARAM_FIRST_SCALAR) THEN
+
+           scalar_species_bdy_loop_1 : DO is = PARAM_FIRST_SCALAR , num_3d_s
+
+             CALL set_physical_bc3d( scalar(ims,kms,jms,is), 'p', config_flags,   &
+                                     ids, ide, jds, jde, kds, kde,            &
+                                     ims, ime, jms, jme, kms, kme,            &
+                                     ips, ipe, jps, jpe, kps, kpe,            &
+                                     grid%i_start(ij), grid%i_end(ij),                  &
+                                     grid%j_start(ij), grid%j_end(ij),                  &
+                                     k_start    , k_end-1                    )
+
+           END DO scalar_species_bdy_loop_1
+
+         END IF
+
+         IF (config_flags%km_opt .eq. 2) THEN
+
+           CALL set_physical_bc3d( grid%tke_2 , 'p', config_flags,  &
+                                   ids, ide, jds, jde, kds, kde,            &
+                                   ims, ime, jms, jme, kms, kme,            &
+                                   ips, ipe, jps, jpe, kps, kpe,            &
+                                   grid%i_start(ij), grid%i_end(ij),        &
+                                   grid%j_start(ij), grid%j_end(ij),        &
+                                   k_start    , k_end                      )
+         END IF
+
+       END DO tile_bc_loop_1
+       !$OMP END PARALLEL DO
+BENCH_END(bc_end_tim)
+
+
+#ifdef DM_PARALLEL
+
+!                           * * * * *
+!         *        * * *    * * * * *
+!       * + *      * + *    * * + * *
+!         *        * * *    * * * * *
+!                           * * * * *
+
+! moist, chem, scalar, tke      x
+
+
+       IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
+         IF ( (config_flags%pd_tke) .and. (rk_step == rk_order-1) ) THEN
+#         include "HALO_EM_TKE_5.inc"
+         ELSE
+#         include "HALO_EM_TKE_3.inc"
+         ENDIF
+       ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
+         IF ( (config_flags%pd_tke) .and. (rk_step == rk_order-1) ) THEN
+#         include "HALO_EM_TKE_7.inc"
+         ELSE
+#         include "HALO_EM_TKE_5.inc"
+         ENDIF
+       ELSE
+         WRITE(wrf_err_message,*)'solve_em: invalid h_sca_adv_order = ',config_flags%h_sca_adv_order
+         CALL wrf_error_fatal(TRIM(wrf_err_message))
+       ENDIF
+
+       IF ( num_moist .GE. PARAM_FIRST_SCALAR ) THEN
+         IF      ( config_flags%h_sca_adv_order <= 4 ) THEN
+           IF ( (config_flags%pd_moist) .and. (rk_step == rk_order-1) ) THEN
+#        include "HALO_EM_MOIST_E_5.inc"
+           ELSE
+#        include "HALO_EM_MOIST_E_3.inc"
+           END IF
+         ELSE IF ( config_flags%h_sca_adv_order <= 6 ) THEN
+           IF ( (config_flags%pd_moist) .and. (rk_step == rk_order-1) ) THEN
+#        include "HALO_EM_MOIST_E_7.inc"
+           ELSE
+#        include "HALO_EM_MOIST_E_5.inc"
+           END IF
+         ELSE
+           WRITE(wrf_err_message,*)'solve_em: invalid h_sca_adv_order = ',config_flags%h_sca_adv_order
+           CALL wrf_error_fatal(TRIM(wrf_err_message))
+         ENDIF
+       ENDIF
+       IF ( num_chem >= PARAM_FIRST_SCALAR ) THEN
+         IF      ( config_flags%h_sca_adv_order <= 4 ) THEN
+           IF ( (config_flags%pd_chem) .and. (rk_step == rk_order-1) ) THEN
+#        include "HALO_EM_CHEM_E_5.inc"
+           ELSE
+#        include "HALO_EM_CHEM_E_3.inc"
+           ENDIF
+         ELSE IF ( config_flags%h_sca_adv_order <= 6 ) THEN
+           IF ( (config_flags%pd_chem) .and. (rk_step == rk_order-1) ) THEN
+#        include "HALO_EM_CHEM_E_7.inc"
+           ELSE
+#        include "HALO_EM_CHEM_E_5.inc"
+           ENDIF
+         ELSE
+           WRITE(wrf_err_message,*)'solve_em: invalid h_sca_adv_order = ',config_flags%h_sca_adv_order
+           CALL wrf_error_fatal(TRIM(wrf_err_message))
+         ENDIF
+       ENDIF
+       IF ( num_scalar >= PARAM_FIRST_SCALAR ) THEN
+         IF      ( config_flags%h_sca_adv_order <= 4 ) THEN
+           IF ( (config_flags%pd_scalar) .and. (rk_step == rk_order-1) ) THEN
+#        include "HALO_EM_SCALAR_E_5.inc"
+           ELSE
+#        include "HALO_EM_SCALAR_E_3.inc"
+           ENDIF
+         ELSE IF ( config_flags%h_sca_adv_order <= 6 ) THEN
+           IF ( (config_flags%pd_scalar) .and. (rk_step == rk_order-1) ) THEN
+#        include "HALO_EM_SCALAR_E_7.inc"
+           ELSE
+#        include "HALO_EM_SCALAR_E_5.inc"
+           ENDIF
+         ELSE
+           WRITE(wrf_err_message,*)'solve_em: invalid h_sca_adv_order = ',config_flags%h_sca_adv_order
+           CALL wrf_error_fatal(TRIM(wrf_err_message))
+         ENDIF
+       ENDIF
+#endif
+
+     ENDIF rk_step_1_check
+
+
+!**********************************************************
+!
+!  end of RK predictor-corrector loop
+!
+!**********************************************************
+
+   END DO Runge_Kutta_loop
+
+   !$OMP PARALLEL DO   &
+   !$OMP PRIVATE ( ij )
+   DO ij = 1 , grid%num_tiles
+
+BENCH_START(advance_ppt_tim)
+     CALL wrf_debug ( 200 , ' call advance_ppt' )
+     CALL advance_ppt(grid%rthcuten,grid%rqvcuten,grid%rqccuten,grid%rqrcuten, &
+                      grid%rqicuten,grid%rqscuten,grid%rainc,grid%raincv,grid%pratec, grid%nca,    &
+                      grid%htop,grid%hbot,grid%cutop,grid%cubot,                 &
+                      grid%cuppt, grid%dt, config_flags,                   &
+                      ids,ide, jds,jde, kds,kde,             &
+                      ims,ime, jms,jme, kms,kme,             &
+                      grid%i_start(ij), grid%i_end(ij),      &
+                      grid%j_start(ij), grid%j_end(ij),      &
+                      k_start    , k_end                    )
+BENCH_END(advance_ppt_tim)
+
+   ENDDO
+  !$OMP END PARALLEL DO
+
+!<DESCRIPTION>
+!<pre>
+! (5) time-split physics.
+!
+!     Microphysics are the only time  split physics in the WRF model 
+!     at this time.  Split-physics begins with the calculation of
+!     needed diagnostic quantities (pressure, temperature, etc.)
+!     followed by a call to the microphysics driver, 
+!     and finishes with a clean-up, storing off of a diabatic tendency
+!     from the moist physics, and a re-calulation of the  diagnostic
+!     quantities pressure and density.
+!</pre>
+!</DESCRIPTION>
+
+   IF( config_flags%specified .or. config_flags%nested ) THEN
+     sz = grid%spec_zone
+   ELSE
+     sz = 0
+   ENDIF
+
+!!!!****MARS MARS
+!!!!****MARS MARS
+
+!   IF (config_flags%mp_physics /= 0)  then
+!
+!     !$OMP PARALLEL DO   &
+!     !$OMP PRIVATE ( ij, its, ite, jts, jte )
+!
+!     scalar_tile_loop_1a: DO ij = 1 , grid%num_tiles
+!
+!       IF ( config_flags%periodic_x ) THEN
+!         its = max(grid%i_start(ij),ids)
+!         ite = min(grid%i_end(ij),ide-1)
+!       ELSE
+!         its = max(grid%i_start(ij),ids+sz)
+!         ite = min(grid%i_end(ij),ide-1-sz)
+!       ENDIF
+!       jts = max(grid%j_start(ij),jds+sz)
+!       jte = min(grid%j_end(ij),jde-1-sz)
+!
+!       CALL wrf_debug ( 200 , ' call moist_physics_prep' )
+!BENCH_START(moist_physics_prep_tim)
+!       CALL moist_physics_prep_em( grid%t_2, grid%t_1, t0, rho,                &
+!                                   grid%al, grid%alb, grid%p, p8w, p0, grid%pb,          &
+!                                   grid%ph_2, grid%phb, th_phy, pi_phy, p_phy, &
+!                                   grid%z, z_at_w, dz8w,                  &
+!                                   dtm, grid%h_diabatic,                  &
+!                                   config_flags,grid%fnm, grid%fnp,            &
+!                                   ids, ide, jds, jde, kds, kde,     &
+!                                   ims, ime, jms, jme, kms, kme,     &
+!                                   its, ite, jts, jte,               &
+!                                   k_start    , k_end               )
+!BENCH_END(moist_physics_prep_tim)
+!     END DO scalar_tile_loop_1a
+!     !$OMP END PARALLEL DO
+!
+!     CALL wrf_debug ( 200 , ' call microphysics_driver' )
+!
+!     grid%sr = 0.
+!     specified_bdy = config_flags%specified .OR. config_flags%nested
+!     channel_bdy = config_flags%specified .AND. config_flags%periodic_x
+!
+!BENCH_START(micro_driver_tim)
+!
+!     CALL microphysics_driver(                                            &
+!      &         DT=dtm             ,DX=grid%dx              ,DY=grid%dy   &
+!      &        ,DZ8W=dz8w          ,F_ICE_PHY=grid%f_ice_phy              &
+!      &        ,ITIMESTEP=grid%itimestep                    ,LOWLYR=grid%lowlyr  &
+!      &        ,P8W=p8w            ,P=p_phy            ,PI_PHY=pi_phy     &
+!      &        ,RHO=rho            ,SPEC_ZONE=grid%spec_zone              &
+!      &        ,SR=grid%sr              ,TH=th_phy                        &
+!      &        ,WARM_RAIN=grid%warm_rain                                  &
+!      &        ,T8W=t8w                                                   &
+!      &        ,CLDFRA=grid%cldfra, EXCH_H=grid%exch_h &
+!      &        ,NSOURCE=grid%qndropsource                                 &
+!#ifdef WRF_CHEM
+!      &        ,QLSINK=grid%qlsink,CLDFRA_OLD=grid%cldfra_old             &
+!      &        ,PRECR=grid%precr, PRECI=grid%preci, PRECS=grid%precs, PRECG=grid%precg &
+!      &        ,CHEM_OPT=config_flags%chem_opt, PROGN=config_flags%progn  &
+!#endif
+!      &        ,XLAND=grid%xland                                          &
+!      &        ,SPECIFIED=specified_bdy, CHANNEL_SWITCH=channel_bdy       &
+!      &        ,F_RAIN_PHY=grid%f_rain_phy                                &
+!      &        ,F_RIMEF_PHY=grid%f_rimef_phy                              &
+!      &        ,MP_PHYSICS=config_flags%mp_physics                        &
+!      &        ,ID=grid%id                                                &
+!      &        ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde         &
+!      &        ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme         &
+!#ifdef RUN_ON_GPU
+!      &        ,IPS=ips,IPE=ipe, JPS=jps,JPE=jpe, KPS=kps,KPE=kpe         &
+!#endif
+!      &        ,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                                  &
+!      &        ,NAER=grid%naer                                            &
+!                 ! Optional
+!      &        , RAINNC=grid%rainnc, RAINNCV=grid%rainncv                 &
+!      &        , SNOWNC=grid%snownc, SNOWNCV=grid%snowncv                 &
+!      &        , GRAUPELNC=grid%graupelnc, GRAUPELNCV=grid%graupelncv     &
+!      &        , W=grid%w_2, Z=grid%z, HT=grid%ht                         &
+!      &        , MP_RESTART_STATE=grid%mp_restart_state                   &
+!      &        , TBPVS_STATE=grid%tbpvs_state                             & ! etampnew
+!      &        , TBPVS0_STATE=grid%tbpvs0_state                           & ! etampnew
+!      &        , QV_CURR=moist(ims,kms,jms,P_QV), F_QV=F_QV               &
+!      &        , QC_CURR=moist(ims,kms,jms,P_QC), F_QC=F_QC               &
+!      &        , QR_CURR=moist(ims,kms,jms,P_QR), F_QR=F_QR               &
+!      &        , QI_CURR=moist(ims,kms,jms,P_QI), F_QI=F_QI               &
+!      &        , QS_CURR=moist(ims,kms,jms,P_QS), F_QS=F_QS               &
+!      &        , QG_CURR=moist(ims,kms,jms,P_QG), F_QG=F_QG               &
+!      &        , QNDROP_CURR=scalar(ims,kms,jms,P_QNDROP), F_QNDROP=F_QNDROP &
+!      &        , QNI_CURR=scalar(ims,kms,jms,P_QNI), F_QNI=F_QNI          &
+!      &        , QT_CURR=scalar(ims,kms,jms,P_QT), F_QT=F_QT              &
+!      &        , QNS_CURR=scalar(ims,kms,jms,P_QNS), F_QNS=F_QNS          &  
+!      &        , QNR_CURR=scalar(ims,kms,jms,P_QNR), F_QNR=F_QNR          &  
+!      &        , QNG_CURR=scalar(ims,kms,jms,P_QNG), F_QNG=F_QNG          &  
+!      &        , qrcuten=grid%rqrcuten, qscuten=grid%rqscuten             &  
+!      &        , qicuten=grid%rqicuten,mu=grid%mut                        &  
+!      &        , HAIL=config_flags%gsfcgce_hail                           & ! for gsfcgce
+!      &        , ICE2=config_flags%gsfcgce_2ice                           & ! for gsfcgce
+!                                                                          )
+!BENCH_END(micro_driver_tim)
+!
+!#if 0
+!BENCH_START(microswap_2)
+!! for load balancing; communication to redistribute the points
+!     IF ( config_flags%mp_physics .EQ. ETAMPNEW ) THEN
+!#include "SWAP_ETAMP_NEW.inc"
+!     ELSE IF ( config_flags%mp_physics .EQ. WSM3SCHEME ) THEN
+!#include "SWAP_WSM3.inc"
+!     ENDIF
+!BENCH_END(microswap_2)
+!#endif
+!
+!     CALL wrf_debug ( 200 , ' call moist_physics_finish' )
+!BENCH_START(moist_phys_end_tim)
+!
+!     !$OMP PARALLEL DO   &
+!     !$OMP PRIVATE ( ij, its, ite, jts, jte, im, ii, jj, kk )
+!
+!     DO ij = 1 , grid%num_tiles
+!
+!       IF ( config_flags%periodic_x ) THEN
+!         its = max(grid%i_start(ij),ids)
+!         ite = min(grid%i_end(ij),ide-1)
+!       ELSE
+!         its = max(grid%i_start(ij),ids+sz)
+!         ite = min(grid%i_end(ij),ide-1-sz)
+!       ENDIF
+!       jts = max(grid%j_start(ij),jds+sz)
+!       jte = min(grid%j_end(ij),jde-1-sz)
+!
+!       CALL microphysics_zero_out (                                    &
+!                      moist , num_moist , config_flags ,                &
+!                      ids, ide, jds, jde, kds, kde,                     &
+!                      ims, ime, jms, jme, kms, kme,                     &
+!                      its, ite, jts, jte,                               &
+!                      k_start    , k_end                                )
+!
+!
+!       CALL moist_physics_finish_em( grid%t_2, grid%t_1, t0, grid%muts, th_phy,       &
+!                                      grid%h_diabatic, dtm, config_flags,    &
+!                                      ids, ide, jds, jde, kds, kde,     &
+!                                      ims, ime, jms, jme, kms, kme,     &
+!                                      its, ite, jts, jte,               &
+!                                      k_start    , k_end               )
+!
+!     END DO
+!     !$OMP END PARALLEL DO
+!
+!   ENDIF  ! microphysics test
+
+!-----------------------------------------------------------
+!  filter for moist variables post-microphysics and end of timestep
+!-----------------------------------------------------------
+
+   IF (config_flags%polar) THEN
+     IF ( num_3d_m >= PARAM_FIRST_SCALAR ) THEN
+       CALL wrf_debug ( 200 , ' call filter moist' )
+       DO im = PARAM_FIRST_SCALAR, num_3d_m
+         DO jj = jps, MIN(jpe,jde-1)
+           DO kk = kps, MIN(kpe,kde-1)
+             DO ii = ips, MIN(ipe,ide-1)
+               moist(ii,kk,jj,im)=moist(ii,kk,jj,im)*(grid%mu_2(ii,jj)+grid%mub(ii,jj))
+             ENDDO
+           ENDDO
+         ENDDO
+ 
+         CALL pxft ( grid=grid                                                 &
+                  ,lineno=__LINE__                                             &
+                  ,flag_uv            = 0                                      &
+                  ,flag_rurv          = 0                                      &
+                  ,flag_wph           = 0                                      &
+                  ,flag_ww            = 0                                      &
+                  ,flag_t             = 0                                      &
+                  ,flag_mu            = 0                                      &
+                  ,flag_mut           = 0                                      &
+                  ,flag_moist         = im                                     &
+                  ,flag_chem          = 0                                      &
+                  ,flag_scalar        = 0                                      &
+                  ,positive_definite=.FALSE.                                   &
+                  ,moist=moist,chem=chem,scalar=scalar                         &
+                  ,fft_filter_lat = config_flags%fft_filter_lat                &
+                  ,dclat = dclat                                               &
+                  ,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             &
+                  ,imsx=imsx,imex=imex,jmsx=jmsx,jmex=jmex,kmsx=kmsx,kmex=kmex &
+                  ,ipsx=ipsx,ipex=ipex,jpsx=jmsx,jpex=jpex,kpsx=kpsx,kpex=kpex )
+ 
+         DO jj = jps, MIN(jpe,jde-1)
+           DO kk = kps, MIN(kpe,kde-1)
+             DO ii = ips, MIN(ipe,ide-1)
+               moist(ii,kk,jj,im)=moist(ii,kk,jj,im)/(grid%mu_2(ii,jj)+grid%mub(ii,jj))
+             ENDDO
+           ENDDO
+         ENDDO
+       ENDDO
+     ENDIF
+   ENDIF
+
+!-----------------------------------------------------------
+!  end filter for moist variables post-microphysics and end of timestep
+!-----------------------------------------------------------
+
+   !$OMP PARALLEL DO   &
+   !$OMP PRIVATE ( ij, its, ite, jts, jte, im, ii, jj, kk )
+   scalar_tile_loop_1ba: DO ij = 1 , grid%num_tiles
+
+     IF ( config_flags%periodic_x ) THEN
+       its = max(grid%i_start(ij),ids)
+       ite = min(grid%i_end(ij),ide-1)
+     ELSE
+       its = max(grid%i_start(ij),ids+sz)
+       ite = min(grid%i_end(ij),ide-1-sz)
+     ENDIF
+     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,                &
+                          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%rdn, config_flags%non_hydrostatic,             &
+                          ids, ide, jds, jde, kds, kde,     &
+                          ims, ime, jms, jme, kms, kme,     &
+                          its, ite, jts, jte,               &
+                          k_start    , k_end               )
+
+   END DO scalar_tile_loop_1ba
+   !$OMP END PARALLEL DO
+BENCH_END(moist_phys_end_tim)
+
+   IF (.not. config_flags%non_hydrostatic) THEN
+#ifdef DM_PARALLEL
+#    include "HALO_EM_HYDRO_UV.inc"
+#    include "PERIOD_EM_HYDRO_UV.inc"
+#endif
+     !$OMP PARALLEL DO   &
+     !$OMP PRIVATE ( ij )
+     DO ij = 1 , grid%num_tiles
+       CALL diagnose_w( ph_tend, grid%ph_2, grid%ph_1, grid%w_2, grid%muts, dt_rk,  &
+                       grid%u_2, grid%v_2, grid%ht,                           &
+                       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,           &
+                       grid%i_start(ij), grid%i_end(ij),       &
+                       grid%j_start(ij), grid%j_end(ij),       &
+                       k_start    , k_end                     )
+
+     END DO
+     !$OMP END PARALLEL DO
+
+   END IF
+
+   CALL wrf_debug ( 200 , ' call chem polar filter ' )
+
+!-----------------------------------------------------------
+!  filter for chem and scalar variables at end of timestep
+!-----------------------------------------------------------
+
+   IF (config_flags%polar) THEN
+
+     IF ( num_3d_c >= PARAM_FIRST_SCALAR ) then
+       chem_filter_loop: DO im = PARAM_FIRST_SCALAR, num_3d_c
+         DO jj = jps, MIN(jpe,jde-1)
+           DO kk = kps, MIN(kpe,kde-1)
+             DO ii = ips, MIN(ipe,ide-1)
+               chem(ii,kk,jj,im)=chem(ii,kk,jj,im)*(grid%mu_2(ii,jj)+grid%mub(ii,jj))
+             ENDDO
+           ENDDO
+         ENDDO
+
+         CALL pxft ( grid=grid                                                 &
+                  ,lineno=__LINE__                                             &
+                  ,flag_uv            = 0                                      &
+                  ,flag_rurv          = 0                                      &
+                  ,flag_wph           = 0                                      &
+                  ,flag_ww            = 0                                      &
+                  ,flag_t             = 0                                      &
+                  ,flag_mu            = 0                                      &
+                  ,flag_mut           = 0                                      &
+                  ,flag_moist         = 0                                      &
+                  ,flag_chem          = im                                     &
+                  ,flag_scalar        = 0                                      &
+                  ,positive_definite=.FALSE.                                   &
+                  ,moist=moist,chem=chem,scalar=scalar                         &
+                  ,fft_filter_lat = config_flags%fft_filter_lat                &
+                  ,dclat = dclat                                               &
+                  ,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             &
+                  ,imsx=imsx,imex=imex,jmsx=jmsx,jmex=jmex,kmsx=kmsx,kmex=kmex &
+                  ,ipsx=ipsx,ipex=ipex,jpsx=jmsx,jpex=jpex,kpsx=kpsx,kpex=kpex )
+
+         DO jj = jps, MIN(jpe,jde-1)
+           DO kk = kps, MIN(kpe,kde-1)
+             DO ii = ips, MIN(ipe,ide-1)
+               chem(ii,kk,jj,im)=chem(ii,kk,jj,im)/(grid%mu_2(ii,jj)+grid%mub(ii,jj))
+             ENDDO
+           ENDDO
+         ENDDO
+       ENDDO chem_filter_loop
+     ENDIF
+
+     IF ( num_3d_s >= PARAM_FIRST_SCALAR ) then
+       scalar_filter_loop: DO im = PARAM_FIRST_SCALAR, num_3d_s
+         DO jj = jps, MIN(jpe,jde-1)
+           DO kk = kps, MIN(kpe,kde-1)
+             DO ii = ips, MIN(ipe,ide-1)
+               scalar(ii,kk,jj,im)=scalar(ii,kk,jj,im)*(grid%mu_2(ii,jj)+grid%mub(ii,jj))
+             ENDDO
+           ENDDO
+         ENDDO
+
+         CALL pxft ( grid=grid                                                 &
+                  ,lineno=__LINE__                                             &
+                  ,flag_uv            = 0                                      &
+                  ,flag_rurv          = 0                                      &
+                  ,flag_wph           = 0                                      &
+                  ,flag_ww            = 0                                      &
+                  ,flag_t             = 0                                      &
+                  ,flag_mu            = 0                                      &
+                  ,flag_mut           = 0                                      &
+                  ,flag_moist         = 0                                      &
+                  ,flag_chem          = 0                                      &
+                  ,flag_scalar        = im                                     &
+                  ,positive_definite=.FALSE.                                   &
+                  ,moist=moist,chem=chem,scalar=scalar                         &
+                  ,fft_filter_lat = config_flags%fft_filter_lat                &
+                  ,dclat = dclat                                               &
+                  ,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             &
+                  ,imsx=imsx,imex=imex,jmsx=jmsx,jmex=jmex,kmsx=kmsx,kmex=kmex &
+                  ,ipsx=ipsx,ipex=ipex,jpsx=jmsx,jpex=jpex,kpsx=kpsx,kpex=kpex )
+
+         DO jj = jps, MIN(jpe,jde-1)
+           DO kk = kps, MIN(kpe,kde-1)
+             DO ii = ips, MIN(ipe,ide-1)
+               scalar(ii,kk,jj,im)=scalar(ii,kk,jj,im)/(grid%mu_2(ii,jj)+grid%mub(ii,jj))
+             ENDDO
+           ENDDO
+         ENDDO
+       ENDDO scalar_filter_loop
+     ENDIF
+   ENDIF
+
+!-----------------------------------------------------------
+!  end filter for chem and scalar variables at end of timestep
+!-----------------------------------------------------------
+
+   !  We're finished except for boundary condition (and patch) update
+
+   ! Boundary condition time (or communication time).  At this time, we have
+   ! implemented periodic and symmetric physical boundary conditions.
+
+   ! b.c. routine for data within patch.
+
+   ! we need to do both time levels of 
+   ! data because the time filter only works in the physical solution space.
+
+   ! First, do patch communications for boundary conditions (periodicity)
+
+!-----------------------------------------------------------
+!  Stencils for patch communications  (WCS, 29 June 2001)
+!
+!  here's where we need a wide comm stencil - these are the 
+!  uncoupled variables so are used for high order calc in
+!  advection and mixong routines.
+!
+!                              * * * * *
+!            *        * * *    * * * * *
+!          * + *      * + *    * * + * * 
+!            *        * * *    * * * * *
+!                              * * * * *
+!
+!   grid%u_1                            x
+!   grid%u_2                            x
+!   grid%v_1                            x
+!   grid%v_2                            x
+!   grid%w_1                            x
+!   grid%w_2                            x
+!   grid%t_1                            x
+!   grid%t_2                            x
+!  grid%ph_1                            x
+!  grid%ph_2                            x
+!  grid%tke_1                           x
+!  grid%tke_2                           x
+!
+!    2D variables
+!  grid%mu_1     x
+!  grid%mu_2     x
+!
+!    4D variables
+!  moist                         x
+!   chem                         x
+! scalar                         x
+!----------------------------------------------------------
+
+
+#ifdef DM_PARALLEL
+   IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
+#    include "HALO_EM_D3_3.inc"
+   ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
+#    include "HALO_EM_D3_5.inc"
+   ELSE 
+      WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
+      CALL wrf_error_fatal(TRIM(wrf_err_message))
+   ENDIF
+#  include "PERIOD_BDY_EM_D3.inc"
+#  include "PERIOD_BDY_EM_MOIST.inc"
+#  include "PERIOD_BDY_EM_CHEM.inc"
+#  include "PERIOD_BDY_EM_SCALAR.inc"
+#endif
+
+!  now set physical b.c on a patch
+
+BENCH_START(bc_2d_tim)
+   !$OMP PARALLEL DO   &
+   !$OMP PRIVATE ( ij )
+   tile_bc_loop_2: DO ij = 1 , grid%num_tiles
+
+     CALL wrf_debug ( 200 , ' call set_phys_bc_dry_2' )
+
+     CALL set_phys_bc_dry_2( config_flags,                           &
+                             grid%u_1, grid%u_2, grid%v_1, grid%v_2, grid%w_1, grid%w_2,           &
+                             grid%t_1, grid%t_2, grid%ph_1, grid%ph_2, grid%mu_1, grid%mu_2,       &
+                             ids, ide, jds, jde, kds, kde,           &
+                             ims, ime, jms, jme, kms, kme,           &
+                             ips, ipe, jps, jpe, kps, kpe,           &
+                             grid%i_start(ij), grid%i_end(ij),       &
+                             grid%j_start(ij), grid%j_end(ij),       &
+                             k_start    , k_end                     )
+
+     CALL set_physical_bc3d( grid%tke_1, 'p', config_flags,   &
+                             ids, ide, jds, jde, kds, kde,            &
+                             ims, ime, jms, jme, kms, kme,            &
+                             ips, ipe, jps, jpe, kps, kpe,            &
+                             grid%i_start(ij), grid%i_end(ij),        &
+                             grid%j_start(ij), grid%j_end(ij),        &
+                             k_start    , k_end-1                    )
+
+     CALL set_physical_bc3d( grid%tke_2 , 'p', config_flags,  &
+                             ids, ide, jds, jde, kds, kde,            &
+                             ims, ime, jms, jme, kms, kme,            &
+                             ips, ipe, jps, jpe, kps, kpe,            &
+                             grid%i_start(ij), grid%i_end(ij),        &
+                             grid%j_start(ij), grid%j_end(ij),        &
+                             k_start    , k_end                      )
+
+     moisture_loop_bdy_2 : DO im = PARAM_FIRST_SCALAR , num_3d_m
+
+       CALL set_physical_bc3d( moist(ims,kms,jms,im), 'p',           &
+                               config_flags,                           &
+                               ids, ide, jds, jde, kds, kde,           &
+                               ims, ime, jms, jme, kms, kme,           &
+                               ips, ipe, jps, jpe, kps, kpe,           &
+                               grid%i_start(ij), grid%i_end(ij),       &
+                               grid%j_start(ij), grid%j_end(ij),       &
+                               k_start    , k_end                     )
+
+     END DO moisture_loop_bdy_2
+
+     chem_species_bdy_loop_2 : DO ic = PARAM_FIRST_SCALAR , num_3d_c
+
+       CALL set_physical_bc3d( chem(ims,kms,jms,ic) , 'p', config_flags,  &
+                               ids, ide, jds, jde, kds, kde,            &
+                               ims, ime, jms, jme, kms, kme,            &
+                               ips, ipe, jps, jpe, kps, kpe,            &
+                               grid%i_start(ij), grid%i_end(ij),                  &
+                               grid%j_start(ij), grid%j_end(ij),                  &
+                               k_start    , k_end                      )
+
+     END DO chem_species_bdy_loop_2
+
+     scalar_species_bdy_loop_2 : DO is = PARAM_FIRST_SCALAR , num_3d_s
+
+       CALL set_physical_bc3d( scalar(ims,kms,jms,is) , 'p', config_flags,  &
+                               ids, ide, jds, jde, kds, kde,            &
+                               ims, ime, jms, jme, kms, kme,            &
+                               ips, ipe, jps, jpe, kps, kpe,            &
+                               grid%i_start(ij), grid%i_end(ij),                  &
+                               grid%j_start(ij), grid%j_end(ij),                  &
+                               k_start    , k_end                      )
+
+     END DO scalar_species_bdy_loop_2
+
+   END DO tile_bc_loop_2
+   !$OMP END PARALLEL DO
+BENCH_END(bc_2d_tim)
+
+   IF( config_flags%specified .or. config_flags%nested ) THEN 
+     grid%dtbc = grid%dtbc + grid%dt
+   ENDIF
+
+!!!!****MARS MARS
+!!!!****MARS MARS
+
+!! calculate some model diagnostics.
+!
+!   CALL wrf_debug ( 200 , ' call diagnostic_driver' )
+!   
+!   CALL diagnostic_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                             &
+!      &             ,RAINCV=grid%raincv    ,RAINNCV=grid%rainncv           &
+!      &             ,RAINC=grid%rainc    ,RAINNC=grid%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                    &
+!                  ! 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                              &
+!      &                                                          )
+
+#ifdef DM_PARALLEL
+!-----------------------------------------------------------------------
+! see above
+!--------------------------------------------------------------
+   CALL wrf_debug ( 200 , ' call HALO_RK_E' )
+   IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
+#    include "HALO_EM_E_3.inc"
+   ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
+#    include "HALO_EM_E_5.inc"
+   ELSE
+     WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
+     CALL wrf_error_fatal(TRIM(wrf_err_message))
+   ENDIF
+#endif
+
+#ifdef DM_PARALLEL
+   IF ( num_moist >= PARAM_FIRST_SCALAR  ) THEN
+!-----------------------------------------------------------------------
+! see above
+!--------------------------------------------------------------
+     CALL wrf_debug ( 200 , ' call HALO_RK_MOIST' )
+     IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
+#      include "HALO_EM_MOIST_E_3.inc"
+     ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
+#      include "HALO_EM_MOIST_E_5.inc"
+     ELSE
+       WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
+       CALL wrf_error_fatal(TRIM(wrf_err_message))
+     ENDIF
+   ENDIF
+   IF ( num_chem >= PARAM_FIRST_SCALAR ) THEN
+!-----------------------------------------------------------------------
+! see above
+!--------------------------------------------------------------
+     CALL wrf_debug ( 200 , ' call HALO_RK_CHEM' )
+     IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
+#      include "HALO_EM_CHEM_E_3.inc"
+     ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
+#      include "HALO_EM_CHEM_E_5.inc"
+     ELSE
+       WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
+       CALL wrf_error_fatal(TRIM(wrf_err_message))
+     ENDIF
+   ENDIF
+   IF ( num_scalar >= PARAM_FIRST_SCALAR ) THEN
+!-----------------------------------------------------------------------
+! see above
+!--------------------------------------------------------------
+     CALL wrf_debug ( 200 , ' call HALO_RK_SCALAR' )
+     IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
+#      include "HALO_EM_SCALAR_E_3.inc"
+     ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
+#      include "HALO_EM_SCALAR_E_5.inc"
+     ELSE
+       WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
+       CALL wrf_error_fatal(TRIM(wrf_err_message))
+     ENDIF
+   ENDIF
+#endif
+
+!  Max values of CFL for adaptive time step scheme
+
+   DEALLOCATE(max_vert_cfl_tmp)
+   DEALLOCATE(max_horiz_cfl_tmp)
+
+
+!!!!!!!!!!!!!MARS
+!!!!!!!!!!!!!MARS
+!!
+!! to get lighter output files, output the sum of the constant value phb (pb)
+!with ph (p)
+!! --- these variables were added to the Registry
+!!
+!!pressure
+     grid%ptot  = grid%p + grid%pb
+!!geopotential: already in php
+     grid%phtot = grid%php
+!!mass
+     !grid%em_mutot = grid%em_mub + grid%em_mu_2
+!!
+!!!!!!!!!!!!!MARS
+!!!!!!!!!!!!!MARS
+
+
+   CALL wrf_debug ( 200 , ' call end of solve_em' )
+
+! Finish timers if compiled with -DBENCH.
+#include <bench_solve_em_end.h>
+
+   RETURN
+
+END SUBROUTINE solve_em
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/ye
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/ye	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/modif_mars/ye	(revision 142)
@@ -0,0 +1,126 @@
+189a190,195
+> !!!!!!!!!!!!!! TEST NaN: ne fonction qu'avec r4 i4
+> integer :: mask_nan = 2139095040
+> integer :: chuck_norris
+> !!!!!!!!!!!!!! TEST NaN: ne fonction qu'avec r4 i4
+> 
+> 
+207a214,222
+>                          !!!!$OMP PARALLEL DO   &
+>                          !!!!$OMP PRIVATE ( ij ,i,j,k,its,ite,jts,jte)
+>                          !!!DO ij = 1 , num_tiles
+>                          !!!   its = i_start(ij)
+>                          !!!   ite = i_end(ij)
+>                          !!!   jts = j_start(ij)
+>                          !!!   jte = j_end(ij)
+>                          !!!ENDDO
+>                          !!!!$OMP END PARALLEL DO
+249,253d263
+< PRINT *, ips, ipe, jps, jpe
+< PRINT *, ngrid
+< 
+< 
+< 
+333,372c343,360
+< !IF ((MAXVAL(t) > 500).OR.(MINVAL(t,MASK = t > 0) <= 50)) THEN
+< !        PRINT *,'******************   CRASH   *******************'
+< !        PRINT *,'Irrealistic temperature...', MAXLOC(t), MINLOC(t)
+< !PRINT *, t
+< !        PRINT *,'************************************************'
+< !        STOP
+< !ENDIF   
+< !
+< !!! PB SAUF SI debug = 200 ?!!?
+< !IF (float(itimestep) > 200.) THEN        ! to allow initialisation with zero-wind or constant
+< !                                         ! and allow some outputs to locate the NaNs :)
+< !IF (         (abs(MAXVAL(u)) == 0.) &
+< !        .OR. (MINVAL(u) > MAXVAL(u)) &
+< !        .OR. (abs(MAXVAL(v)) == 0.) &
+< !        .OR. (MINVAL(v) > MAXVAL(v)) ) THEN
+< !!IF (          (ANY(isNaN(u)) .EQV. .true.) &
+< !!         .OR. (ANY(isNaN(v)) .EQV. .true.) &  
+< !!         .OR. (ANY(isNaN(t)) .EQV. .true.) ) THEN
+< !IF (         ANY(u*0. /= 0.) &
+< !        .OR. ANY(v*0. /= 0.)        ) THEN
+< !        PRINT *,'******************   CRASH   *******************'
+< !        PRINT *,'************************************************'
+< !        PRINT *,'NaN appeared in the simulation ...'
+< !        PRINT *,'...this may be due to numerical or dynamical instability'
+< !        PRINT *,'************************************************'
+< !        PRINT *,'POSSIBLE SOLUTIONS:'
+< !        PRINT *,'>> IF nonhydrostatic mode,' 
+< !        PRINT *,'   --> check that smdiv, emdiv and epssm are not 0.'
+< !        PRINT *,'>> IF cfl is violated, '
+< !        PRINT *,'   --> try to lower the dynamical timestep'
+< !        PRINT *,'>> IF topographical gradients are high near specified bdy,'
+< !        PRINT *,'   --> try to redefine the domain'
+< !        PRINT *,'************************************************'
+< !        STOP
+< !ENDIF
+< !ENDIF
+<         !IF (          ANY(isNaN(u)) &
+<         !         .OR. ANY(isNaN(v)) &
+<         !         .OR. ANY(isNaN(t)) ) THEN
+<         ! >>> ne marche qu'avec g95
+---
+> chuck_norris = transfer( u(1,1,1),chuck_norris )        !! astuce J. Lefrere - test NaN or Inf 
+> IF ( iand( chuck_norris,mask_nan ) == mask_nan ) THEN   !! astuce J. Lefrere - test NaN or Inf
+>         PRINT *, u(1,1,1)
+>         PRINT *,'******************   CRASH   *******************'
+>         PRINT *,'************************************************'
+>         PRINT *,'NaN or Inf appeared in the simulation ...'
+>         PRINT *,'...this may be due to numerical or dynamical instability'
+>         PRINT *,'************************************************'
+>         PRINT *,'POSSIBLE SOLUTIONS:'
+>         PRINT *,'>> IF nonhydrostatic mode,'
+>         PRINT *,'   --> check that smdiv, emdiv and epssm are not 0.'
+>         PRINT *,'>> IF cfl is violated, '
+>         PRINT *,'   --> try to lower the dynamical timestep'
+>         PRINT *,'>> IF topographical gradients are high near specified bdy,'
+>         PRINT *,'   --> try to redefine the domain'
+>         PRINT *,'************************************************'
+>         STOP
+> ENDIF
+379d366
+< 
+59a60,61
+>    !INTEGER :: grandn !!MARS
+> 
+3238a3241,3277
+> !! pour gagner encore plus de place, puisqu'en LES p et ph varient peu selon le domaine 
+> !! on prend la valeur au point 1,1 car la moyenne impose du jonglage avec calc. parall.
+>      IF ( (ips .eq. 1) .and. (jps .eq. 1) ) THEN
+>        PRINT *, 'save profile'
+>        DO kk = kps, MIN(kpe,kde-1)
+>           grid%pprof(kk) = grid%ptot(ips,kk,jps)
+>           grid%phprof(kk) = grid%phtot(ips,kk,jps)
+>        ENDDO
+>      ENDIF
+>    
+>      !! attention, fonctionne seulement en cas de vent nul !! 
+>      grid%tketot  = 0.5 * (grid%u_2*grid%u_2 + grid%v_2*grid%v_2 + grid%w_2*grid%w_2) + grid%tke_2 
+>      !! attention, fonctionne seulement en cas de vent nul !!
+> 
+>      !grandn = FLOAT(ide-ids-2+1)*FLOAT(jde-jds-2+1)
+>      !DO kk = kps, MIN(kpe,kde-1)
+>      ! grid%thprof(kk) = grid%t_2(ids+1,kk,jds+1) / grandn
+>      ! DO jj = jds+2, jde-1
+>      ! DO ii = ids+2, ide-1
+>      !  grid%thprof(kk) = grid%thprof(kk) + grid%t_2(ii,kk,jj) / grandn
+>      !  IF (grid%t_2(ii,kk,jj) .eq. 0.) print *,'zero t',ii,kk,jj
+>      ! ENDDO
+>      ! ENDDO
+>      !ENDDO
+> 
+> !     DO kk = kps, MIN(kpe,kde-1)
+> !      grid%pprof(kk) = grid%ptot(ips,kk,jps) / FLOAT(MIN(ipe,ide-1) - ips + 1) / FLOAT(MIN(jpe,jde-1) - jps + 1)
+> !      grid%phprof(kk) = grid%phtot(ips,kk,jps) / FLOAT(MIN(ipe,ide-1) - ips + 1) / FLOAT(MIN(jpe,jde-1) - jps + 1)
+> !     DO jj = jps+1, MIN(jpe,jde-1)
+> !     DO ii = ips+1, MIN(ipe,ide-1)
+> !         grid%pprof(kk) = grid%pprof(kk) + grid%ptot(ii,kk,jj) / FLOAT(MIN(ipe,ide-1) - ips + 1) / FLOAT(MIN(jpe,jde-1) - jps + 1)
+> !         grid%phprof(kk) = grid%phprof(kk) + grid%phtot(ii,kk,jj) / FLOAT(MIN(ipe,ide-1) - ips + 1) / FLOAT(MIN(jpe,jde-1) - jps + 1)
+> !         IF (grid%phtot(ii,kk,jj) .eq. 0.) print *,'zero ph',ii,kk,jj
+> !         IF (grid%ptot(ii,kk,jj) .eq. 0.) print *,'zero p',ii,kk,jj
+> !     ENDDO
+> !     ENDDO
+> !     ENDDO
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/save_LES_MARS
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/save_LES_MARS	(revision 142)
+++ trunk/MESOSCALE/LMD_MM_MARS/SRC/LES/save_LES_MARS	(revision 142)
@@ -0,0 +1,13 @@
+#! /bin/bash
+####
+#### A. Spiga -- 2011 -- 
+####
+
+filesave=`date +LMD_LES_MARS_%Y_%m_%d.tar.gz`
+
+echo building backup $filesave
+cd ..
+tar czvf $filesave LMD_LES_MARS/modif_mars LMD_LES_MARS/LMD_LES_MARS_install LMD_LES_MARS/save_LES_MARS
+mv $filesave LMD_LES_MARS/
+cd LMD_LES_MARS/
+
Index: trunk/MESOSCALE/LMD_MM_MARS/SRC/WRFV2/mars_lmd_new_storm/libf/phymars/meso_physiq_julien.F
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/SRC/WRFV2/mars_lmd_new_storm/libf/phymars/meso_physiq_julien.F	(revision 138)
+++ 	(revision )
@@ -1,1 +1,0 @@
-link ../../../mars_lmd_new/libf/phymars/meso_physiq_julien.F
Index: trunk/MESOSCALE/LMD_MM_MARS/makemeso
===================================================================
--- trunk/MESOSCALE/LMD_MM_MARS/makemeso	(revision 138)
+++ trunk/MESOSCALE/LMD_MM_MARS/makemeso	(revision 142)
@@ -28,5 +28,5 @@
 donotcompile=0
 donotallow=0
-config='real'
+config=''
 donotcompilephys=0
 justphys=0
@@ -49,10 +49,10 @@
 # Use:    
 #
-# makemeso                   ## basic use (real configuration)
+# makemeso                   ## basic use (real-case configuration)
 #
 # makemeso -d                ## no compilation, just check the name of the compile folder
 #
-# makemeso -c real           ## real-case mode [default]
 # makemeso -c ideal          ## idealized mode (convective cell, mountain wave, etc...)
+# makemeso -c les            ## large-eddy simulations mode based on WRFV3
 #
 # makemeso -n                ## do not recompile LMD physics (must have been compiled before)
@@ -147,5 +147,5 @@
 ####
 
-    conf_wrf="${scenario}${phys}${compilo}_${machine}${single}${testflag}"
+    conf_wrf="${config}${scenario}${phys}${compilo}_${machine}${single}${testflag}"
     \rm what_folder 2> /dev/null
     echo ${conf_wrf} > what_folder
@@ -182,4 +182,13 @@
           echo SCENARIO ${scenario} DID YOU INCLUDE THE RIGHT copy_model ? ; read dummy 
           sed s+"mars_lmd"+"mars_lmd_new_${scenario}"+g copy_model > copy_model_tmp
+             if [[ "${config}" == "les" ]] 
+             then
+              echo "NOT SUPPORTED, check options" 
+             fi
+        fi
+        if [[ "${config}" == "les" ]] 
+        then
+         sed s+"PWD/SRC/"+"PWD/SRC/LES/"+g copy_model_tmp > yeah
+         mv yeah copy_model_tmp
         fi
      chmod 755 copy_model_tmp
@@ -200,9 +209,26 @@
      cd Registry ; Registry.bash ; cd ..
     else
-     ./copy_model
+     #./copy_model
+         if [[ "${config}" == "les" ]] 
+         then
+           sed s+"PWD/SRC/"+"PWD/SRC/LES/"+g copy_model > copy_model_tmp
+         else
+           cp copy_model copy_model_tmp
+         fi   
+     chmod 755 copy_model_tmp
+     ./copy_model_tmp
+     \rm copy_model_tmp
      mv WRFV2 ${conf_wrf}/
      cd ${conf_wrf}/WRFV2
      cd Registry ; Registry.bash ; cd .. 
      fi
+          #### sparadrap consequent a l'utilisation de copy_model pour les liens
+          #### -- car alors il manque fftpack
+          if [[ "${config}" == "les" ]]
+          then
+            cp ../../SRC/LES/correcfft ./
+            ./correcfft
+            \rm correcfft
+          fi
   else
     cd ${conf_wrf}/WRFV2 
@@ -257,5 +283,4 @@
   echo ${answer} >> last
 
-
 #------------
 # log files
@@ -270,5 +295,50 @@
   ########################
   conf_wrf_forall="${compilo}_${machine}${single}${testflag}"
+
+         #### in this case options are different because for LES, WRFV3 is used
+         if [[ "${config}" == "les" ]]
+         then
+         conf_wrf_forall="${config}${compilo}_${machine}${single}${testflag}"
+         fi
+
   case ${conf_wrf_forall} in
+
+     #######LES-specific (WRFV3-based) -- previously in 'makeles'
+     #######
+
+     lesmpi_64)        ## MPI (dm) 64 bits [PS: remplacer 3 par 4 pour openMP]
+                       \rm conf > /dev/null 2> /dev/null ; touch conf ; echo 3 >> conf ; echo 1 >> conf
+                       \rm configure.wrf > /dev/null 2> /dev/null ; ./configure < conf > /dev/null 2> /dev/null
+                       sed s+"-lnetcdf"+"-lnetcdf -L../mars_lmd/libo -llmd"+g   configure.wrf > yeah ; mv -f yeah configure.wrf
+                       echo "$(hostname)"
+                       if [[ "$(hostname)" == "ciclad1.ipsl.jussieu.fr" ]]
+                       then
+            echo "SPECIFIC CHANGES FOR CICLAD CLUSTER. EDIT makemeso IF YOU ENCOUNTER PROBLEMS."
+            #sed s+"mpif90 -f90=$(SFC)"+"/usr/lib64/openmpi/1.4.2-pgf/bin/mpif90"+g                      configure.wrf > yeah ; mv -f yeah configure.wrf
+            #sed s+"mpicc -cc=$(SCC)"+"/usr/lib64/openmpi/1.4.2-gfortran/bin/mpicc -DMPI2_SUPPORT"+g     configure.wrf > yeah ; mv -f yeah configure.wrf
+            sed s+"mpif90 -f90=$(SFC)"+"/usr/lib64/openmpi/1.4.3-pgfgcc/bin/mpif90"+g                   configure.wrf > yeah ; mv -f yeah configure.wrf 
+            sed s+"mpicc -cc=$(SCC)"+"/usr/lib64/openmpi/1.4.3-pgfgcc/bin/mpicc -DMPI2_SUPPORT"+g       configure.wrf > yeah ; mv -f yeah configure.wrf
+                       else
+            sed s+"mpif90"+"$WHERE_MPI/mpif90"+g                 configure.wrf > yeah ; mv -f yeah configure.wrf
+            sed s+"mpicc"+"$WHERE_MPI/mpicc -DMPI2_SUPPORT"+g    configure.wrf > yeah ; mv -f yeah configure.wrf
+                       fi
+                       sed s+"-fastsse"+" "+g                               configure.wrf > yeah ; mv -f yeah configure.wrf
+                          ### pas forcement necessaire ici mais OK
+                          sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g     configure.wrf > yeah ; mv -f yeah configure.wrf 
+                       \rm conf > /dev/null ;;
+
+     lesmpifort_64)    ## MPI (dm) 64 bits IFORT
+                       \rm conf > /dev/null 2> /dev/null ; touch conf ; echo 7 >> conf ; echo 1 >> conf
+                       \rm configure.wrf > /dev/null 2> /dev/null ; ./configure < conf > /dev/null 2> /dev/null
+                       sed s+"-lnetcdf"+"-lnetcdf -L../mars_lmd/libo -llmd"+g   configure.wrf > yeah ; mv -f yeah configure.wrf
+                       sed s+"mpif90"+"$WHERE_MPI/mpif90"+g                 configure.wrf > yeah ; mv -f yeah configure.wrf
+                       sed s+"mpicc"+"$WHERE_MPI/mpicc -DMPI2_SUPPORT"+g    configure.wrf > yeah ; mv -f yeah configure.wrf
+                       sed s+"-fastsse"+" "+g                               configure.wrf > yeah ; mv -f yeah configure.wrf
+                       sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g     configure.wrf > yeah ; mv -f yeah configure.wrf
+                       \rm conf > /dev/null ;;
+
+     #######
+     #######LES-specific (WRFV3-based) -- previously in 'makeles'    
+
 #######TEST TEST
                      # GFORTRAN, 64 bits, no nesting      
@@ -368,11 +438,17 @@
   ########################
 
+
   if [[ "${phys}" == "newphys_" ]]
   then
-     sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DNEWPHYS "+g configure.wrf > yeah 
+     if [[ "${config}" == "les" ]]  ### LES is different because of WRFV3
+     then
+       sed s+"ARCH_LOCAL      =       "+"ARCH_LOCAL      =       -DNEWPHYS "+g configure.wrf > yeah
+     else
+       sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DNEWPHYS "+g configure.wrf > yeah 
+     fi
      mv -f yeah configure.wrf
   fi
 
-        if [[ ! ("${scenario}" == "") ]]
+        if [[ ! ("${scenario}" == "") ]]   ### not supported with LES for the moment
         then
           sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -D${scenario} "+g configure.wrf > yeah
@@ -560,5 +636,4 @@
 
   # talk to user
-  echo '>>> YOUR CONFIG IS : '${config}
   echo '>>> compiling ... this may be long ... <<<'
   echo check progress in:
@@ -569,5 +644,5 @@
   # compile ...
   case ${config} in
-    'real')         compile em_real > log_compile 2> log_error 
+    '')         compile em_real > log_compile 2> log_error 
                     # save executables  
                     cd main
@@ -584,4 +659,5 @@
                     cd ..  ;;
     'ideal')        #mkdir 'test/em_quarter_ss' 2> /dev/null
+                    echo '>>> YOUR CONFIG IS : '${config}
                     compile em_quarter_ss > log_compile 2> log_error 
                     # save executables  
@@ -598,5 +674,21 @@
                     cp -f wrf.exe ../../wrf_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}.exe
                     cd ..  ;;
-    *)              echo not supported... please use ; echo real ideal ; exit ;;
+    'les')          echo '>>> YOUR CONFIG IS : '${config}
+                    mkdir 'test/em_les' 2> /dev/null                    
+                    compile em_les > log_compile 2> log_error
+                    # save executables  
+                    cd main
+                      if [[ -f ideal.exe ]]
+                      then
+                        echo 'Looks good ! ideal.exe is here...' 
+                      fi
+                      if [[ -f wrf.exe ]]
+                      then
+                        echo 'Looks good ! wrf.exe is here...' 
+                      fi
+                    cp -f ideal.exe ../../ideal_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}.exe
+                    cp -f wrf.exe ../../wrf_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}.exe
+                    cd ..  ;;
+    *)              echo not supported... please use ; echo ideal les ; exit ;;
   esac
   echo '*******last lines from log_error*********'
