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

Mandatory data WPS, T2m, RH2m, U10m and V10m

AndrewLowry

New member
I wanted to double check the mandatory data required for WPS. From the user manual it states that we must supply T2m, RH2m (or SpecHum 2m), U10m, and V10m. However when I look at the METGRID.TBL that is supplied with the code (WPS/metgrid/METGRID.TBL.ARW at master · wrf-model/WPS) there are no entries that use T2m, RH2m (or SpecHum 2m), U10m, and V10m data and consequently there are no entries in my met_em.d* files. Are they really necessary?
I looked through all the METGRID.TBLs in the github folder and I could not find any that had entries for these four variables.
I've attached a copy of my vtable and the output from ungrib.log, which show how these values are being stored in the intermediate files.

This leads to, where in real are these variables used, and are they necessary? I see in the output from real.exe (wrfinput_d0*) that these fields (T2, Q2, U10, and V10) have been created, but I can't work out where this happens in the wrf code? I see in module_initialize_real.F they come from the array grid, e.g. grid%t2, but I can't work out where this is initialized.
 

Attachments

  • ungrib.log.txt
    9.2 KB · Views: 1
  • Vtable.txt
    3.3 KB · Views: 2
Hi,
If you look at the Vtable, you can see the following

Code:
GRIB1| Level| From |  To  | metgrid  | metgrid    | metgrid                                  |GRIB2|GRIB2|GRIB2|GRIB2|

Param| Type |Level1|Level2| Name     | Units      | Description                              |Discp|Catgy|Param|Level|

-----+------+------+------+----------+------------+------------------------------------------+-----------------------+
 
 11 | 100  |   *  |      | TT        | K          | Temperature                              |  0  |  0  |  0  | 100 |
  33 | 100  |   *  |      | UU       | m s-1      | U                                        |  0  |  2  |  2  | 100 |
  34 | 100  |   *  |      | VV       | m s-1      | V                                        |  0  |  2  |  3  | 100 |
  52 | 100  |   *  |      | RH       | %          | Relative Humidity                        |  0  |  1  |  1  | 100 |
   7 | 100  |   *  |      | HGT      | m          | Height                                   |  0  |  3  |  5  | 100 |
  11 | 105  |   2  |      | TT       | K          | Temperature       at 2 m                 |  0  |  0  |  0  | 103 |
  52 | 105  |   2  |      | RH       | %          | Relative Humidity at 2 m                 |  0  |  1  |  1  | 103 |
  33 | 105  |  10  |      | UU       | m s-1      | U                 at 10 m                |  0  |  2  |  2  | 103 |
  34 | 105  |  10  |      | VV       | m s-1      | V                 at 10 m                |  0  |  2  |  3  | 103 |

which shows that the metgrid variable name for, say, Temperature at 2m is TT, and the metgrid name for Temperature (which is 3d - all layers above the surface) is also TT. Therefore, all layers, including the surface (or 2m) get lumped in to the TT variable, and in the real or wrf code (I'm also not exactly sure where), it understands that the bottom layer is the 2m temperature. It actually is important to have the values for these 2m and 10m variables - especially for surface physics, etc.
 
Hi, thanks it makes a lot more sense now. I ran int2nc on one of my intermediate files and there they are at level 200100 and the values all match up between the input grib files, intermediate files, and metgrid files (at the lowest level). Given your answer, I believe real.exe gets this information from WRF/dyn_em/module_initialize_real.F in the following code block for temperature (the other variables are immediately above or below):
IF ( grid%t_gc(i_valid,1,j_valid) .EQ. -1.E30 ) THEN
DO j = jts, MIN(jte,jde-1)
DO i = its, MIN(ite,ide-1)
IF ( skip_middle_points_t ( ids , ide , jds , jde , i , j , em_width , hold_ups ) ) CYCLE
grid%t_gc(i,1,j) = grid%t_gc(i,k,j)
END DO
END DO
config_flags%use_surface = .FALSE.
grid%use_surface = .FALSE.
WRITE ( a_message , * ) 'Missing surface temp, replaced with closest level, use_surface set to false.'
CALL wrf_message ( a_message )
END IF
Which is then assigned to t2 at:
DO j = jts, min(jde-1,jte)
DO i = its, min(ide-1,ite)
IF ( skip_middle_points_t ( ids , ide , jds , jde , i , j , em_width , hold_ups ) ) CYCLE
grid%t2(i,j)=grid%t_gc(i,1,j)
END DO
END DO
 
Top