
 CM1 Numerical Model, release 17  (cm1r17):
 26 September 2013

 Summary of changes.

-------------------------------------------------------------
1.  New options/features.

 - Removed the confusing and seemingly contradictory variables bcturbu, 
   bc_wind, and idrag.  Instead, there are two new namelist variables, 
   bbc and tbc ("bottom boundary condition" and "top boundary condition").
   See README.namelist for further details. 

 - All bottom/top boundary conditions now work for Direct Numerical 
   Simulations (dns=1) as well as simple 2nd-order numerical diffusion 
   (idiff=1 with difforder=2).

 - The sole rigid wall lateral boundary condition (wbc,ebc,sbc,nbc=3)
   has been replaced by two new options:  wbc,ebc,sbc,nbc=3 specifies 
   rigid walls with a free slip condition;  and wbc,ebc,sbc,nbc=4 specifies 
   rigid walls with a no slip condition.  See README.namelist for further 
   details.

 - Added the ability to use Weighted Essentially Non-oscillatory (WENO) 
   advection for velocities (u,v,w).  See variable "advwenov" in 
   "README.namelist".  (Thanks to Ted Mansell, NOAA/NSSL, for providing
   code.)

 - Added the ability to use a different advection scheme for velocities 
   than for scalars.  See variables "hadvordrs,vadvordrs,hadvordrv,vadvordrv"
   in "README.namelist".

 - Added the NSSL microphysics scheme.  Three options are available: 
    - 2-moment scheme (graupel-only, no hail)  (ptype=26)
    - 2-moment scheme (graupel and hail)  (ptype=27)
    - single-moment scheme (graupel-only, similar to ptype=4)  (ptype=28)
   See README.namelist for further details.
   (Thanks to Ted Mansell, NOAA/NSSL)

 - Separate surface exchange coefficients for sensible heat (ch) and 
   latent heat (cq) are now included in the CM1 surface flux scheme 
   (sfcmodel=1).  Both ch and cq are now included as output variables.

 - When using the atmospheric radiation scheme (radopt=1) with the 
   Morrison microphysics scheme (ptype=5) code has been added that 
   calculates consistent effective radii (i.e., the actual particle 
   sizes are accounted for properly).  Thanks to Hugh Morrison (NCAR/MMM) 
   for providing this code. 

 - Buoyancy (relative to the model's base state) is now available as a 3D
   output variable.  See the "output_buoyancy" variable in namelist.input. 

 - Squared Brunt-Vaisala frequency (appropriate for moist and saturated
   conditions, when applicable) is now available as a 3D output variable.  
   See the "output_nm" variable in namelist.input. 

 - Horizontal and vertical deformation are now available as 3D output 
   variables.  See the "output_def" variable in namelist.input. 

 - Instantaneous tendencies of u,v,w from the subgrid turbulence scheme 
   are now available as a 3D output variables.  See the "output_turbten" 
   variable in namelist.input. 

 - Instantaneous tendencies of u,v,w from the model's implicit diffusion
   scheme are now available as a 3D output variables.  See the 
   "output_impdiften" variable in namelist.input. 

 - For the surface "swath" output fields, variables were added to the 
   namelist.input file to allow users to choose which fields to output. 
   See variables "output_svs,output_sps,output_srs,output_sgs,output_sus,
   output_shs" in namelist.input, and see README.namelist for further
   details. 

 - For axisymmetric model simulations, when the user sets stat_rmw = 1
   there are now two outputs:  radius of maximum horizontal windspeed 
   (rmw) and height of maximum horizontal windspeed (zmw). 

 - To improve efficiency of input/output (I/O) with MPI runs, a new 
   set of communications protocols has been written.  The user must 
   provide a setting for the variable ppnode, which tells the code how
   many MPI processes there are per node.  See README.namelist for 
   further details.

 - Upgraded the netcdf-format output routines to use netcdf4.  Users
   who request netcdf-format output must have netcdf4 installed on 
   their hardware. 

 - Added a new method to specify a vertically stretched grid
   (stretch_z = 2).  See README.namelist and README.stretch for further 
   details.   (Thanks to Ted Mansell, NOAA/NSSL.) 


-------------------------------------------------------------
2.  Changes, fixes, modifications, etc.

 - Several changes were made to the atmospheric radiation code 
   (used when radopt=1).  Thanks to Martin Singh of MIT for making 
   these improvements and for making the code available.  From his
   documentation:

     - In sorad3d.F, the surface UV radiation was set to be only the 
     radiation between 0.4 and 0.7 microns (photosynthetically active 
     radiation).  Variables have been added to capture the rest of the 
     non-IR radiation, so that the net surface radiation output by the 
     model is accurate.

     - In cm1r16, sorad3d.F calculated only the reduction of direct
     beam downward solar-IR radiation due to attenuation by clouds. 
     This was inconsistent with the calculation of the net flux a few
     lines above, as the reflection of solar radiation was not taken 
     into account properly.  This is changed to be consistent in cm1r17. 

   A few other minor bugs and consistency issues have also been fixed. 
   Thanks again to Martin Singh for his contributions. 
   (sorad3d.F, radtrns3d.F)

 - For the atmospheric radiation scheme (used when radopt=1), the order 
   of operations in a few subroutines were changed to prevent erroneous
   calculations when using aggressive optimization with the intel fortran
   compiler.  Users no longer need to use the "-assume dummy_aliases"
   flag with ifort when using atmospheric radiation. 
   (irrad3d.F, sorad3d.F)

 - Several improvements were made in calculations of cloud optical 
   depth and effective cloud-particle size for the atmospheric radiation 
   scheme (radopt=1).  Thanks to Hugh Morrison (NCAR/MMM). 
   (radtrns3d.F)

 - Several improvements were made to the open boundary condition option 
   (ebc/wbc/sbc/nbc = 2).  (adv.F, advaxi.F, turbtke.F)

 - Fixed a few minor errors in the parcel trajectory code, mostly related
   to stretched grids.  Also, the GrADS-format output routine should be 
   much faster.  Thanks to Johannes Dahl (NC State/Texas Tech).  
   (parcel.F)

 - Many changes were made to the advection subroutines to improve 
   performance, accuracy, and readability.
   (adv.F, advaxi.F)

 - For axisymmetric simulations, new arrays (arh1,arh2,arf1,arf2) were 
   added to reduce roundoff errors and increase performance.
   (many files)

 - Replaced some calls to the "rslf" and "rsif" functions with explicit, 
   in-line calculations, wherever possible, to enhance performance. 
   (kessler.F, morrison.F, turbtke.F)

 - Updated the morrison microphysics code.  (See notes at the top of the 
   morrison.F file for more details.)
   (morrison.F)

 - Updated the thompson microphysics code.  (See notes within the
   thompson.F file for more details.)
   (thompson.F)

 - Replaced the Blackadar (1962) formulation for turbulence lengthscale 
   near the surface with the formulation from Mason and Brown (1999). 
   This length scale is now used in all of the CM1 subgrid turbulence
   schemes (iturb=1,2,3).
   (turb.F)

 - Fixed a pretty major bug for the sfcmodel=2 option (MM5/WRF similarity
   theory code).  Users of sfcmodel=2 are encouraged to upgrade to cm1r17.
   (solve.F)

 - Upgraded the WRF sfclay, slab, oml, and ysu schemes (i.e., surface and
   PBL schemes) to the versions from WRF 3.5.1
   (sfclay.F, slab.F, oml.F, ysu.F)

 - Made some changes to the MPI-based communication subroutines to 
   increase parallel performance.
   (comm.F)

 - Commented out some unnecessary calculations to improve performance.
   (bc.F)

 - Fixed a few (hopefully) minor errors with calculations involving 
   density in the subgrid turbulence parameterization.  
   (turbtke.F)

 - Made some modifications to the split-explicit subroutines to increase 
   performance. 
   (sound.F, sounde.F)

 - Fixed a (hopefully) minor bug with the positive-definite advection 
   option (pdscheme=1) when using terrain.
   (pdef.F)

 - Made some improvements to algorithms for simulations with terrain, 
   mostly for calculations that need extrapolation to the surface. 
   (several files)

 - Fixed a few minor bugs with netcdf output.  The namelist variable 
   "output_basename" now works for netcdf files.  (Thanks to Dan Dawson 
   and Ted Mansell for pointing out bugs.)
   (writeout_nc.F)

 - Fixed a problem with round-off errors for certain compilers when 
   using stretched vertical grids.  (Thanks to Mark Straka of NCSA for 
   pointing out this bug.) 
   (param.F)

 - Modified the way the random number generator is initialized.
   (init3d.F)

 - The sixth-order diffusion scheme (idiff=1 with difforder=6) was moved
   into the same subroutines as advection, and is calculated on every
   Runge-Kutta time step.  The primary advantage is that the positive-
   definite advection option works now on the sum of advective and 
   diffusive fluxes, helping to conserve total water mass. 
   (adv.F;  diff6.F has been removed)

 - The vdiff (i.e., vertical diffusion) option has been removed for 
   difforder=6 (i.e., sixth order diffusion). 

 - Replaced the variable "neweqts" with the variable "eqtset".  Two
   options are available:  1 uses a "traditional" equation set for
   cloud models that does not conserve mass and energy;  2 uses the 
   equation set from Bryan and Fritsch (2002) and Bryan and Morrison
   (2012).  See README.namelist for further details. 

 - Made several code changes to better conserve mass and energy in the 
   model.  Thanks to Martin Singh (MIT) for finding several problems and 
   providing solutions. 
   (solve.F, kessler.F, goddard.F, sfclay.F, diff6.F)

 - Created new iterative saturation adjustment subroutines for the morrison
   and thompson microphysics schemes for the mass- and energy-conserving
   equation set (eqtset=2). 
   (morrison.F, thompson.F)

 - Added the ability to use the internal energy fallout term (efall=1)
   with the morrison microphysics scheme. 
   (solve.F, morrison.F)

 - Made several improvements to the explicit diffusion code (difforder=2), 
   especially with regards to axisymmetric simulations.  Thanks to Dave
   Nolan (University of Miami) for pointing out some problems in 
   axisymmetric simulations.
   (diff2.F, solve.F)

 - Fixed a few minor problems with isnd=10 (saturated, constant Brunt-
   Vaisala frequency).  Thanks to Samantha Tushaus and Derek Posselt
   (University of Michigan).
   (base.F)

 - Implemented all lower/upper boundary condition options in the parcel 
   driver/interpolator code. 
   (parcel.F)

 - Rearranged some operations, and inserted some MPI code, to create
   more helpful error messages when the model stops after checking some 
   consistency issues (i.e., in the "dummy check" section of param.F). 
   Thanks to Johannes Dahl (NC State and Texas Tech). 
   (param.F)

 - Some "dummy checks" are now non-fatal;  i.e., the model simply makes 
   the necessary changes in variable settings and continues on.  (All
   changes made by the model are printed to screen, for the model user's 
   information.) 
   (param.F)
   
 - Many other small changes were made, based on accuracy, efficiency, 
   or model developer's whim.  Contact George Bryan (gbryan@ucar.edu) 
   if you have questions or concerns. 
   (many files)


