# Frequently Asked Questions
## Recommendations
- Submit runs individually and quality control.
- Check all steps in the process have run correctly.
- Check main.bash.o has “substituting initial chemistry from restart” if do not want a cold start.
- Manage space requirements, as run and output folders can get very large.
- Run `main.bash` in 2 week chunks to fit within 48 hours.
- Information on improving performance [here](https://github.com/wrfchem-leeds/WRFotron/issues/29).
- A selection of data science scripts using Python [here](https://github.com/wrfchem-leeds/python-scripts).
## Anthropogenic emissions
- **Check that**:
- The `anthro_emis` input namelist (e.g., `emis_edgarhtap2_mozmos.inp`) has the following mappings (i.e., WRFChem variable assigned to inventory variable):
- `ORGI` and `ORGJ` assigned to `POM` (particulate organic matter).
- The emissions of Organic Carbon (OC) need to be converted to total particulate organic matter (POM), which includes the associated oxygen, hydrogen and other elements.
- `PM25I` and `PM25J` assigned to `OIN_PM2.5` (other inorganic matter under 2.5 $\mu m$).
- `PM_10` assigned to `PM2.5_10` (coarse particulate matter for 2.5-10 $\mu m$).
- These 3 inventory variables (i.e., `POM`, `OIN_PM2.5`, and `PM2.5_10`) have their own NetCDF files:
- Ideally, these are provided directly from the emission inventory.
- If not, then you can calculate them for your data offline.
- Ensure that these files have their units attribute set to `"kg m-2 s-1"` ([reference](https://github.com/wrfchem-leeds/WRFotron/issues/48)).
- This can be done using the following command for all emission variables within the files. For example, for the `POM` file for the variable `emis_tot` use: `ncatted -O -a units,emis_tot,a,c,"kg m-2 s-1" EDGARHTAP2_MEIC2015_POM_2010.0.1x0.1.nc`
- **Example** for EDGARHTAP2.2/MEIC emissions using `chem_opt = 202`:
- This inventory provided `OC` (organic carbon), `PM2.5` (all PM2.5), and `PM10` (all PM10).
- First, create the required variables (save them all as new NetCDF files using the chemical names `POM`, `OIN_PM2.5`, and `PM2.5_10`):
- Create `POM` file by multiplying `OC` by a scaling factor.
- The scaling factor is usually in the range of 1.4-1.7 and is ideally sector-specific.
- Create `OIN_PM2.5` as equal to `PM2.5` - `BC` - `POM`.
- Here, you are subtracting `POM`, which you calculated above.
- Set any negative values to 0 (as this can cause errors).
- Create `PM2.5_10` as equal `PM10` - `PM2.5`.
- Take care here to ensure subtacting `PM2.5`, and not just `OIN_PM2.5`.
- Set any negative values to 0 (as this can cause errors).
- Then, open the `anthro_emis` input namelist `emis_edgarhtap2-meic2015_mozmos.inp`.
- Check that `src_names` has:
- `'POM(12)'`
- `'OIN_PM2.5(1)'`
- `'PM2.5_10(1)'`
- Check that `emis_map` has:
- `'ORGJ(a)->0.9*POM(emis_tot)'`
- `'PM25J(a)->0.9*OIN_PM2.5(emis_tot)'`
- `'PM_10(a)->PM2.5_10(emis_tot)'`
- These instructions may be different for other emission inventories and chemical mechanisms.
## Troubleshooting and errors
- Find the errors' first occurance, checking rsl.error, rsl.out, .e, .o, and .log files within the run folder.
- You need to make sure all programs are compiled and useable, and that the paths in your config.bash point to the correct locations.
- You need to ensure that your data is all available for the period you want to simulate (including meteo spin-up).
- You need to ensure your namelists are correct.
- [If the error if related to a FORTRAN run-time error](https://software.intel.com/en-us/fortran-compiler-developer-guide-and-reference-list-of-run-time-error-messages).
- [Check WRF FAQ's](http://www2.mmm.ucar.edu/wrf/users/FAQ_files/).
- [Check WRF forums](http://forum.wrfforum.com/).
- Check Google groups for:
- [WRFChem](https://groups.google.com/a/ucar.edu/forum/#!forum/wrf-chem).
- [fire_emiss](https://groups.google.com/a/ucar.edu/forum/#!forum/wrf-chem-fire_emiss).
- [anthro_emis](https://groups.google.com/a/ucar.edu/forum/#!forum/wrf-chem-anthro_emiss).
- [Runs](https://groups.google.com/a/ucar.edu/forum/#!forum/wrf-chem-run).
- Try increasing the debug level.
- Timesteps for meteorology (time_step in namelist.wrf), chemistry (chemdt in namelist.chem), and biogenics (bioemdt in namelist.chem) need to match (careful of units).
- If no error message given at the bottom of rsl.error. file:
- Potentially a violation of the CFL criterion:
- Try reducing the timestep.
- Try turning w_damping off.
- Potentially a memory error:
- Increase the number of cores.
- Increase the memory per core.
## Download ECMWF meteorlogy files
- [Create an account with ECMWF](https://apps.ecmwf.int/registration/).
- [Follow the steps](https://confluence.ecmwf.int/display/WEBAPI/Access+ECMWF+Public+Datasets).
- Login.
- Retrieve your key.
- Copy the information to `~/.ecmwfapirc`
- Create a python2 environment for ecmwf-api-client (this library has not yet been updated for python 3).
```bash
conda create -n python2_ecwmf -c conda-forge ecmwf-api-client
```
- Go to the folder `initial_boundary_meteo_ecmwf`.
- Edit the python scripts:
- Both surface and pressurelevels.
- Only need to change the date and target name.
- Qsub the .bash scripts
- Edit pre.bash to comment out the GFS and comment in the ECMWF files
- Ensure the date and target name correspond to those you want to run with
- Change the number of meteorological vertical levels from 27 (GFS) to 38 (ECMWF)
- Also, the number of meteorological soil levels from 4 (GFS):
- To 3 for ECMWF with WRFChem4
- To 4 for ECMWF with WRFChem3
## To run with a nest
Offline nests:
- See [step-by-step guide to run with a nest document from Carly Reddington](https://github.com/wrfchem-leeds/WRFotron/blob/master/guides/Guide_to_offline_nesting_CR.pdf).
- Uses ndown.exe for one-way nesting
- Feedback = 0
- Parent and nest domain may drift apart
Online nests:
- Turn off urban physics (i.e. `sf_urban_physics = 0, 0, 0`) in physics subsection of namelist.wrf.
- Requires a large amount of cores, as memory intensive
- Uses wrf.exe for two-way nesting
- Feedback = 1
- Have an odd number for the parent_grid_ratio.
- For nest 2, (e_we-s_we+1) must be one greater than an integer multiple of the parent_grid_ratio (3 or 5).
- WRF will decompose each domain in the exact same way, so ensure all the domains are similar shapes (i.e. don’t have a square domain within a rectangular domain, or even a rectangular domain which is longer in the x-direction within another domain which is longer in the y-direction).
- Check all namelist settings and check all required nest parameters are set (use registry to check which parameters need to be set for every domain).
- All variables with dimension = max_domains or (max_dom) need to be set for the nests
- Careful the domains are not too big, otherwise wrfinput won’t be created
- Use same physics options and physics calling options e.g. radt/cudt
- An exception is cumulus scheme. One may need to turn it off for a nest that has grid distance of a few kilometers or less.
- For nest, e_we and e_sn for a parent_grid_ratio of 3 must be return a whole number when minus 1 and divide by parent_grid_ratio (3)
- Decrease restart_interval to 720 (2/day) from 360 (4/day)
- Tests with less than 24 hours break the coarsest domains mozbc
- Add diurnal cycle for all domains:
- Within MAIN_emission_processing.ncl, change to all domains.
- Timestep:
- Decrease propotionally
- Radiation timestep should coincide with the finest domain resolution (1 minute per km dx), but it usually is not necessary to go below 5 minutes. All domains should use the same value, so that radiation forcing is applied at the same time for all domains.
- Other namelist.wrf settings specific for domains < 3km res
- `&domains`
- `smooth_option = 0`
- `&physics`
- `cugd_avedx = 3`
- `smooth_option = 0`
- `cu_rad_feedback = .false.`
- `cu_diag = 0`
- `slope_rad = 1`
- `topo_shading = 1`
- `&dynamics`
- `non_hydrostatic = .false.`
## To run with cumulus parameterisation off
`Namelist.chem`
- `cldchem_onoff = 1`
- `chem_conv_tr = 0` (subgrid convective transport)
- `conv_tr_wetscav = 0` (subgrid convective wet scavenging)
- `conv_tr_aqchem = 0` (subgrid convective aqueous chemistry)
`Namelist.wps`
- Resolution < 5 km
`Namelist.wrf`
- Resolution < 5 km
- `cu_physics = 0` (cumulus parameterization off)
- `cugd_avedx = 3` (number of grid boxes over which subsidence is spread)
`Master.bash`, turn off nudging
- `s/GRIDFDDA/0/g`
## Changes for WRFChem4
Select updates for WRFChem4
- Bug fixes:
- NOAH land surface scheme
- Thompson microphysics scheme
- Boundary layer and surface schemes from MYNN.
- Chemical reaction rate constant for reaction: SO2 + OH -> SO4
- Dust < 0.46 microns contribution to AOD.
- Dust and salt bin contributions to AOD.
- Urban physics.
- Fires (`module_mosaic_addemiss.F`).
- glysoa not needed as no longer uses to_toa variable which has the summation error (`module_mosaic_driver.F`).
- `GEOGRID.TBL` within WPS4/geogrid is a hard copy of the `GEOGRID.TBL.ARW_CHEM` including erod.
- New defaults
- Hybrid sigma-pressure vertical coordinate.
- Temperature variable is now moist theta.
- Method to compute vertical levels, smooth variation of dz.
- Various improved options available:
- RRTMK (`ra_sw_physics = 14`, `ra_lw_physics = 14`) improves RRTMG
## To run with WRFChem3.7.1 or WRFChem4.2
Within `config.bash`:
- Replace all instances of 4.2 with 3.7.1, or vice-versa.
- Use the appropriate geography files, being either `/nobackup/WRFChem/WPSGeog3` or `/nobackup/WRFChem/WPSGeog4`.
Within `namelist.wps.blueprint`:
- For the `geog_data_res` variable (within `&geogrid`), use `'modis_30s+30s'` for WRFChem3.7.1 and use `'default'` for WRFChem4.2.
Within `namelist.wrf.blueprint`:
- Remove the `force_use_old_data` variable (within `&time_control`) for WRFChem3.7.1 and have it set to `T` for WRFChem4.2.
- For the `num_metgrid_soil_layers` variable (within `&domains`), use `4` for WRFChem3.7.1 and `3` for WRFChem4.2.
- For the `num_soil_layers` variable (within `&physics`), use `4` for WRFChem3.7.1 and `3` for WRFChem4.2.
- For the `num_land_cat` variable (within `&physics`), use `20` for WRFChem3.7.1 and `21` for WRFChem4.2.
## To run with a diurnal cycle
Choosing the diurnal cycle:
- There are several different diurnal cycles in WRF_UoM_EMIT.
- They are contained in the `emission_script_data*.ncl` files. Whichever of these files is named emission_script_data.ncl will be the diurnal cycle that is read by `MAIN_emission_processing.ncl`. The current `emission_script_data.ncl` is a copy of `emission_script_data_EU.ncl`.
- EU = European diurnal cycles based on Olivier et al 2003
- EX = Exaggerated diurnal cycle with 99% of emissions during daytime
- QH = Qinghua diurnal cycle
- Change settings in `MAIN_emission_processing.ncl`
- `time_offset`
- `oc_om_scale`
- To check if the diurnal cycle application was successful, run the following python script, which should be within WRF_UoM_EMIT, and is automatically linked to your run folder during pre.bash. Take a copy of the file from the following location if you don’t have it:
```bash
python plot_wrfchemi.py
```
## To run with NAEI emissions
[Follow the guide created by Ailish Graham](https://github.com/wrfchem-leeds/WRFotron/blob/master/guides/Guide_to_NAEI_emissions_AG.pdf).
## To add (or remove) variables to wrfout files
- First, check whether the variable is in the Registry. If it isn't, then add it using the steps [here](https://www.climatescience.org.au/sites/default/files/WRF_gill_registry.pdf).
- Then, if you're running with chemistry edit the file `iofields.chem`, otherwise edit the file `iofields.met`, which are both in WRFotron.
- There are lines of text such as:
```bash
+:h:0:ccn1,ccn2,ccn3,ccn4,ccn5,ccn6
```
- The + is to add or - is to remove a variable.
- The h is for the history (wrfout) stream. Can have history, restarts, or both.
- The 0 is for the stream number. Generally, stream numbers of 10-24 are okay, and avoid 22-23.
- Then list the variables.
## To include upper boundary conditions
- Turn on the `have_bcs_upper` boolean within `namelist.chem.blueprint`.
- Set the lowest pressure level where the upper boundary concentrations are overwritten: `fixed_ubc_press` variable, default is 50 (hPa).
- Provide 2 data files: a climatology for tropopause levels (`clim_p_trop.nc`) and an input file with upper boundary conditions for gas species (`fixed_ubc_inname`).
- Climatologies for 4 different time periods derived from WACCM RCP simulations are [here](https://www2.acom.ucar.edu/wrf-chem/wrf-chem-tools-community). A direct download link is [here](http://www.acom.ucar.edu/wrf-chem/UBC_inputs.tar). Within here is the `clim_p_trop.nc` file, along with the 4 different climatology time periods: `ubvals_b40.20th.track1_1950-1959.nc`, `ubvals_b40.20th.track1_1980-1989.nc`, `ubvals_b40.20th.track1_1996-2005.nc`, and `ubvals_rcp4_5.2deg_2020-2029.nc` where the years used to produce the climatology are specified in the file names.
- Copy the climatology files over to each run folder by adding the following to the bottom of `pre.bash`:
```bash
msg "bringing over upper boundary condition files"
cp /nobackup/${USER}/where_you_place_these_files/{clim_p_trop.nc,ubvals_b40.20th.track1_1996-2005.nc} .
```
- More information is [here](https://www2.acom.ucar.edu/sites/default/files/wrf-chem/8A_2_Barth_WRFWorkshop_11.pdf) and within Chapter 2 [here](https://github.com/wrfchem-leeds/WRFotron/blob/master/guides/MOZCART_UsersGuide.pdf).
## To run with the chemistry option T1-MOZCART (chem_opt = 114)
- Replace the contents of `mozbc.inp` with that from `mozbc.inp.blueprint_114_mz4`.
- Delete ONIT from boundary condition input file (i.e. `moz0001.nc`), as this is not currently in our version of WRFChem.
- Delete N2O from boundary condition input file (i.e. `moz0001.nc`), as this is not in the MOZBC netcdf file.
- Make the following changes to `namelist.chem.blueprint`:
- `cldchem_onoff = 0`, was previously 1.
- `biomass_burn_opt = 4`, was previously 2.
- Make the following change to `namelist.wrf.blueprint`:
- `auxinput6_inname = 'wrfbiochemi_d', ! biogenic emission filename`, was previously `'wrfbiochemi_d_'`.
- More information is [here](https://github.com/wrfchem-leeds/WRFotron/blob/master/guides/T1-MOZCART-UsersGuide-27April2018.pdf).
## Benchmarking and Testing
- Run together automatically by submitting `. benchmark_and_test.bash`.
- This runs short (48 hour) simulations per season over the default domain and evaluates against either the China measurements or from OpenAQ.
- To select which measurement set the model is evaluated against, set the corresponding Boolean in `benchmark.py`.
- They run from the output directory, and can both be run manually using `qsub benchmark.bash` and `qsub tests.bash`.
- To discuss these further and suggest improvements, see the discussions for them: [Benchmarks](https://github.com/wrfchem-leeds/WRFotron/discussions/34) and [Tests](https://github.com/wrfchem-leeds/WRFotron/discussions/33).
## Run WRFChem for long-term scenarios (Climate WRF)
- Use a version of WRFChem compiled with climate functionality.
- Use manual compilation.
- After running `./configure` and creating the `configure.wrf` file within a clean WRFChem folder, edit the `configure.wrf` file to add `-DCLWRFGHG \` to line 212 (after `-DNETCDF`).
- The flag CLWRFGHG compiles green house gases computation (for CAM ra_lw/sw).
- Run the compilation (`./compile em_real >& log.compile`).
- Within the `WRFChem/run` folder, link one of the scenarios e.g., `ln -sf CAMtr_volume_mixing_ratio.RCP4.5 CAMtr_volume_mixing_ratio`.
- More information here:
- [Slides from Rajesh Kumar, NCAR](https://github.com/wrfchem-leeds/WRFotron/blob/master/guides/Future_AQ_steps_WRF-Chem.pdf).
- [Setup wiki](http://www.meteo.unican.es/wiki/cordexwrf/SoftwareTools/ClWrf).
- [Slides: clWRF: Hands-On tasks](http://www.xn--llusfb-5va.cat/curriculum/ConDocs/LluisCORWESHandsOn_tasks.pdf).
- [CLWRF (CLimate WRF)](https://www.meteo.unican.es/en/software/clwrf).
- [NCAR technical note](http://dx.doi.org/10.5065/D6445JJ7).
## To change the MOZBC boundary conditions
- Change the data reference in [`pre.bash`](https://github.com/wrfchem-leeds/WRFotron/blob/master/pre.bash#L201-L208).
- Change `mozbc.inp` to be a copy of the corresponding MOZBC blueprint in the namelists folder, e.g., to use WACCM instead of MZ4 make [`mozbc.inp`](https://github.com/wrfchem-leeds/WRFotron/blob/master/mozbc.inp) a copy of [`mozbc.inp.blueprint_202_waccm`](https://github.com/wrfchem-leeds/WRFotron/blob/master/namelists/mozbc.inp.blueprint_202_waccm).
## Heterogeneous chemistry with `chem_opt = 202`
- Follow instructions [here](https://github.com/wrfchem-leeds/WRFotron/tree/master/guides/heterogeneous_chem_WRFChem_guide.pdf).
## Misc.
- To see details of all the variables, see the registry files e.g. for chemistry: `WRFChem{version}/Registry/registry.chem`
- To see the equations used for your mechanism, see the file: `WRFChem{version}/chem/KPP/mechanisms/{mechanism}/{mechanism}.eqn`
- To see the variable mappings between the mechanism and WRFChem (which can have different names), see the file: `WRFChem{version}/chem/KPP/mechanisms/{mechanism}/{mechanism}.equiv`
- To see the rate constants used per equation, see the file (note, that these match the equations in sequential order e.g., the final rate constant for equation 346 matches to equation {S060}): `WRFChem{version}/chem/KPP/mechanisms/{mechanism}/{mechanism}_Rates.f90`