예제 #1
0
if not periodic:
    sdf = pb.SDF_PlantBox(0.99 * (max_b[0] - min_b[0]),
                          0.99 * (max_b[1] - min_b[1]), max_b[2] - min_b[2])
else:
    sdf = pb.SDF_PlantBox(np.Inf, np.Inf, max_b[2] - min_b[2])
rs.setGeometry(sdf)
rs.initialize()
rs.simulate(rs_age, False)
r = XylemFluxPython(rs)
init_conductivities(r, age_dependent)
""" Coupling (map indices) """
picker = lambda x, y, z: s.pick([x, y, z])
r.rs.setSoilGrid(picker)  # maps segments
r.rs.setRectangularGrid(pb.Vector3d(min_b), pb.Vector3d(max_b),
                        pb.Vector3d(cell_number), True)
r.test()  # sanity checks
nodes = r.get_nodes()
cci = picker(nodes[0, 0], nodes[0, 1], nodes[0, 2])  # collar cell index
""" Numerical solution """
start_time = timeit.default_timer()
x_, y_ = [], []
sx = s.getSolutionHead()  # inital condition, solverbase.py
N = round(sim_time / dt)
t = 0.

for i in range(0, N):

    rx = r.solve(rs_age + t, -trans * sinusoidal(t), sx[cci], sx, True,
                 wilting_point)  # xylem_flux.py
    x_.append(t)
    y_.append(float(r.collar_flux(rs_age + t, rx, sx)))
예제 #2
0
rs.simulate(simtime, False)
""" set up xylem parameters """
r = XylemFluxPython(rs)
# defaults...
kr4 = kr1  # basal
kr5 = kr1  # shoot borne
kz4 = kz1
kz5 = kz1
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]])
""" for debugging """
r.test()
r.plot_conductivities()
shoot_segs = rs.getShootSegments()
print("Shoot segments", [str(s) for s in shoot_segs])
print("Shoot type", rs.subTypes[0])

jc_, krs_, l_, eswp_, suf_ = [], [], [], [], []
""" numerical solution of transpiration -1 cm3/day"""
simtime += 1
for t in range(10, simtime):

    suf = r.get_suf(t)
    krs, _ = r.get_krs(t)
    krs_.append(krs)

    if t > 10 and t % 10 == 0: