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

observation nudging with dropsonde data

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

I am trying to use the observation nudging scheme in WRF with some dropsonde observations we have over the Arctic. I tested with a single sounding in a single domain with WRF3.8.1. The sounding data was read in by WRF successfully (such as lat/lon, number of levels) but no nudging is done in the WRF run (by comparing runs with obs_nudge_opt=1 vs 0). I did some more modification to the subroutine errob in phys/module_fddaobs_rtffda.F and the nudging seems to work properly for my case (multiple sounding as well) but there are still issues on communication between processors that might cause troubles for other RTFDDA cases. I guess this is a bug report but I don't have a perfect solution yet. I'd appreciate any advice on how to fix this bug. Some more details from my tests are listed below.

I tested on the phys/module_fddaobs_rtffda.F and found out the issue might be related to the values of rko and errf(9,:). The variable rko is not calculated and set to zero together with errf(9,:) in the subroutine errob. On the processor that is handling the gridboxes including the location of the dropsonde, there are still several tiles (but I guess the CPUs on my cluster treats these tiles sequentially). In my case, the location of the dropsonde is not on the first tile, so MP_LOCAL_DUMMASK(N) is set to .False. in the first tile and rko is not computed. At the end of errob, rko is set to 0, the value of errf(9,:). When the second tile is computed, although MP_LOCAL_DUMMASK(N) is .True., but the check for abs(rko(n)+99).lt.1 failed, so rko is still not calculated. That's why rko and errf(9,:) are all zeros and no actual nudging is done in the subroutine nudob.

I have to add the following changes to errob to have the nudging active:
(1) change the check for rko(n) from
if( abs(rko(n)+99).lt.1. .or. abs(rko(n)).lt.1. )
(2) Set MP_LOCAL_DUMMASK(N) to .True. instead of using the returned value of TILE_MASK.
I know the second change is not right because the interpolation is messed up and the resulting rko are garbage (over 8e5) on tiles that do not include the location of the sounding ( when TILE_MASK(IOB, JOB, its, ite, jts, jte) is .False. ). But the rko and errf(9,:) are still 0 if MP_LOCAL_DUMMASK is not set true. I guess there are still some value communication issues between processors and tile handling. But I am not sure how to do it properly. Any advice?

Hi Zheng,
I would like to apologize for the delay on this topic. It seems to have been overlooked as needing approval. Are you still having problems with this, or have you moved past it now?
I think the problems are still there when numtile are set to larger than 1 in the namelist.input. I think the phys/module_fddaobs_rtfdda.F might still has problem correctly handing multiple tiles. If I set the numtile to 1 in the namelist, the observation nudging works fine.

Can you attach the files I would need to run this? I would need the namelist.input file, and any input files you are using. I'll try to run this on my end so to try to repeat the problem. Thanks!
Thanks for the response.
Just a update of this problem.
I used numtiles=1 in the namelist and the nudging run is running correctly.
This also points to the issue of the code handling multiple tiles (with OPENMP).