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

Maximum updraft helicity in the Southern Hemisphere

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 run MPAS with a convection-allowing mesh (60 to 3 km mesh) with the ~3 km area over South America. The 1-h maximum updraft helicity variable in the diag.*.nc files appears to be accounting for the maximum value of updraft helicity, but in the Southern Hemisphere cyclonic supercells are associated with negative updraft helicity, so that the 1-h accumulated updraft helicity should be searching for minima instead of maxima. I took a look at the post-processing code (convective_diagnostics.F) and it appears to be the case, indeed. The maximum value of updraft helicity is being assigned for each cell (see code line below).

updraft_helicity_max(iCell) = max( updraft_helicity_max(iCell),uph)

Is my assessment right? And, if so, is there a way to search for the minima in updraft helicity field when in the Southern Hemisphere?


Bruno Ribeiro
Hi Bruno,

Yes, there is a northern hemisphere bias in the updraft helicity diagnostic! Additionally, we do observe anticyclonically rotating updrafts (uncommon but not rare) that this diagnostic would miss (e.g. splitting supercells).

You have a couple of options to address this issue.

(1) If you want to track cyclonically rotating updrafts you can multiply the vorticity by sign(1.0, latitude). Specifically, you would change lines 177 and 178 (MPAS-V7) in MPAS-Model/src/core_atmosphere/diagnostics/convective_diagnostics.F, which currently reads

updraft_helicity(k,iCell) = max(0.,0.5*(w(k,iCell)+w(k+1,iCell))) &
* max(0.,updraft_helicity(k,iCell)/areaCell(iCell))


updraft_helicity(k,iCell) = max(0.,0.5*(w(k,iCell)+w(k+1,iCell))) &
* max(0.,sign(1.0,latCell(iCell))*updraft_helicity(k,iCell)/areaCell(iCell))

You would also need to add a declaration to the beginning of the subroutine:

real (kind=RKIND), dimension:)), pointer :: latCell

and set the pointer to latCell in the obvious code block further down

call mpas_pool_get_array(mesh, 'latCell', latCell)

(2) If you want to capture both cyclonically rotating and anti-cyclonically rotating storms, you can compute the updraft helicity using the absolute value of the vorticity. This would place lines 177 and 178 with

updraft_helicity(k,iCell) = max(0.,0.5*(w(k,iCell)+w(k+1,iCell))) &
* max(0.,abs(updraft_helicity(k,iCell))/areaCell(iCell))

In this case you would not be able to distinguish between cyclonically and anti-cyclonically rotating updrafts.

(3) If you wanted to distinguish between cyclonic and anticyclonic storms you would need to add a separate diagnostic, the minimum updraft helicity. There are instructions on how to do this in the MPAS tutorial presentations that can be found online at

The new diagnostic would look like the existing diagnostic (in terms of coding), so I believe it would be very easy to add the new array for the minimum and add the evaluation to the place where the max is currently evaluated.

One of these possibilities should go into the next release, so if you choose to implement one of these perhaps you can issue a pull request?

Bill Skamarock
Hi Bill,

Thanks for your detailed response and for providing these code options! I will try to make changes in the code and keep you informed. I personally think option 3 (creating an updraft helicity minimum) is a good one, because it would deal with the Southern Hemisphere issue and also provide an option for those interested in diagnosing anticyclonic supercells in the Northern Hemisphere.