WRF Simulation Experiment: California Central Valley Analysis
Conduct a 3-day WRF simulation in December 2005 over California's Central Valley, verifying against observations to improve model performance. Utilize NARR reanalysis, manipulate vertical levels, and adjust model setups for better accuracy. Detailed domain setup instructions included.
Download Presentation
Please find below an Image/Link to download the presentation.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.
E N D
Presentation Transcript
California Central Valley (Experiment 6) ATM 419 Spring 2016 Fovell 1
Links/sources WRF namelist.input description and options MET User's Guide (v.5.0) NCAR s Research Data Archive: rda.ucar.edu 2
Case overview We will make a 3-day simulation during December 2005 in a 2-domain configuration centered over California. Verification period will be the last 2 days of the 3-day run. First day ignored as spin-up . Verification domain will be the California Central Valley (CV) using observations from ASOS/AWOS obtained from MADIS. The success metric will be CV-averaged mean absolute error (MAE), summed over those 49 hours as verified against the dataset I provide. The smallest total will "win". 3
New aspects of this experiment Use the NARR reanalysis for initialization Verify against observations confined to a portion of the model domain Verify against a fraction of the forecast time period Optionally, manipulate vertical model levels The default WRF setup performs quite poorly 4
Domain setup Experiment setup details in CV_experiment_details.docx Edit namelist.wps as required Do domain setup Check your domain 5
Using NARR reanalysis NARR requires its own Vtable for ungrib and also a fixed-fields file to be provided for the metgrid step. See details document. NARR data are available every 3 hours (10800 sec) NARR files named like: merged_AWIP32.2005120715.3D merged_AWIP32.2005120715.RS.clm merged_AWIP32.2005120715.RS.flx merged_AWIP32.2005120715.RS.pbl merged_AWIP32.2005120715.RS.sfc Actually need only the 3D, flx, and sfc files link_grib.csh /network/rit/lab/atm419lab/NARR/200512/merged* 6
In namelist.wps &ungrib out_format = 'WPS', prefix = NARR', / &metgrid constants_name = /network/rit/lab/atm419lab/NARR/FIXED_NARR', fg_name = NARR', io_form_metgrid = 2, / Specifying the prefix and fg_name as NARR is not necessary but is convenient if you decide to use alternate or combined data sources. If you are not using NARR, you must remove the constants_name reference. (Move the line after the / to deactivate it.) 7
WPS and WRF Link to the NARR files and get your NARR Vtable Perform ungrib.exe, metgrid.exeas usual Check on num_metgrid_levels Edit namelist.inputas required for default run setup (see also next slide) We will run for 3 days, using 2 domains Make sure domain particulars match namelist.wps Do real.exevia batch script submit_wrf Create your default run RUN01 8
Edit namelist.input Make sure run_days = 3 and start/end times are correct Make sure domain details match namelist.wps Make sure num_metgrid_levels is correct Model setup: time_step = 120 sec 51 vertical levels p_top_requested = 10000 Microphysics option 2 LW and SW 4, with 10 min time step (radt) YSU PBL w/ sf_sfclay_physics = 1 Noah LSM Cumulus scheme #1 (K-F), on in both domains, with 5 min time step (cudt) Turn the 6th order diffusion on in both domains, with diff_6th_factor = 0.12 for both (diff_6th_opt = 1, 1) Use dampcoef = 0.01 for both domains Moisture and other scalar advection option 2 in both domains 9
Dampers often used in real-data WRF w_damping = 1, diff_opt = 1,1, km_opt = 4,4, diff_6th_opt = 1, 1, diff_6th_factor = 0.12, 0.12, damp_opt zdamp dampcoef = 3, = 5000., 5000., = 0.01, 0.01, w_damping= 1 suppresses some anomalously large vertical motions. Coefficients are hard-coded in share/module_model_constants.F diff_6th_opt= 1 or 2 provides 6th order smoothing. Here, option 1 is used, which is not positive definite. damp_opt= 3 provides upper-level Rayleigh damping. Coefficient dampcoefis damping rate (1/s). Applied over depth zdampbelow model top. Typical values are up to 0.2 for real-data runs. Here, dampcoefis much smaller than typically used. 10
Other dampers (leave these alone) epssm = damps vertically-propagating sound waves emdiv = damps the external mode If absent from namelist.input, default values are employed 11
Advection options moist_adv_opt scalar_adv_opt = 2, 2, = 2, 2, These can be used to make advection of moisture and other scalars either positive definite (1) or monotonic (2). Raw advection Positive definite Monotonic (pos. def. + no oscillations) 12
Diffusion options In a moderate resolution real-data WRF run (such as ours), there are two kinds of meteorological diffusion : horizontal and vertical Vertical diffusion is handled by the PBL scheme, even for free atmosphere above the PBL Horizontal diffusion is handled by diff_opt, km_opt namelist options km_opt = 4 computes strictly horizontal diffusion (the only option when a PBL scheme is employed) km_opt = 1 applies constant diffusion (undesirable) km_opt = 2 or 3 does 3D turbulent diffusion (inconsistent with PBL scheme) diff_opt = 1 does diffusion along model surfaces, while diff_opt = 2 does diffusion in physical space (see next slide). diff_opt = 0 shuts it off. diff_opt = 2 used to blow up in complex terrain. Now it shuts itself off . Standard setup for these runs: diff_opt = 1, km_opt = 4. 13
diff_opt = 1 Horizontal diffusion is along model surfaces (if model levels sloped, diffusion isn t really horizontal) diff_opt = 2 Diffusion is in physical space (even if model surfaces are sloped) 14
Verification Review of steps Create an analysis directory (like RUN01) Create subdirectories RUN01/postprd and RUN01/wrfprd Move your wrfout* files into RUN01/wrfprd Make sure you have edited copies of run_unipostand MET_run_ASCII2_ASOS.sh in the analysis directory (RUN01). See upcoming slides. 15
run_unipost export startdate=2005120500 Our simulation starts on 12-05-2005 at 00Z but our verification period will start 24 hours later. export fhr=24 export lastfhr=72 export incrementhr=01 for domain in d02 Our verification will focus on D2. 16
MET analysis domains Statistics will be generated for 2 areas in D2: the FULL domain and the CV subdomain, described in the file CV_large.poly CV_large.poly is a polygon outlining the CV interior (see next slide) MET_run_ASCII2_ASOS.sh points to a configuration file called PointStatConfig.NODUP.ATM419.CV (see upcoming slides) 17
Contents of CV_large.poly CV_large 38.3039 -122.139 39.2371 -122.393 39.871 -122.52 40.4344 -122.562 40.7337 -122.499 40.7337 -122.013 40.0999 -121.928 39.5188 -121.378 38.5504 -120.786 37.8813 -120.406 37.3179 -120.068 36.8424 -119.243 36.1205 -118.926 35.1873 -118.715 35.0112 -119.18 35.6099 -119.877 36.367 -120.342 36.9657 -121.019 37.5996 -121.294 37.9693 -121.928 38.3039 -122.139 18
PointStatConfig.NODUP.ATM419.CV 1/4 // // Forecast and observation fields to be verified // // repeated wind twice for forecast ,. third wind is L1 vs gust fcst = { wind_thresh = [ NA ]; message_type = [ "ADPSFC" ]; field = [ { name = "TMP"; level = [ "Z2" ]; cat_thresh = [ >0 ]; }, Temperature at 2-m { name = "WIND"; level = [ "Z10" ]; cat_thresh = [ >=0 ]; }, Wind speed at 10-m This section of the configuration file declares the forecast fields to be verified [etc.] For information only. You do not need to edit this file. 19
PointStatConfig.NODUP.ATM419.CV 2/4 obs = { wind_thresh = [ NA ]; message_type = [ "ADPSFC" ]; field = [ { name = "TMP"; level = [ "Z2" ]; cat_thresh = [ >0 ]; }, { name = "WIND"; level = [ "Z10" ]; cat_thresh = [ >=0 ]; }, [etc.] This section of the configuration file declares the observation fields to be verified. They must match up 1:1 with declared forecast fields. For information only. You do not need to edit this file. 20
PointStatConfig.NODUP.ATM419.CV 3/4 // // Verification masking regions // mask = { grid = [ "FULL" ]; poly = ["/network/rit/home/rf518462/METV5/CV_large.poly"]; sid = ""; }; The CV area is described in the polygon file called CV_large.poly. See next slide. For information only. You do not need to edit this file. 21
PointStatConfig.NODUP.ATM419.CV 4/4 // // Point observation time window // obs_window = { beg = -1800; end = 1800; } Obs time can be up to 30 min (1800 sec) before or after the forecast time // // Interpolation methods // interp = { vld_thresh = 1.0; Interpolation method is unweighted mean type = [ { method = UW_MEAN; width = 1; } ]; }; Other selections that could be reconsidered. duplicate_flag = SINGLE; SINGLE here means only one obs per station is permitted at the given forecast time. (MET selects closest time match.) 22
MET_run_ASCII2_ASOS.sh Although verification period starts on 6th, this should be configured as shown here. Date_base=20051205 Date_hour=00 domain=2 MYHOME=/network/rit/home/rf518462 MET_base=$MYHOME/METV5 OBS_base=/network/rit/lab/atm419lab/MADIS/MADIS_200512 RUN_base=$PWD/postprd Grey = do not change. 23
Running MET Steps (after editing files) Execute srun bash run_unipost Execute srun sh MET_run_ASCII2_ASOS.sh Execute plot_met_CV.sh to get statistics for T, Td and RH The plot_met_CV.sh script has been altered to report either statistics averaged over stations throughout D2 ( FULL ) or those in the CV ( CV_large ). We will verify against CV_large. Options for this script have changed somewhat. See next slide. If your analysis was set up correctly, the first analysis time reported should be 20051206_0000. We are skipping Dec 5th. 24
sh plot_met_CV.sh 2 20051206_000000FULL TMPf 285.00128 TMPo 285.09999 N 40 MAE 1.46576 BCRMSE 3.65601 MSE 3.66575 BIAS -0.09872 STDf 3.95917 STDo 3.69997 LVL Z2f Z2o 20051206_010000 FULL TMPf 282.04653 TMPo 282.42499 N 40 MAE 1.59483 BCRMSE 4.39621 MSE 4.53945 BIAS -0.37847 STDf 4.27901 STDo 4.11369 LVL Z2f Z2o 20051206_020000 FULL TMPf 281.08186 TMPo 280.24755 N 41 MAE 2.24988 BCRMSE 7.19319 MSE 7.88925 BIAS 0.83431 STDf 4.05379 STDo 4.27671 LVL Z2f Z2o 20051206_030000 FULL TMPf 279.98728 TMPo 278.61153 N 39 MAE 2.17365 BCRMSE 5.74617 MSE 7.63884 BIAS 1.37574 STDf 3.80090 STDo 3.99899 LVL Z2f Z2o sh plot_met_CV.sh 3 20051206_000000CV_large TMPf 286.02958 TMPo 285.64999 N 20 MAE 1.45419 BCRMSE 3.46246 MSE 3.60654 BIAS 0.37958 STDf 1.40597 STDo 1.35724 LVL Z2f Z2o 20051206_010000 CV_large TMPf 283.29736 TMPo 283.14999 N 19 MAE 1.31648 BCRMSE 2.82816 MSE 2.84988 BIAS 0.14737 STDf 1.53045 STDo 1.73205 LVL Z2f Z2o 20051206_020000 CV_large TMPf 282.22226 TMPo 280.64999 N 20 MAE 2.36122 BCRMSE 5.22846 MSE 7.70049 BIAS 1.57227 STDf 1.48008 STDo 1.96013 LVL Z2f Z2o 20051206_030000 CV_large TMPf 280.91430 TMPo 279.38809 N 21 MAE 2.20825 BCRMSE 5.39430 MSE 7.72361 BIAS 1.52621 STDf 1.62973 STDo 1.81397 LVL Z2f Z2o Note that option 2 reports TMP for domain FULL , which has about 40 stations. Note that option 3 reports TMP for domain CV_large , which has about 20 stations. This is what we want. 25
sh plot_met_CV.sh 3 TMP for CV_large sh plot_met_CV.sh 9 DPT for CV_large sh plot_met_CV.sh 11 RH for CV_large For RH in CV_large, MAE sum = 1454.98 for hours 24-72 Low RH results from a warm bias in T and a dry bias in Td, especially at night. 26
Experiment 6: Improve the CV RH forecast 27
Experiment 6 For Experiment 6, your task is to improve the RH forecast for the CV Our default run RUN01 has a pretty standard setup, but fails to capture CV RH well, especially at night. WRF model provides many, many options. Not all options make sense for this application, and not all options play nice together. The pervasive question: are we getting the right answer for the right reason? 28
Notes There are many namelist and physics options. Not all work with all physics combinations. Some are not well-tested. Some may force smaller time steps. The LES options should be ignored, as they require much, much finer grid spacing. slope_radand topo_shadingmodify solar radiation on terrain slopes, but usually used when spatial resolution is higher than in our domains. iz0tlnd= 1 enhances surface evaporation in more heavily vegetated areas. icloud= 1, 2 alters how SW radiation interacts with clouds. icloud = 0 makes clouds transparent to radiation. sf_urban_physicscontrols some aspects of urbanized areas in the domain. The isfflxflag can deactivate surface fluxes in some physics combinations. Similarly, ifsnowcan activate/deactivate snow effects with sf_surface_physics= 1. ysu_topdown_pblmix= 1 attempts to modify YSU to work better in foggy boundary layers. Only works with YSU PBL. topo_wind= 1 attempts to adjust near-surface winds for unresolved topography. Only works with YSU PBL. For cumulus schemes other than K-F (cu_physics= 1), cudtshould be 0. 29
The success metric will be CV-averaged MAE, summed over those 49 hours as verified against the dataset I provide. The smallest total will "win". Rules: You cannot change the time period being simulated. Your simulations must start on 12-05-2005, and run for 3 days. You cannot change the verifying data, region or time period. The data are from ASOS/AWOS stations, the region is the CV, and time period is the two day interval between 12-06 @00Z and 12-08 @00Z. You cannot use any data assimilation or nudging. You have to use the domain I provided (2 nested domains, resolution, location). You cannot change the resolution, or add a 3rd nest. You must use the WRF model executable and the PointStatConfig file I have provided. However: You CAN alter model physics options. See WRF namelist page for scads of available options. You CAN alter the initialization data source, in any way you wish. This includes a different reanalysis altogether and/or different atmospheric and soil moisture sources. You CAN change the number of vertical levels, and use the eta_levelsnamelist option to manipulate them as you wish. (See following slides for additional information.) You CAN change the length of time steps, for the model and/or for the radiation and cumulus schemes. However, please leave bldt= 0. 30
Recording your results See RUN01 results tab for output from plot_met_CV for T, Td and RH for RUN01 Google spreadsheet Create a unique simulation name with your surname. Add your summed MAE to the spreadsheet. Record your numbers even if the run wasn t very good. Save your notes and outputs as I may ask to see them. 31
Altering vertical levels If you specify 51 vertical levels in the namelist.input, real.execreates 51 eta or sigma levels, representing a nondimensional vertical coordinate stored as ZNW in wrfinput_d01. Use ncdumpto reveal the eta values. They always start at 1, and end with 0. ncdump v ZNW wrfinput_d01 ZNW = 1, 0.993, 0.983, 0.97, 0.954, 0.934, 0.909, 0.88, 0.859136, 0.838272, 0.817408, 0.796544, 0.7570357, 0.7189486, 0.68224, 0.6468685, 0.6127935, 0.5799757, 0.5483767, 0.5179589, 0.4886861, 0.4605225, 0.4334337, 0.4073859, 0.3823463, 0.3582829, 0.3351647, 0.3129614, 0.2916434, 0.2711821, 0.2515495, 0.2327186, 0.2146628, 0.1973564, 0.1807745, 0.1648926, 0.1496871, 0.1351351, 0.1212141, 0.1079023, 0.09517873, 0.08302274, 0.07141437, 0.06043376, 0.05011374, 0.04041456, 0.03129888, 0.0227316, 0.01467971, 0.007112224, 0 ; You can manually declare these levels in namelist.input s&domains section. You should get the same result from real.exe, to within roundoff error. eta_levels = 1, 0.993, 0.983, 0.97, 0.954, 0.934, 0.909, 0.88, 0.859136, 0.838272, 0.817408, 0.796544, 0.7570357, 0.7189486, 0.68224, 0.6468685, 0.6127935, 0.5799757, 0.5483767, 0.5179589, 0.4886861, 0.4605225, 0.4334337, 0.4073859, 0.3823463, 0.3582829, 0.3351647, 0.3129614, 0.2916434, 0.2711821, 0.2515495, 0.2327186, 0.2146628, 0.1973564, 0.1807745, 0.1648926, 0.1496871, 0.1351351, 0.1212141, 0.1079023, 0.09517873, 0.08302274, 0.07141437, 0.06043376, 0.05011374, 0.04041456, 0.03129888, 0.0227316, 0.01467971, 0.007112224, 0 , 32
Eta or sigma: coordinate WRF Dynamics and numerics tutorial document ph = hydrostatic pressure phs = hydrostatic pressure at surface pht = hydrostatic pressure at model top = held constant 33
ncks -C -H -d south_north,1 -d west_east,1 -v PHB wrfinput_d01 Time[0] bottom_top_stag[0] south_north[1] west_east[1] PHB[70]=0 Time[0] bottom_top_stag[1] south_north[1] west_east[1] PHB[4831]=525.719 Time[0] bottom_top_stag[2] south_north[1] west_east[1] PHB[9592]=1281.56 Time[0] bottom_top_stag[3] south_north[1] west_east[1] PHB[14353]=2272.73 Time[0] bottom_top_stag[4] south_north[1] west_east[1] PHB[19114]=3506.27 Time[0] bottom_top_stag[5] south_north[1] west_east[1] PHB[23875]=5069.89 Time[0] bottom_top_stag[6] south_north[1] west_east[1] PHB[28636]=7059.58 Time[0] bottom_top_stag[7] south_north[1] west_east[1] PHB[33397]=9418.65 Time[0] bottom_top_stag[8] south_north[1] west_east[1] PHB[38158]=11151.3 Time[0] bottom_top_stag[9] south_north[1] west_east[1] PHB[42919]=12914.9 Time[0] bottom_top_stag[10] south_north[1] west_east[1] PHB[47680]=14710.8 Time[0] bottom_top_stag[11] south_north[1] west_east[1] PHB[52441]=16540 Time[0] bottom_top_stag[12] south_north[1] west_east[1] PHB[57202]=20100.9 Time[0] bottom_top_stag[13] south_north[1] west_east[1] PHB[61963]=23661.7 Time[0] bottom_top_stag[14] south_north[1] west_east[1] PHB[66724]=27222.5 Time[0] bottom_top_stag[15] south_north[1] west_east[1] PHB[71485]=30783.4 Time[0] bottom_top_stag[16] south_north[1] west_east[1] PHB[76246]=34344.2 Time[0] bottom_top_stag[17] south_north[1] west_east[1] PHB[81007]=37905.1 Time[0] bottom_top_stag[18] south_north[1] west_east[1] PHB[85768]=41466 Time[0] bottom_top_stag[19] south_north[1] west_east[1] PHB[90529]=45026.9 Time[0] bottom_top_stag[20] south_north[1] west_east[1] PHB[95290]=48587.8 Time[0] bottom_top_stag[21] south_north[1] west_east[1] PHB[100051]=52148.7 Time[0] bottom_top_stag[22] south_north[1] west_east[1] PHB[104812]=55709.7 Time[0] bottom_top_stag[23] south_north[1] west_east[1] PHB[109573]=59270.6 Time[0] bottom_top_stag[24] south_north[1] west_east[1] PHB[114334]=62831.6 Time[0] bottom_top_stag[25] south_north[1] west_east[1] PHB[119095]=66392.6 Time[0] bottom_top_stag[26] south_north[1] west_east[1] PHB[123856]=69953.5 Time[0] bottom_top_stag[27] south_north[1] west_east[1] PHB[128617]=73514.6 Time[0] bottom_top_stag[28] south_north[1] west_east[1] PHB[133378]=77075.6 Time[0] bottom_top_stag[29] south_north[1] west_east[1] PHB[138139]=80636.6 Time[0] bottom_top_stag[30] south_north[1] west_east[1] PHB[142900]=84197.7 Time[0] bottom_top_stag[31] south_north[1] west_east[1] PHB[147661]=87758.8 Time[0] bottom_top_stag[32] south_north[1] west_east[1] PHB[152422]=91319.9 Time[0] bottom_top_stag[33] south_north[1] west_east[1] PHB[157183]=94881 Time[0] bottom_top_stag[34] south_north[1] west_east[1] PHB[161944]=98442.1 Time[0] bottom_top_stag[35] south_north[1] west_east[1] PHB[166705]=102003 Time[0] bottom_top_stag[36] south_north[1] west_east[1] PHB[171466]=105564 Time[0] bottom_top_stag[37] south_north[1] west_east[1] PHB[176227]=109126 Time[0] bottom_top_stag[38] south_north[1] west_east[1] PHB[180988]=112687 Time[0] bottom_top_stag[39] south_north[1] west_east[1] PHB[185749]=116248 Time[0] bottom_top_stag[40] south_north[1] west_east[1] PHB[190510]=119810 Time[0] bottom_top_stag[41] south_north[1] west_east[1] PHB[195271]=123371 Time[0] bottom_top_stag[42] south_north[1] west_east[1] PHB[200032]=126932 Time[0] bottom_top_stag[43] south_north[1] west_east[1] PHB[204793]=130494 Time[0] bottom_top_stag[44] south_north[1] west_east[1] PHB[209554]=134055 Time[0] bottom_top_stag[45] south_north[1] west_east[1] PHB[214315]=137616 Time[0] bottom_top_stag[46] south_north[1] west_east[1] PHB[219076]=141178 Time[0] bottom_top_stag[47] south_north[1] west_east[1] PHB[223837]=144739 Time[0] bottom_top_stag[48] south_north[1] west_east[1] PHB[228598]=148300 Time[0] bottom_top_stag[49] south_north[1] west_east[1] PHB[233359]=151862 Time[0] bottom_top_stag[50] south_north[1] west_east[1] PHB[238120]=155423 PHB is base state geopotential height. Divide by 9.806 for height above MSL. Here, PHB for grid point (1,1) is shown. As this is over water, the height is also height AGL. These heights are for the W locations, which start at the surface. 34
Default vertical levels from real.exe results in 8 levels within lowest 1 km AGL First W level above ground at ~ 54 m so first scalar level at about 27 m If you increase or decrease the number of levels, these heights change but real.exe tries to keep the lowest 8 W levels at same heights (see next slide) 35
Model levels for e_vert= 51 and 31 Model level W height (51 levels), in meters W height (31 levels), in meters Note both vertical grids have same lowest 8 model levels! 1 0.0 0.0 2 53.6 53.6 3 130.7 130.7 4 231.8 231.8 If you want to increase vertical resolution near the surface, this is NOT accomplished by increasing the number of model levels! 5 357.6 357.6 6 517.0 517.0 7 719.9 719.9 8 960.5 960.5 9 1137.2 1296.5 10 Specify eta_levels instead. 1317.0 1644.2 11 1500.2 2004.4 12 1686.7 2378.1 13 2049.9 3087.1 36
Some other WRF initialization datasets ERA-Interim (6 hourly files) /network/rit/lab/atm419lab/ERAI/200512/ Requires Vtable.ERA-interim.pl CFSR (Climate Forecast System Reanalysis, v. 1; also 6 hourly) /network/rit/lab/atm419lab/CFSR/ pgb* = atmospheric data on pressure levels flx* = surface data Requires doing atmospheric and surface ungrib tasks separately, using different Vtables Vtables: Vtable.CFSR_press_pgbh06, Vtable.CFSR_sfc_flxf06 Set different prefixes (such as CFSR, CFSR_SFC) for the 2 ungrib runs, then combine them for metgrid: fg_name = 'CFSR','CFSR_SFC', 37