Scheduled Downtime
On Friday 21 April 2023 @ 5pm MT, this website will be down for maintenance and expected to return online the morning of 24 April 2023 at the latest

Preparing landuse data for running WRF with the BEP urban scheme

This post was from a previous version of the WRF&MPAS-A Support Forum. New replies have been disabled and if you have follow up questions related to this post, then please start a new thread from the forum home page.


New member
Hi All,

I have a few questions about correctly preparing geo_em*.nc and wrfinput* files for running WRF with the BEP urban scheme (sf_urban_physics = 2), both with single-urban-class and 3-urban-classes scenarios.

The urban fraction and classes are derived from the 2015 30-m Landsat data for North America ( Within WPS and WRF, I'm working with the MODIFIED_IGBP_MODIS_NOAH table.

My procedure is:

a) Run geogrid.exe to generate geo_em.d0[123].nc. I provide NLCD2011 and NUDAPT44 data at this stage. The resulting files inclued non-zero FRC_URB2D and URB_PARAM fields.
b) Extract urban fractions from the 2015 30-m TIFF data. I update FRC_URB2D in geo_em.d0[123].nc. I also update LU_INDEX to values 31, 32, and 33 for grid cells where I identify 3 urban classes (low density residential, high density residential, and commercial/industrial).
c) Run metgrid.exe to generate met_em.*.nc.
d) Run real.exe to generate wrfinput_d0[123] and wrfbdy_d01.

My questions are:

1. When I run real.exe with num_land_cat=21 (not adjusting for classes 31, 32, 33 that I added), I see that the resulting wrfinput_d0[123] have all urban multi-classes (what used to be 31, 32, 33 in geo_em* and met_em*) are now collapsed into a single urban class 13. However, if I set num_land_cat=33 and run real.exe, urban multi-classes are again collapsed into 13, and all other (non-urban) classes in the domain are equal to 1. That can't be correct, right? What is the correct way to run real.exe here to preserve urban multi-classes from met_em* files? Do I perhaps need to modify LU_INDEX in wrfinput* files rather than geo_em* files?

2. How does BEP determine where are the 3 urban classes. Is it from LU_INDEX or from FRC_URB2D? If the latter, should I not bother with multi-classes in LU_INDEX?

3. How to correctly run BEP with a single urban class? Do I need to modify URBPARM.TBL to include parameters only for one class?

Thank you!
Please take a look at the codes below ( in module_initialize_real.F). This is how REAL program handles urban landuse type.

2981 ! Split NUDAPT Urban Parameters
2983 IF ( ( config_flags%sf_urban_physics == 1 ) .OR. ( config_flags%sf_urban_physics == 2 ) .OR. ( config_fl ags%sf_urban_physics == 3 ) ) THEN
2984 DO j = jts , MIN(jde-1,jte)
2985 DO i = its , MIN(ide-1,ite)
2987 IF ( grid%FRC_URB2D(i,j) .GE. 0.5 .AND. &
2988 (grid%ivgtyp(i,j).NE.13 .AND. grid%ivgtyp(i,j).NE.24 .AND. grid%ivgtyp(i,j).NE.25 .AND. grid%ivgtyp(i,j).NE.26)) grid%ivgtyp(i,j)=13
2990 IF ( grid%FRC_URB2D(i,j) .GE. 0.5 .AND. &
2991 grid%ivgtyp(i,j).NE.1 ) grid%ivgtyp(i,j)=1
2992 ENDIF
2994 IF ( grid%FRC_URB2D(i,j) == 0. ) THEN
2996 (grid%ivgtyp(i,j)==24 .OR. grid%ivgtyp(i,j)==25 .OR. grid%ivgtyp(i,j)==26 .OR. grid%ivgtyp( i,j)==13) ) grid%FRC_URB2D(i,j) = 0.9
2997 IF ( MMINLU == 'USGS' .AND. grid%ivgtyp(i,j)==1 ) grid%FRC_URB2D(i,j) = 0.9
2998 ENDIF

(2) If urban landuse is 31, 32, 33, then BEEP takes them as low, high or industrial based on UTYPE_URB2D. Please see the code below (in module_sf_noahmpdrv.F)

IF( IVGTYP(I,J) == ISURBAN_TABLE .or. IVGTYP(I,J) == 31 .or. &
IVGTYP(I,J) == 32 .or. IVGTYP(I,J) == 33 ) THEN

UTYPE_URB = UTYPE_URB2D(I,J) !urban type (low, high or industrial)

(3) I don't think you need to modify anything.
Thank you, Ming.

The snippet from module_initialize_real.F confirms what I observed, that real.exe collapses the urban land-use classes to 13.

2987 IF ( grid%FRC_URB2D(i,j) .GE. 0.5 .AND. &
2988 (grid%ivgtyp(i,j).NE.13 .AND. grid%ivgtyp(i,j).NE.24 .AND. grid%ivgtyp(i,j).NE.25 .AND. grid%ivgtyp(i,j).NE.26)) grid%ivgtyp(i,j)=13

At what point do you then set the urban classes to 31, 32, and 33 in LU_INDEX? Not before running real.exe, because real.exe collapses them all to 13.

I tried setting them in wrfinput_d0* directly, but in that case wrf.exe complains that it has too many land categories. Setting num_land_cat to 33 in namelist.input also didn't help--now wrf.exe complained about num_land_cat being too high.

What worked for me is to let LU_INDEX=13 for all urban grid cells, have FRC_URB2D in wrfinput_d0*, and define the 3 classes in URBPARM.TBL. However, I'm still not clear whether this is the correct way to do it.

> (3) I don't think you need to modify anything.

In that case, how do you run BEP with a single class? The only way I got it to run is by setting all 3 classes in URBPARM.TBL to use the same parameters.
Hi Milan,

I think you can try to modify LU_INDEX and IVGTYP in the wrfinput
cuz in the src codes module_sf_urban.F the model would read IVGTYP to define 31,32,33
For more detail of the codes, I recommend a file.

Hope it would help. I am also trying to run the BEP model in WRF. I would update if there is any progress.