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

On the calculation of NOAHRES

Miao_Yang

New member
Hi
I have a question about the energy budget.
I used the NOAH LSM to calculate a particular sunny day in Beijing (d03:100*100, 3km). Based on the formula in module_sf_noahdrv.F for NOAHRES, I extracted the relevant parameter from the wrfout file and calculated. It turns out that the calculation results are quite different from NOAHRES. Can you help me to see what is going on?

I have listed the python code used for the calculations and the output.

---------------- PYTHON CODE ----------------
import netCDF4 as nc
import numpy as np

ds = nc.Dataset(r'G:\BJ01\merged_d03_2018-08-09_00_00_00.nc', mode="r")

for n in range(16, 40):
i = 50
j = 60
swdown = ds.variables['SWDOWN'][n, i, j]
albedo = ds.variables['ALBEDO'][n, i, j]
glw = ds.variables['GLW'][n, i, j]
emiss = ds.variables['EMISS'][n, i, j]
hfx = ds.variables['HFX'][n, i, j]
grdflx = ds.variables['GRDFLX'][n, i, j]
lh = ds.variables['LH'][n, i, j]
tsk = ds.variables['TSK'][n, i, j]
stbolt = 5.67/np.power(10, 8)
noahres = ds.variables['NOAHRES'][n, i, j]

print(swdown * (1 - albedo) + glw * emiss - hfx + grdflx - lh - emiss * stbolt * np.power(tsk, 4) - noahres)
print(f'noahres={noahres}')

---------------- CALCULATION RESULTS ----------------
-25.04837340256296
noahres=-0.415679931640625
-21.04258615853746
noahres=-0.3739013671875
-19.468577228906327
noahres=-0.269622802734375
-11.782948019316336
noahres=-0.274871826171875
-9.304868471384282
noahres=-0.092315673828125
-7.2644814604879
noahres=-0.048675537109375
-17.47009774951988
noahres=-0.13720703125
-33.498096155674375
noahres=-0.02728271484375
-43.5351843476202
noahres=-0.053863525390625
-27.63152140444288
noahres=-0.132659912109375
-11.279261508508966
noahres=-0.177093505859375
2.06485172244345
noahres=-0.24554443359375
8.751112068936209
noahres=-0.260955810546875
8.979251867863354
noahres=-0.120635986328125
3.9109820784632348
noahres=-0.042266845703125
-7.625464784312271
noahres=-0.04638671875
-28.368987386034973
noahres=-0.185272216796875
-45.63328096601629
noahres=-0.46075439453125
-53.523255352269416
noahres=-0.646209716796875
-44.916875131055065
noahres=-0.176727294921875
-42.84284334066024
noahres=-0.1722412109375
-37.42046989586572
noahres=-0.118896484375
-28.21861862158545
noahres=-0.09820556640625
-20.859836233445833
noahres=-0.077667236328125
 
I found that if albedo = ds.variables['ALBEDO'][n, i, j] is replaced with albedo = ds.variables['ALBBCK'][n, i, j] and non-city sites are selected, ‘swdown * (1 - albedo) + glw * emiss - hfx + grdflx - lh - emiss * stbolt * np.power(tsk, 4) - noahres’ calculates to almost zero. But if choose urban sites, the result is still in very poor.
 
1. Did you activate the urban physics option (>0)? If so, noahres is only computed for the non-urban portion of each grid from the Noah LSM which does not include the urban part.
2. The ALBEDO is a urban_fraction weighted averaged albedo by including non-urban and urban parts for each grid, which is not used in the noahres calculations if urban physics is activated. ALBBCK is used for the Noah LSM part to compute noahres for non-urban portion. The same for other land surface energy fluxes (LH, SH, GRDFLX, TSK, etc.). You can take a look at the noah driver code: WRF/phys/module_sf_noahdrv.F at master · wrf-model/WRF
 
Yes, I activated the urban physics option (SLUCM), and thank you very much for your answer!
But I'm still a bit confused. The formulas I'm using in python have units of W/m-1 for each part. even if these parameters are for non-urban parts for each grid, the results obtained after putting in the surface energy balance equation should be close to 0. Why is it that after I change ALBEDO to ALBBCK, the results are still very poor?
 
If you look at the grid-level energy balance, the residual should be very small (at grid-level, you do not need to change ALBEDO to ALBBCK in calculating energy balance). The energy residual is: res = swdown * (1 - albedo) + glw * emiss - hfx - grdflx - lh - emiss * stbolt * np.power(tsk, 4) . Note: you need to minus GRDFLX not plus. Another note is that what is the value of emiss in your output file? It looks like the model uses 0.98 for emissivity for grid that involves urban portion: WRF/phys/module_sf_noahdrv.F at master · wrf-model/WRF
 
Top