# 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)")
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")