MetPy icon indicating copy to clipboard operation
MetPy copied to clipboard

Freezing Rain Accumulation Model (FRAM)

Open jsillin opened this issue 5 years ago • 2 comments

I'm not sure if this is too niche for metpy but a nice feature to add might be the Freezing Rain Accumulation Model developed by [Sanders and Barjenbruch (2016)](https://journals.ametsoc.org/view/journals/wefo/31/4/waf-d-15-0118_1.xml?tab_body=fulltext-display#:~:text=The%20ice%3Aliquid%20ratio%20(ILR,aforementioned%20commonly%20measured%20weather%20variables.).

It's a way of estimating ice accretion in freezing rain events using an empirically-derived dynamic ice:liquid ratio based on wind, wet bulb temp, and precip rate. This is far superior to the 1:1 ice:liquid ratio assumed by many popular weather model websites.

I wrote a function to do this for my own plotting purposes:

def fram(ice,wet_bulb,velocity):
    '''
    Using the dynamic ratio from Sanders and Barjenbruch (2016)
    compute total ice accretion given some amount of precip falling
    as freezing rain (ice, units of in/hr), wet bulb temperature
    (wet_bulb, units of degrees Celsius), and wind speed (velocity,
    units of knots).

    Returns total_accretion, the amount of ice that might actually
    stick to surfaces assuming the temp/wind/precip conditions remain
    roughly constant throughout the time interval of interest (1 hourly
    is best), in units of inches.
    '''
    ilr_p = ice
    ilr_t = (-0.0071*(wet_bulb**3))-(0.039*(wet_bulb**2))-(0.3904*wet_bulb)+0.5545
    ilr_v = (0.0014*(velocity**2))+(0.0027*velocity)+0.7574

    cond_1 = np.ma.masked_where(wet_bulb>-0.35,ice)
    cond_2 = np.ma.masked_where((wet_bulb<-0.35) & (velocity>12.),ice)
    cond_3 = np.ma.masked_where((wet_bulb<-0.35) & (velocity<=12.),ice)

    cond_1 = cond_1.filled(0)
    cond_2 = cond_2.filled(0)
    cond_3 = cond_3.filled(0)

    ilr_1 = (0.7*ilr_p)+(0.29*ilr_t)+(0.01*ilr_v)
    ilr_2 = (0.73*ilr_p)+(0.01*ilr_t)+(0.26*ilr_v)
    ilr_3 = (0.79*ilr_p)+(0.2*ilr_t)+(0.01*ilr_v)

    accretion_1 = cond_1*ilr_1
    accretion_2 = cond_2*ilr_2
    accretion_3 = cond_3*ilr_3

    total_accretion=accretion_1+accretion_2+accretion_3
    return total_accretion

but being a relative newbie to python I'm not sure if it's up to snuff for inclusion as-is. If changes are necessary, I would be happy to work towards making them so that someone in the future might be able to use FRAM more easily!

jsillin avatar Jan 27 '21 11:01 jsillin

I'd be happy to see this feature added to MetPy. I don't think this would go in straight as-is, but it looks pretty close. You can submit it as a PR...I'm not sure where, maybe basic.py? windchill is probably the closest existing match. (It's not critical, we could always move it later.) With the PR we can iterate and I can more easily give feedback on improvements.

dopplershift avatar Mar 12 '21 23:03 dopplershift

That is very usefull, is there any documents? Thanks!

andrewsoong avatar Mar 24 '22 08:03 andrewsoong