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

Closing NOAH surface heat budget

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
Dear members and developer,

I am trying to close the NOAH_LSM heat budget for quite a while right now and I'm quite puzzled with my results. Any hindsight on where is my reasoning false would be more than appreciated !

Related posts are and They provide useful information but did not help me in closing my heat budget.

From the NOAH routines (sf_noahdrv) the surface heat budget is the computed as such:
noahres(i,j) = ( solnet + lwdn ) - sheat + ssoil - eta & - ( emissi * STBOLT * (t1**4) ) - flx1 - flx2 - flx3

Having all the corresponding terms as output should bring us to an exact equity. All the variables can be output when specified correctly in the registry following the appropriate mapping (variables in capital letter correspond to output variables in wrfout*):
  • noahres -> NOAHRES (change to "rh" instead of "h")
  • sheat -> HFX
  • ssoil -> GRDFLX
  • eta -> LH
  • emissi -> EMISS
  • t1 -> TSK
  • flx1,flx2,flx3 -> Need to add new diagnostic variables to be output

( solnet + lwdn ) - ( emissi * STBOLT * (t1**4) )
should be nothing else than the net radiations (according to my understanding).

I tried to close my heat budget using the three following combinations of variables. All lead to very similar results, but without closing my surface heat flux... Hereafter seb stand for surface energy balance which should be zero according to my understanding of the situation.

Test 1
netshort = SWDNB - SWUPB 
netlong = LWDNB - LWUPB
netrad = netshort + netlong
seb = netrad - NOAHRES + GRDFLX - HFX - LH

Test 2 (Kelly Werner proposed system in
gsw = (1-ALBEDO) * SWDOWN
glw = GLW
lwupflux = np.power(TSK,4) * STBOLT
netlw = EMISS*(glw-lwupflux)
netrad = gsw + netlw        
seb = netrad + GRDFLX -HFX -LH

Test 3 (Mimicking equation in NOAH):
tskterm = EMISS * STBOLT * np.power(TSK,4)
netrad = (1-ALBEDO) * SWDNB + EMISS * LWDNB - tskterm        
seb = netrad - NOAHRES + GRDFLX - HFX - LH

The attached figures might help you to understand where is the error in my reasoning. Indeed, the budget is closed most of the time but peaks occur at sunrise and at the beginning of the afternoon.

I have also ran a subset of my simulations with FLX1,2 and 3 as output to check if they were the culprits. Even if they account for discrepancies where there is snow on the ground or when the skin temperature is below zero they do not help to close my energy budget completely... Especially they don't remove the peaks displayed on the attached figure.

Any hints or hindsights regarding a mistake in my reasoning would be much appreciated :) ! Or even just comments of people that did manage to close their energu budgets when they attempted to :)

Many thanks in advance,


PS : It is suggested in one of the related posts that the error might arise from accumulated and instantaneous variables. However, up to my understanding, all these variables are instantaneous variables.


  • sfc_budget_nonzero.png
    224.3 KB · Views: 929
I will talk to our expert and get back to you once I have the answer. Thanks for your patience.
Your understanding of the surface energy budget is correct. I talked to our expert about this issue. He agrees that theoretically the energy residual (balance) should be zero. But due to the linearization and some other issues in parameterizing different energy terms, this residual term is actually only close to zero (i.e., a few W/m2). However, he has no explanation why the peak values could be so large as shown in your plot.
Can you plot the variable "noahres" and check whether this variable also shows similar feature? Please keep me updated about the results. Thanks.

First of all, I wish to sincerely thank you for your time (and the one of your colleague) !

I'm happy to hear to I did not do something wrong at first sight :)

You will find below one figure corresponding to the one attached with my first message with NOAHRES plotted as grey crosses "+". For readability it corresponds to another Y-scale (the one to the right). NOAHRES oscillates between 0 and -0.5 W/m^2. Please note that NOAHRES goes to 0 every 3hrs which corresponds to the duration of each of my simulations since in original WRF Registry NOAHRES is only "h" and not "rh". I have proposed this slight modification on the WRF github repository.

As you can see on this figure NOAHRES doesn't appear to have similar peaks. Noahres appears to be kind of smooth and not to "react" to observed peaks...

At some point I wondered if this could be a physical phenomenon since It does not occur every morning and afternoon. For example on 12/11/2016 the morning peak does not occur ! In another simulation, for one specific day, the peaks dot not appear for one complete day. Also these peaks do not corresponds to only one output time but they seem to last in time, especially in the afternoon (40-60 minutes with non neglectable values).


  • sfc_budget_nonzero_ILL_06122016.png
    264.6 KB · Views: 921
The surface energy budget involves various factors such as radiation, sensible and later heat fluxes, etc. radiation is heavily affected by clouds, while sensible and latent heat fluxes are influenced by soil, surface layer and PBL physics. AT present I can only say that many factors can contribute to the temporal variation of surface energy budget, but I don't have a definite answer to the feature you have seen in the specific case. We do encourage our users to conduct further in-depth exploration of the model behavior and keep us updated about any improvements.