Skip to content

Conversation

@costachris
Copy link
Member

@costachris costachris commented Nov 12, 2025

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 😭
mslp_v1
Topography correction in surface pressure init 👀
mslp_v2
Topography correction + account for lapse rate in MSLP diagnostic 🥳
mslp_v3

@costachris costachris requested a review from Julians42 November 12, 2025 23:48
@costachris costachris force-pushed the cc/improve_wxmodel_pressure_init_diag branch from 6f20da6 to 1ce4418 Compare November 13, 2025 00:47
@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"]
Copy link
Member

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",
Copy link
Member

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.

Copy link
Member

@Julians42 Julians42 Nov 14, 2025

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))
Copy link
Member

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

Comment on lines 1672 to 1677
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 * Γ)
Copy link
Member

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?

Copy link
Member Author

@costachris costachris Nov 17, 2025

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.

Copy link
Member

@Julians42 Julians42 left a 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!

@costachris costachris force-pushed the cc/improve_wxmodel_pressure_init_diag branch from 1ce4418 to b961ecc Compare November 18, 2025 00:53
…re. Account for lapse rate in mslp sea level reduction (diagnostics).
@costachris costachris force-pushed the cc/improve_wxmodel_pressure_init_diag branch from b961ecc to 0e88889 Compare November 18, 2025 00:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants