2007-08-03: * module_sf_noahlsm.F: * Correct placement of comments in subroutine TDFCND * Removed spaces at the end of lines 2007-08-17 * module_sf_noahlsm.F: * Correction of Q2SAT from mixing ratio to specific humidity * Addition of POTEVP, SNOPCX accumulation terms 2007-10-10 * module_sf_noahlsm.F: * Commented out ETA assignment for ETP<0 in subroutine NOPAC after call SMFLX * Replace DF1 with DF1K in subroutine HRT 2007-12-20 * Added files (from 2.2.1 release): module_sf_urban.F GENPARM.TBL SOILPARM.TBL VEGPARM.TBL urban_param.tbl 2008-01-10 * The module_sf_noahdrv.F, which is the driver for the noah lsm, is separated and the subroutine LSM_PARM_INIT is no longer in use. * The module_sf_noahlsm.F is separated from the noah driver and contains only the sflx subroutine and below. * SMCDRY =0.4 is added for the simple urban model in module_sf_noahlsm.F * module_sf_urban.F is upgraded to have the Anthropogenic Heat (AH) effect. * urban_param.tbl has the AH profile. 2008-02-29 * In module_sf_noahdrv.F, SFCPRS is replaced with PSFC (surface pressure) in the calculation of Q2SATI * In module_sf_noahlsm.F, subroutine SNOPAC, duplicate entry of ETNS is removed. * In module_sf_noahlsm.F, comments added for FFROZP, EMISSI, SOLNET * In module_sf_noahlsm.F, USE module_sf_urban is moved to module_sf_noahdrv.F 2008-03-19 * EMBCK, background emissivity (a function of land-use type), is introduced in the Registry (of WRF) and is treated in Noah similar to albedo. The changes include introduction of a local variable EMBRD. The affected subroutines are SFLX, ALCALC, CANRES, PENMAN, and SNOPAC. 2008-04-08 Make a version exactly the same as the recent WRFV3 release. These changes should be inconsequential to general NOAH users. * module_sf_noahlsm.F: Remove a couple of comments (documenting SOLNET and FFROZP) that did not make it into the WRF code. * SOILPARM.TBL: The WRFV3 release has added a section which defines the STAS-RUC table parameters. * VEGPARM.TBL: The WRFV3 release has added a section which defines the USGS-RUC table parameters. 2008-04-08 (again) * module_sf_noahlsm.F: Put back the comments documenting SOLNET and FFROZP, which had not made it into the WRFV3 release. Maybe we can get them into WRFV3.0.1. 2009-04-14 Update to WRFV3.1 code: Noah LSM version 3.1 has a number of changes as compared to version 3.0. Changes include: * Capability to use MODIS land-use dataset for vegetation categories. This entailed many changes to make the land-use dataset flexible throughout WRF. * Added "NATURAL" category to VEGPARM.TBL, for the land-use category to use for the non-urban parts of urban points. Previously hard-coded as category 10 in the Noah driver. * String length for strings describing land-use data sets and soil-category data sets has been increased from 4 characters to 256 characters. This allows for more descriptive names for land-use and soil-category data sets. * The ISURBAN argument has been added to SFLX. ISURBAN holds the index number for the land-use category corresponding to urban points. All checks on the hard-coded USGS urban category 1 have been changed to test on the value of ISURBAN. ISURBAN now gets passed around to several subroutines below SFLX. * Snow albedo treatment following Livneh. This is a major modification to subroutine ALCALC. * New argument to SFLX: SNOTIME1 holds the age of the snow on the ground, in seconds. (In-code documentation still needed for this.) * Albedo over snow now depends on the age of the snow on the ground. Ground covered with new, fresh snow may have a high albedo; as the snow ages, the albedo is reduced. * Option for 2d LAI map to be used in Noah .... * New argument to SFLX: RDLAI2D * File "urban_param.tbl" has been renamed to "URBPARM.TBL", to be consistent with the rest of the tables. * BUGFIX: In subroutine SRT, infiltration calculation takes into account the time step in setting INFMAX = MIN (INFMAX,PX/DT). Older code did not have the "/DX" term. * Glacial Ice .... Some fairly significant changes to the treatment, here. * The meaning of the ICE flag variable in SFLX has been changed. Now, the settings are ICE=1 for a sea-ice point, and ICE=-1 for a glacial land point, and ICE=0 for a non-glacial land point. * Glacial land points and sea-ice points have smil moisture set to 1.0. (Both total and liquid values. Should liquid part be set to 0.0?) * At glacial land points and seaice points, snow density is set to 0.2 for cold permanent ice or new dry snow. * snow-cover fraction is unlimited over glacial land points. * Albedo of sea-ice is hard-coded to 0.80; emissivity is hard-coded to 0.98. This is probably not good. In reality, the Arctic and the Antarctic behave quite differently, and each has its own annual trend. * Thermal conductivity over sea ice or glacial land points is set to the snow conductivity value. * Subroutine HRTICE is modified to manage subsurface temperature tendency for both sea ice and glacial land points. Diffusivities and heat capacities are ajusted depending on whether its a glacial point or a sea-ice point. * Call to SMFLX is skipped for sea-ice points or glacial land points. * Subroutine SNOPAC: Potential evapotranspiration (ETP) depends on Richardson Number (RIBB) -- to handle stable regimes a little better. * New argument to SFXL: RIBB (In-code documentation still needed for this) * Background (i.e., snow-free) albedo, background emissivity, background roughness-length, and Leaf Area Index are computed in SFLX, by scaling between climatological minimum and maximum values based on land-use category (new VEGPARM.TBL), according to where an instantaneous green vegetation fraction falls between a climatological minimum and maximum for GVF. Values for background emissivity (EMBRD), Leaf-area index (XLAI), background albedo (ALB), and background roughness length (Z0BRD) are computed in SFLX just after the call to REDPRM. * USEMONALB now has to be passed into SFLX. * New arrays defined: LAIMINTBL, LAIMAXTBL; Remove LAITBL. * New arrays defined: ALBEDOMINTBL, ALBEDOMAXTBL; remove ALBTBL. * New arrays defined: Z0MINTBL, Z0MAXTBL; remove Z0TBL * New arrays defined: EMISSMINTBL, EMISSMAXTBL * Subroutine REDPRM now returns LAIMIN, LAIMAX, ALBEDOMIN, ALBEDOMAX, EMISSMIN, EMISSMAX, Z0MIN, Z0MAX, EMISSMIN, EMISSMAX. Removed from REDPRM are Z0BRD, XLAI, and ALB. * The scaling is not applied for albedo if namelist option USEMONALB is set to .true. * The scaling is not applied for LAI if namelist option RDLAI2D is set to .true. * Subroutine SFLX: If the surface is largely snow covered (more than 97%), use the snow diffusivity. (BPRC) * Subroutine PENMAN: Scale latent heat used between snow-covered (latent heat of sublimation) and snow-free (latent heat of vaporization) regions. For glacial land or sea ice regions, use latent heat of vaporization if Skin temperature T1 is greater than freezing * BUGFIX: The code to determine whether the soil-moisture tendency will be solved with the single-step or the two-step process had some wrong unit conversions which meant that the two-step process would be used only in extremely heavy rainfall situations. New code corrects this. Also adds the (FAC2 > FLIMIT) test. * Subroutine FAC2MIT added, making FLIMIT dependent on hard-coded SMCMAX values. If SOILPARM.TBL is changed, this will break FAC2MIT. * Limit the depth of the snow layer in computing soil heat flux (BPRC) * Over sea-ice points and glacial land points, limit the depth of the snow layer in computing soil heat flux (BPRC) * Test on some trace value of snow, instead of zero value, for computing snow density. This may prevent some crazy values caused by a division by something near to zero. (BPRC) (SNEQV) * Subroutine WDFCND: Computation of FACTR1 modified, and the maximum value for FACTR1 is limited: FACTR1 cannot exceed FACTR2. --- What are FACTR1 and FACTR2? --- What's a good generic way do describe this change? * Runoff updated over non-glacial land points. (RUNOFF3,RUNOFF2 setting in SFLX?) Over glacial land or sea ice, runoff goes directly to surface runoff RUNOFF1. * Adjustment in NOPAC of ETA setting if ETP <= 0. * The "LOCAL" variable (for REDPRM settings) no longer used. * FLX3 initialized to zero in the case of shallow snow which sublimates. * Subroutine TRANSP: Dimension for GX no longer hard-coded. * module_sf_noahdrv.F * Include BEP multi-layer urban routine * Change variable UCMCALL to sf_urban_physics (naming convention consistent with other WRF options) * New arguments to LSM: ISURBAN, ISICE, MMINLU, LAI, SNOTIME, XICE_THRESHOLD, RDLAI2D, USEMONALB, RIB, NOAHRES, and a large number of arrays for BEP Multi-layer urban model. * Instead of testing on XICE == 1, or XICE > 0.5, or such, we test on XICE >= XICE_THRESHOLD. This gives us more flexibility for treating sea-ice in this routine and others. * Interpretation of the flag variable ICE has changed. Now: ICE == -1 :: glacial (land) ice point ICE == 0 :: land (non-glacial) point ICE == 1 :: sea-ice point * Change saturation mixing ratio calculation * For urban physics, do not test on VEGTYP == 1, but test on VEGTYP == ISURBAN. This gives us more flexibility in defining our land-use/vegetation categories (e.g., we have the option to use MODIS categories.) * Add the option to read XLAI from a 2-dimensional array passed into LSM, rather than use tables based on vegetation category. * Compute the residual of Noah LSM energy budget. * Pass the proper longwave into subroutine urban * Read the new, expanded VEGPARM.TBL * urban_param.tbl has been completely revised, and renamed to URBPARM.TBL. A number of terms that were set in urban_param.tbl are now computed internally from the settings in URBPARM.TBL * module_sf_urban.F * BB formulation from Inoue (1963) * Finish some shortwave calculations for the shadow case. ------------------------------------------------------------------------------ 2010-05-19: Changes to Noah LSM version 3.2 since version 3.1 ------------------------------------------------------------------------------ * Z0 for snow cover - Roughness length Z0 over snow-covered surfaces has been modified (subroutine SNOWZ0) to account for the accumulation of snow burying the surface features which contribute to roughness. An "effective" roughness length for the snow-covered surface is computed, Z0EFF. For deep snow, Z0EFF is set to 0.001 (deep snow covering the roughness features of the surface). For shallower snow, Z0EFF is set to the snow-free roughness length, Z0BRD, reduced by SNOWH/7. To account for fractional snow cover, the final Z0 term is computed as a weighted average between the snow-free Z0BRD value and the effective snow albedo, Z0EFF. * LVCOEF: - The surface albedo in the presence of snowcover (subroutine ALCALC) is computed following Livneh. In version 3.2, this has been implemented with a user-definable coefficient, LVCOEF, set in file GENPARM.TBL. LVCOEF should range between zero and one. The Livneh scheme boosts the snow albedo toward 85%, then reduces it according to the age of the snow. LVCOEF controls how much the albedo is boosted toward 85%. A default value LVCOEF=0.5 will have the same results as in version 3.1, i.e., an average of the input SNOALB (which tends to range from around 50% to around 75%) and 85%. Values lower than 0.5 will tune this more toward the incoming SNOALB (and ultimately lower albedos). Values greater than 0.5 will tune this more toward 85% (and ultimately higher albedos). * SMAV: - SMAV: Soil moisture availability at each soil layer, computed as a fraction between the wilting point SMCWLT (SMAV=0.0) and saturation soil moisture SMCMAX (SMAV=1.0). No effect on model results. Diagnostic field output in WRF as "SMCREL: Relative soil moisture". * FLX1: - The FLX1 term needs to account for the exchange of heat required to change the temperature of falling precipitation from air temperature to skin temperature. This exchange is considered in computing fluxes and skin temperature, but for rain events, was not included in the budget term FLX1. So the energy budget would show large residual values for rain events. This correction has no effect on the model integration, but will make the budget calculations which use FLX1 more accurate. * DTOT: - Polar modification: over sea/land ice points, DTOT is limited so as not to effectively shut off heat exchange between soil (i.e., ice) layers and the surface. In SNOPAC, this limit was applied regardless of surface type (ice or land). In Version 3.2, this has been corrected to apply only to sea/land ice points. Could have some effect on results in areas of deep snow. * RC: - Canopy Resistance, RC, normally set in the call to subroutine CANRES, is set to zero if CANRES is not called because SHDFAC is 0. This change should have no effect on model integration, but since RC is an output variable, this change insures that the field is initialized where there is no vegetation. This was not an issue for Noah as coupled to WRF, but was causing troubles in some standalone applications of Noah LSM. ------------------------------------------------------------------------------ 2011-04-27: Changes to Noah LSM version 3.3 since version 3.2 ------------------------------------------------------------------------------ * module_sf_noahlsm.F - Apply DF1 conductivity change only for permanent land ice, not for both land ice and sea ice. - SHDFAC becomes INTENT (INOUT) in subroutine REDPRM, because some compilers can be very disturbed if an INTENT(OUT) variable is not necessarily set in the subroutine. * module_sf_noahdrv.F - Activate time-varying roughness length, which had been deactivated. - Correct the output of underground runoff, which had been double counting a term. * URBPARM.TBL - Revert to earlier version of URBPARM.TBL ------------------------------------------------------------------------------ 2012-04: Changes to Noah LSM version 3.4 since version 3.3 ------------------------------------------------------------------------------ * Removed sea-ice code from Noah LSM. Not a physics change but a code-reorganization move. - module_sf_noahlsm.F + Removed code blocs that are active only for sea-ice points; replaced the sea-ice and glacial ice HRTICE routine with HRTICE_GLACIAL specific for glacial ice. - module_sf_noahdrv.F + Skip the call to SFLX for sea-ice points. - new source-code files "module_sf_noah_seaice_drv.F" and "module_sf_noah_seaice.F" contain the driver layer and the physics layer for the sea-ice code that used to be in module_sf_noahdrv.F and module_sf_noahlsm.F ------------------------------------------------------------------------------ 2012-08: Changes to Noah LSM version 3.4.1 since version 3.4 ------------------------------------------------------------------------------ * Removed glacial-ice code from the Noah LSM SFLX routines. Not a * physics change but a further code-reorganization move. Glacial ice is now its own module called from the Noah Driver code at glacial points. - module_sf_noahdrv.F: + At glacial points, skip the subroutine call to SFLX, and call new subroutine SFLX_GLACIAL instead. - module_sf_noahlsm.F + Remove glacial-specific blocks of code. Glacial-specific code has been moved to new module module_sf_noahlsm_glacial_only.F - new source-code file module_sf_noahlsm_glacial_only.F contains glacial-specific code that used to be in module_sf_noahlsm.F