Repository navigation
Hail diagnostic vn14.2 - #21
James Bruten (james-bruten-mo) merged 13 commits into
Conversation
# Conflicts: # src/generic_diagnostic_variables.F90 # src/hail_diag_fast_mod.F90 # src/micro_main.F90
|
This is linked to UM PR to plumb through the hail diagnostic requests Purpose: Implements a new physically-based hail-size/melting diagnostic in Files changed (3): src/hail_diag_fast_mod.F90 (new, ~206 lines) Detail: src/hail_diag_fast_mod.F90 (module hail_diagnostic_fast_mod) Algorithm, per grid column: Find the melting level (find_melting_level) — scans from the top Build a hail size distribution at the melting level — reads the beta is set to 0 to explicitly ignore condensation evaporation effects. This allows hailstones to fall further. The 7 hail-size bins and their edges (1 mm–300 mm) are hardcoded rather How it fits together |
Paul Barrett (paul-barrett)
left a comment
There was a problem hiding this comment.
this looks good. The method is based on literature sources and assumes a "maximum" scenario or worst case scenario for graupel getting to the ground. This is a sensible choice for the initial implementation.
| real(wp) :: hailbin(nh) | ||
| real(wp) :: hailconc(nh) | ||
|
|
||
| data haildedge /1e-3, 3e-3,6e-3,1e-2,3e-2,6e-2,1e-1, 3e-1/ ! initial hail size edges at melting layer diameter in m |
There was a problem hiding this comment.
bins centres not identical to description in um PR, 20 mm (here) not 15mm (in PR explanation)
There was a problem hiding this comment.
i couldnt see this. Its mentioned as bin edges in the PR description above.
There was a problem hiding this comment.
I think Paul Barrett (@paul-barrett) may have been thinking about the slides at https://github.com/MetOffice/um/pull/118#issuecomment-5324906849
| integer :: k_ml, nn, k | ||
| real(wp) :: a, a0, v, da | ||
|
|
||
| integer, parameter :: nh = 7 |
There was a problem hiding this comment.
can this be derived from hailedge, in case bins change in future?
There was a problem hiding this comment.
i will just add a comment to mention that this is linked to haildedge
| a=a0 | ||
| do k = k_ml,1,-1 | ||
| v=a_v*(2.0*a*100.0)**b_v * sqrt(rho0) !diam in cm | ||
| da=mason_melt(a,a0,dz_in(k),t(k)-273.15,v,rhoi) |
There was a problem hiding this comment.
use T0 here, as it's defined anyway?
|
References Mason 1971 - did AI pick this and alter the reference? Was initially using the paper from 1956 rather than the book of 1971 |
mo-sabel
left a comment
There was a problem hiding this comment.
Overall, the approach looks physically reasonable and provides a pragmatic way of diagnosing hail from the existing CASIM graupel distribution. One underlying assumption underpinning the diagnostic is that the graupel PSD at the melting level is representative of potential hail. It may be worth considering how the diagnostic behaves in cloud regimes that can generate graupel without necessarily being regarded as hail-producing environments (e.g. mixed-phase stratocumulus or shallow convection). The existing concentration thresholds and subsequent melting calculations may already filter out many such cases, but testing the diagnostic in a benign mixed-phase cloud case could help assess the sensitivity of the results to this assumption.
| real(wp) :: da, C, Re, beta | ||
| beta=0.0 ! ignore condensation/evap | ||
|
|
||
| Re=v*(2*a)/visc |
There was a problem hiding this comment.
Double check the units.
visc = 1.7e-5 kg/m/s (dynamic viscosity of air?)
would give units of Re m3/kg
Do you need to multiply by air density?
There was a problem hiding this comment.
yep - done. As its close to 1 and sqrt'd there should be little impact.
| a0=haild(nn)/2.0 ! convert to radius at melting level | ||
| a=a0 | ||
| do k = k_ml,1,-1 | ||
| v=a_v*(2.0*a*100.0)**b_v * sqrt(rho0) !diam in cm |
There was a problem hiding this comment.
Should this have air density as per the comment?
! ---- terminal velocity power law: V = a_v * (D_cm)^b_v * sqrt(rho0_ref/rho_air) ----
There was a problem hiding this comment.
yep done. Again it is close to 1 and sqrt'd so there will be little impact.
| hailconc(nn)=N_t*lam**(mu_g+1)/gamma(mu_g+1)*haild(nn)**mu_g*exp(-lam*haild(nn))*hailbin(nn) !conc from graupel dist | ||
| end do | ||
|
|
||
| if ( maxval(hailconc) < Nthresh) then |
There was a problem hiding this comment.
Description in PR states "If total concentration across all
bins is below a threshold, returns ierr=2 (no significant hail)". Perhaps reword to "If the concentration in every bin is below a threshold, returns ierr=2 (no significant hail)". With the current wording I thought it was the total conc in the PSD
mo-sabel
left a comment
There was a problem hiding this comment.
Adding air density to fallspeed and Re looks good. Now also includes air density argument in mason_melt()
mo-sabel
left a comment
There was a problem hiding this comment.
Approved but noting that rhoa needs added as an argument in mason_melt. That has been implemented in the next commit
Pierre Siddall (Pierre-siddall)
left a comment
There was a problem hiding this comment.
Hi paulfield2024, thanks for doing this just a trivial suggestion regarding some seemingly redundant variable initialisation. I think removing these would be helpful to ensure failures don't pass silently .
This has been done
996db30
into
MetOffice:main
PR Summary
Sci/Tech Reviewer: mo-sabel
Code Reviewer: Pierre Siddall (@Pierre-siddall)
Hail diagnostic based on Mason 1956 "Melting of Hailstones"
Code Quality Checklist
(Some checks are automatically carried out via the CI pipeline)
Testing
stem suites
acceptable (eg. kgo changes)
tests, unit tests, etc.)
trac.log
Security Considerations
Performance Impact
AI Assistance and Attribution
Documentation
Sci/Tech Review
Please alert the code reviewer via a tag when you have approved the SR
Code Review