-
Notifications
You must be signed in to change notification settings - Fork 27
Account for ERA5/ClimaAtmos topo differences #4098
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
base: main
Are you sure you want to change the base?
Conversation
6f20da6 to
1ce4418
Compare
| @assert all(map(x -> x in (keys(ncin)), in_dims)) "Source file $source_file is missing subset of the required dimensions: $in_dims" | ||
|
|
||
| # assert ncin has required variables | ||
| req_vars = ["u", "v", "w", "t", "q", "skt", "sp"] |
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.
If it breaks without surface_geopotential catch it with the @assert here
| # Choose attributes; for z_sfc, set clean altitude attributes | ||
| var_attrib = if dst_name == "z_sfc" | ||
| Dict( | ||
| "standard_name" => "surface_altitude", |
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 assume the data you're writing is geopotential based on the ERA5 name? If that is the case the units are gravity * height (m^2/s^2) and would be good to at least rename the long_name and the units. I would also use zg_sfc even though ERA5 uses z for geopotential because then it's very clear.
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.
Ah ok I see what is happening now, you're correct. Not sure I have an immediate suggestion other that it is a little confusing because there are two if statements in this loop to catch z_sfc since it needs a new var_attrib and needs to be divided by gravity. Possibly separating it out could be cleaner / easier to read if a little longer.
| end | ||
| var_obj = defVar(ncout, dst_name, FT, ("lon", "lat", "z"), attrib = var_attrib) | ||
| # Read first time slice and coalesce; follow same convention as sp (use [:, :, 1]) | ||
| data2d = FT.(coalesce.(ncin[src_name][:, :, 1], NaN)) |
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.
Do we need a coalesce? Are there instances when the data is NaN and our model will still run? If not then we could consider asserting not NaN
src/diagnostics/core_diagnostics.jl
Outdated
| bracket = similar(t_level) | ||
| @. bracket = max(ϵ, 1 + Γ * z_level / t_level) | ||
|
|
||
| # exponent = g / (R_m Γ) | ||
| exponent = similar(R_m_surf) | ||
| @. exponent = g / (R_m_surf * Γ) |
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.
This will allocate new arrays which is slow. Maybe @dennisYatunin could recommend a fix?
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 consolidated the logic and reduced the number of new variables. But also diagnostics are computed on the CPU so I'm not sure we need to worry about allocations as much here (note we already materialize a lot of our lazy fields throughout diagnostics as is). But maybe @dennisYatunin can comment how much it matters in the end.
Julians42
left a comment
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.
Left some comments to improve clarity and then one performance optimization we should do in the diagnostics for Dennis. Glad this is looking so much better!
1ce4418 to
b961ecc
Compare
…re. Account for lapse rate in mslp sea level reduction (diagnostics).
b961ecc to
0e88889
Compare
Adjust for ERA5/ClimaAtmos topo differences when initializing pressure. Account for lapse rate in mslp sea level reduction (diagnostics).



The colorbars vary, but note each improvement significantly reduces the RMSE/Bias.
Current 😭
Topography correction in surface pressure init 👀
Topography correction + account for lapse rate in MSLP diagnostic 🥳