#
    t3 = timer.time()
    # print("3 . Xylem fluxes")
    # age dependency
    #kr = kr * (10*time_ + 1)
    #kz = kz / (10*time_ + 1)
    soil_p2 = lambda x, y, z: soil_p(x, y, z, inf.psi, soil[-1].lowerDepth
                                     )  # J/kg

    if dirichlet == False:  # Neumann
        Q, b = xylem_flux.linear_system(seg, nodes, radius, kr, kz, rho, g,
                                        soil_p2)
        Q, b = xylem_flux.bc_neumann(Q, b, np.array([0]), pot_trans, seg,
                                     nodes)
        x = LA.spsolve(Q, b)  # direct
        eff_trans = xylem_flux.axial_flux0(
            x, seg, nodes, kz, rho, g)  # verify that eff_trans == pot_trans
        print(
            "using neumann ( Effective Transpiration = " + str(eff_trans) +
            " m^3 s^-1)", "top potential", x[0])

    if dirichlet or (x[0] < top_pot):
        Q, b = xylem_flux.linear_system(seg, nodes, radius, kr, kz, rho, g,
                                        soil_p2)
        dirichlet = True
        Q, b = xylem_flux.bc_dirichlet(Q, b, np.array([0]),
                                       np.array([top_pot]))
        x = LA.spsolve(Q, b)  # direct
        eff_trans = xylem_flux.axial_flux0(x, seg, nodes, kz, rho, g)
        dirichlet = eff_trans < pot_trans
        print("using dirichlet ( Effective Transpiration = " + str(eff_trans) +
              " m^3 s^-1)")
示例#2
0
Q, b = xylem_flux.bc_dirichlet(Q, b, n0, topP)  # Dirichlet

#
# solve LS
#
t = time.time()
print("solve")
# x0 = d*np.ones(Q.shape[0]) # empirically proofen to be the best
# x, info = LA.cg(Q,b,x0=x0, tol=1e-12)  # tested with CG, CGS, GMRES, BICG. CG by far the best
x = LA.spsolve(Q, b)  # direct
print("fin")
# print("CG: " + str(time.time()-t) +" sec" )
print("spsolve: " + str(time.time() - t) + " sec")

#
# output
#
f0 = xylem_flux.axial_flux0(x, seg, nodes, kz, rho, g)
print("Effective transpiration.: ", f0, " [?]")

segP = nodes2seg(nodes, seg, x)
axial_flux = xylem_flux.axial_flux(x, seg, nodes, kz, rho, g)
radial_flux = xylem_flux.radial_flux(x, seg, nodes, radius, kr, soil_p)
net_flux = axial_flux + radial_flux

rs_ana.addUserData(a2v(segP), "pressure")
rs_ana.addUserData(a2v(axial_flux), "axial_flux")
rs_ana.addUserData(a2v(radial_flux), "radial_flux")
rs_ana.addUserData(a2v(net_flux), "net_flux")
rs_ana.write(rsname + ".vtp")