# r.plot_conductivities() # shoot_segs = rs.getShootSegments() # print("Shoot segments", [str(s) for s in shoot_segs]) # print("Shoot type", rs.subTypes[0]) """ numerical solution of transpiration -1 cm3/day""" krs_, l_, jc_ = [], [], [] for t in np.linspace(10, simtime, simtime - 10 + 1): # l_.append(rs.getSummed("length")) # does not work, since rs is precomputed ana = pb.SegmentAnalyser(rs) ana.filter("creationTime", -1, t + 1.e-4) l_.append( ana.getSummed("length") ) # does not work, all rs is precomputedana.getParameter("length") suf = r.get_suf(t) krs, jc = r.get_krs(t) # in xylem flux.h krs_.append(krs) jc_.append(jc) if t > 10 and t % 10 == 0: # for the suf plot suf_[-1].append(suf) time = np.linspace(10, simtime, simtime - 10 + 1) ax1.plot(time, krs_, cols[ii], label=labels[ii], alpha=0.7) ax2.plot(time, jc_, cols[ii], label=labels[ii]) # """ Krs plot """ ax3.set_xlabel("simulation time") ax1.set_ylabel("root system conductance $krs$ $[cm^2 d^{-1}]$") ax2.set_ylabel("Transpiration at eswp -500 cm $[cm^3/day]$") ax1.legend()
v_[j] = np.sum(v) v1_[j] = np.sum(v[t == 1]) v2_[j] = np.sum(v[t == 2]) v3_[j] = np.sum(v[t == 3]) v4_[j] = np.sum(v[t == 4]) segment_[j] = np.sum(segment) """ set up xylem parameters """ r = XylemFluxPython(rs) r.setKrTables( [kr0[:, 1], kr1[:, 1], kr2[:, 1], kr3[:, 1], kr4[:, 1], kr5[:, 1]], [kr0[:, 0], kr1[:, 0], kr2[:, 0], kr3[:, 0], kr4[:, 0], kr5[:, 0]]) r.setKxTables( [kz0[:, 1], kz1[:, 1], kz2[:, 1], kz3[:, 1], kz4[:, 1], kz5[:, 1]], [kz0[:, 0], kz1[:, 0], kz2[:, 0], kz3[:, 0], kz4[:, 0], kz5[:, 0]]) suf = r.get_suf(j) print("Sum of SUF", np.sum(suf), "from", np.min(suf), "to", np.max(suf), "summed positive", np.sum(suf[suf >= 0])) krs, jc = r.get_krs(j) print("Krs: ", krs) print("time: ", j) krs_.append(krs) if j > 10 and j % 30 == 0: suf_.append(suf) jc_.append(jc) print("Total number of segments: ", segment_[-1]) """ Krs and length plot """
simtime = 20 # [day] for task b """ root system """ rs = pb.MappedRootSystem() path = "../../../CPlantBox//modelparameter/rootsystem/" name = "Glycine_max" rs.setSeed(1) rs.readParameters(path + name + ".xml") rs.getRootSystemParameter().seedPos.z = -0.1 rs.initialize() rs.simulate(simtime, False) print() print("Shoot segments: ", [str(s) for s in rs.getShootSegments()]) print() """ set up xylem parameters """ r = XylemFluxPython(rs) r.setKr([kr]) # or use setKrTables, see XylemFlux.h r.setKx([kz]) r.test() """ numerical solution of transpiration -1 cm3/day""" suf = r.get_suf(0.) print("Sum of SUF", np.sum(suf), "from", np.min(suf), "to", np.max(suf), "summed positive", np.sum(suf[suf >= 0])) krs = r.get_krs(0.) print("Krs: ", krs) """ Additional vtk plot """ ana = pb.SegmentAnalyser(r.rs) ana.addData("SUF", suf) # cut off for vizualisation vp.plot_roots(ana, "SUF", "Soil uptake fraction (cm3 day)") # "fluxes"