def muf(X, T, I, D, ps, Jmax, Vcmax,\ ca=400, Kc=460, q=0.3, R=8.314, z1=0.9, z2=0.9999, a=1.6, L=1): alpha_log10, b, c, g1, kxmax_log10, p50 = X kxmax = 10**kxmax_log10 PLC = [] for i in range(len(T)): Ti, Ii, Di, psi = T.iloc[i], I.iloc[i], D.iloc[i], ps.iloc[i] # px pxmin = pxminf(psi, p50) pxmax = optimize.minimize_scalar(pxf4, bounds=(pxmin, psi),\ method='bounded',\ args=(Ti, Ii, Di, psi, Kc, Vcmax, ca,\ q, Jmax, z1, z2, R, g1, b, c,\ kxmax, p50, a, L)) px1 = pxf4(pxmin, Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2, R,\ g1, b, c, kxmax, p50, a, L) px2 = pxf4(pxmax.x, Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2,\ R, g1, b, c, kxmax, p50, a, L) if px1 * px2 < 0: px = optimize.brentq(pxf4, pxmin, pxmax.x, args=(Ti, Ii, Di, psi,\ Kc, Vcmax, ca, q,\ Jmax, z1, z2, R,\ g1, b, c, kxmax,\ p50, a, L)) PLC.append(kxf(px, kxmax, p50) / kxmax) else: PLC.append('nan') return PLC
def testf(X, env, Jmax=100, Vcmax=50, ca=400, Kc=460, q=0.3, R=8.314, z1=0.9, z2=0.9999, a=1.6, l=1.8 * 10**(-5), u=48240): b, c, g1, kxmax, p50, L = X T, I, D, ps = env pxmin = pxminf(ps, p50) pxmax = optimize.minimize_scalar(pxf4, bounds=(pxmin, ps), method='bounded', args=(T, I, D, ps, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L)) px1 = pxf4(pxmin, T, I, D, ps, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L) px2 = pxf4(pxmax.x, T, I, D, ps, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L) return px1 * px2
def muf(X, T, I, D, ps, vn_max, Jmax, Vcmax,\ ca=400, Kc=460, q=0.3, R=8.314, z1=0.9, z2=0.9999, a=1.6, L=1): alpha_log10, b, c, g1, kxmax_log10, p50 = X alpha, kxmax = 10**alpha_log10, 10**kxmax_log10 sapflow_modeled = [] for i in range(len(T)): Ti, Ii, Di, psi = T.iloc[i], I.iloc[i], D.iloc[i], ps.iloc[i] # px pxmin = pxminf(psi, p50) pxmax = optimize.minimize_scalar(pxf4, bounds=(pxmin, psi),\ method='bounded',\ args=(Ti, Ii, Di, psi, Kc, Vcmax, ca,\ q, Jmax, z1, z2, R, g1, b, c,\ kxmax, p50, a, L)) px1 = pxf4(pxmin, Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2, R,\ g1, b, c, kxmax, p50, a, L) px2 = pxf4(pxmax.x, Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2,\ R, g1, b, c, kxmax, p50, a, L) if px1 * px2 < 0: px = optimize.brentq(pxf4, pxmin, pxmax.x, args=(Ti, Ii, Di, psi,\ Kc, Vcmax, ca, q,\ Jmax, z1, z2, R,\ g1, b, c, kxmax,\ p50, a, L)) sapflow_modeled.append(kxf(px, kxmax, p50)*(psi-px)*30*60*18\ /1000000/vn_max/alpha) else: if abs(px1) < abs(px2): sapflow_modeled.append(1) else: sapflow_modeled.append(0) return sapflow_modeled
def muf(alpha, b, c, p50, kxmax, g1, L=1, ca=400, Kc=460, q=0.3, R=8.314, Jmax=Jmax, Vcmax=Vcmax, z1=0.9, z2=0.9999, a=1.6): sapflow_modeled = [] for i in range(len(vn)): # Environmental conditions Ti, Ii, Di, psi, dli = T.iloc[i], I.iloc[i], D.iloc[i], ps.iloc[i], 30 # px pxmin = pxminf(psi, p50) if pxmin < psi: pxmax = optimize.minimize_scalar(pxf4, bounds=(pxmin, psi), method='bounded', args=(Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L)) px1 = pxf4(pxmin, Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L) px2 = pxf4(pxmax.x, Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L) if px1 * px2 < 0: px = optimize.brentq(pxf4, pxmin, pxmax.x, args=(Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L)) sapflow_modeled.append( kxf(px, kxmax, p50) * (psi - px) * 30 * 60 * dli * 18 / 1000000 / vn_max / alpha) else: if abs(px1) < abs(px2): sapflow_modeled.append(1) else: sapflow_modeled.append(0) else: print('pxmin > ps') sapflow_modeled.append(0) return sapflow_modeled
def muf(b, c, p50, kxmax, g1, L=1, ca=400, Kc=460, q=0.3, R=8.314, Jmax=Jmax, Vcmax=Vcmax, z1=0.9, z2=0.9999, a=1.6): res = [] for i in range(len(T)): # Environmental conditions Ti, Ii, Di, psi = T.iloc[i], I.iloc[i], D.iloc[i], ps.iloc[i] # px pxmin = pxminf(psi, p50) if pxmin < psi: pxmax = optimize.minimize_scalar(pxf4, bounds=(pxmin, psi), method='bounded', args=(Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L)) px1 = pxf4(pxmin, Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L) px2 = pxf4(pxmax.x, Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L) if px1 * px2 < 0: px = optimize.brentq(pxf4, pxmin, pxmax.x, args=(Ti, Ii, Di, psi, Kc, Vcmax, ca, q, Jmax, z1, z2, R, g1, b, c, kxmax, p50, a, L)) res.append(np.exp(-(px / b)**c)) else: if abs(px1) < abs(px2): res.append(1) else: res.append(0) else: print('pxmin > ps') res.append(0) return res