During my brief testing of P3 in KiD I had the idea that a function like the one implemented here might be useful for calculating the "predicted variables"—F_rim, p_rim, F_liq. I'm envisioning that after the state variables are calculated at each time step, we call this p3_predictor(), or like we talked about throw it in with thresholds(), distribution_parameter_solver(), etc... using the computed F_rim, p_rim, F_liq.
The advantage of having a call to P3 to compute the predicted variables is to catch limit cases early and ensure that we're passing physically reasonable values to the rest of the P3 functions, instead of hard-coding these things in KiD every time we compute the predicted quantities, so I thought I may as well implement this solution for fun! But no hard feelings if this PR gets closed and is never merged!
NOTE: This PR also allows the rime density to be 0. (Previously it had to be greater than 0.) I thought maybe this change could be useful because we could return 0 rime density for when we have no rime or no total ice content.
During my brief testing of P3 in KiD I had the idea that a function like the one implemented here might be useful for calculating the "predicted variables"—
F_rim, p_rim, F_liq
. I'm envisioning that after the state variables are calculated at each time step, we call thisp3_predictor()
, or like we talked about throw it in withthresholds()
,distribution_parameter_solver()
, etc... using the computedF_rim, p_rim, F_liq
.The advantage of having a call to P3 to compute the predicted variables is to catch limit cases early and ensure that we're passing physically reasonable values to the rest of the P3 functions, instead of hard-coding these things in KiD every time we compute the predicted quantities, so I thought I may as well implement this solution for fun! But no hard feelings if this PR gets closed and is never merged!