コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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