-
Notifications
You must be signed in to change notification settings - Fork 145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: passing istatus set for vertislevel and vertisheight mpas_atm #761
Conversation
fixes ##756 state with VERTISSURFACE was being converted to VERTISHEIGHT but given a failing istatus so get_close_state was "far away"
@hkershaw-brown todo: thanks to Matt Wilson in release notes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm curious as to why the quantities QTY_VERTICAL_VELOCITY and QTY_EDGE_NORMAL_SPEED use different geometric heights than all other quantities that use zout(:) = zGridCenter(vert_level, cellid)
.
DART/models/mpas_atm/model_mod.f90
Lines 5019 to 5021 in f686787
if ( quantity == QTY_VERTICAL_VELOCITY ) zout(:) = zGridFace(vert_level, cellid) | |
if ( quantity == QTY_EDGE_NORMAL_SPEED ) zout(:) = zGridEdge(vert_level, cellid) | |
istatus(:) = 0 |
This is not really related to the contents of this PR, and I'm sure there's a science explanation behind this
Approved
its a good question Marlee, and it is great to point out things that don't immediately make sense. the short answer is, these are the dimensions of W (QTY_VERTICAL_VELOCITY)
cell faces -> zGridFace You'll see this in lot of models (POP, MOM6, MPAS, MITgcm), where various variables are on the edges vs center of cells, and you also might see "layer" or "interface" for the vertical location of the variable. It would get to get someone (one of the dares scientists) to do a little tech talk on the various grids and terminologies (A grid, B grid, etc). Here is the dimensions in the file: netcdf init { (note my favorite dimension in this is TWO)
mpas model_model doesn't use the state structure for its variable info, so it doesn't just query the dimension. That is why the if statements are checking the QTY directly. You can checkout the mpas refactor branch to see mpas using the state structure rather than its own progvar vector structure. |
Description:
MPAS_ATM user reported that 2m and 10m fields in the state were not being updated by filter when they had vertical localization switched on.
In
get_close_state
, state with VERTISSURFACE was being converted to VERTISHEIGHT but given a failing istatus so the distance was "far away" (1e9), and thus not updated in the assimilation.This pull request adds a passing istatus to
convert_vert_distrib_state
to the cases that did not set an istatus:This istatus was a problem for
get_close_state
where theconvert_vert_distrib_state
is used, but not forconvert_vertical_state
(since that istatus is ignored).The mpas state is in height (m) so the 3D state variables (non-surface) don't enter the case statement localizing in height (ztypein == ztypeout).
Note I added a note in case (VERTISSCALEHEIGHT) line 5050 because
ztypein == VERTISSURFACE
can never be .true. at that point in the code. I can pull this out and make a separate issue to keep track of that.Fixes issue
fixes #756
Types of changes
Documentation changes needed?
Tests
I compared the state (no inflation) t2m variables before and after assimilation.
no difference = not updated
difference = updated.
Checklist for merging
Checklist for release
Testing Datasets
/glade/derecho/scratch/hkershaw/DART/Bugs/mpas_2m_10m/small_run (low res)
/glade/derecho/scratch/hkershaw/DART/Bugs/mpas_2m_10m/rundir this is the user case (high res)