Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
f5a5a5f
added new implementation to generate the root architecture and add vi…
Feb 16, 2026
a7d67d5
added new implementation to generate the root architecture and add vi…
Feb 16, 2026
f0b49ee
Modify docstring for math
pradal Feb 17, 2026
9c501ce
Remove unused UnivariateSpine import
pradal Feb 17, 2026
93e9011
Modify import to run code
pradal Feb 17, 2026
fc91941
update notebook
pradal Feb 17, 2026
a7113b2
update
pradal Feb 17, 2026
5ba2c94
added notebook for tuto in paper
baugetfa Feb 18, 2026
284cf71
[no ci] dummy commit for no ci
baugetfa Feb 18, 2026
e5ba39f
[no ci] WIP tuto
baugetfa Feb 19, 2026
5595f2c
updating architecture simulation and calculation of hydraulic archite…
Feb 19, 2026
2972b84
updating architecture simulation and calculation of hydraulic archite…
Feb 19, 2026
5f4f046
updating architecture simulation and calculation of hydraulic archite…
Feb 19, 2026
3e8ae94
Mgit push --set-upstream origin millet_newerge branch 'millet_new' of…
Feb 19, 2026
1edc5e2
updating architecture simulation and calculation of hydraulic archite…
Feb 19, 2026
f997041
WIP add a general function hydroroo_solute_flow
baugetfa Feb 20, 2026
2233672
Merge branch 'main' into millet_new
pradal Feb 20, 2026
587005d
added hydroroot_solute_flow function
baugetfa Feb 23, 2026
507e0b4
added hydroroot.hydro_io.read_rsml
baugetfa Feb 23, 2026
cbb50d5
[no ci] WIP notebook
baugetfa Feb 23, 2026
d322f81
[no ci] changed directory name with tuto for the paper
baugetfa Feb 23, 2026
b19ce96
[no ci] changed notebook name
baugetfa Feb 23, 2026
8f16bdf
[no ci] WIP tuto names
baugetfa Feb 23, 2026
3cda4ef
[no ci] WIP added solute transport tuto
baugetfa Feb 23, 2026
edbc8bf
[no ci] WIP cleaning
baugetfa Feb 23, 2026
c736bb8
Update tuto 1
pradal Feb 23, 2026
eed1764
[no ci] add index and rename notebooks
pradal Feb 24, 2026
c68ed6f
Update notebooks and index
pradal Feb 24, 2026
11f0a64
add maize.rsml
baugetfa Feb 24, 2026
281c30c
Merge branch 'paper_hydroroot' of https://github.com/openalea/hydroro…
baugetfa Feb 24, 2026
a1dc676
[no ci] cut_and_flow.py to call solver_wrapper.py functions
baugetfa Feb 24, 2026
858beda
Update tutos
pradal Feb 24, 2026
87a7f8d
changed notebook_list.ipynb to index.ipynb
baugetfa Feb 25, 2026
916e49a
[no ci] changed index.ipynb
baugetfa Feb 25, 2026
d1e9fea
typos and bugs fixed, calculation of global water flux at root base f…
Feb 25, 2026
21800e2
Merge branch 'millet_new' of https://github.com/adamavip/hydroroot in…
Feb 25, 2026
1e21f6e
Merge branch 'main' of https://github.com/openalea/hydroroot into pap…
baugetfa Feb 26, 2026
ebdcbe0
[no ci] WIP notebook example front page
baugetfa Feb 26, 2026
ab1bbc3
[no ci] fix syntax warning in doc string
baugetfa Feb 26, 2026
6fbb481
[no ci] update ipynb rsml example in doc
baugetfa Feb 26, 2026
f1e6808
[no ci] update solute water ipynb and added uniform k0 in hydroroot_s…
baugetfa Feb 26, 2026
2507821
[no ci] updated ipynb water solute with adjusting Js example
baugetfa Feb 26, 2026
1df4e74
[no ci] in CnF ipynb change the way to plot and use module name cut_a…
baugetfa Feb 26, 2026
1cd5714
[no ci] update ipynb tuto 1
baugetfa Feb 26, 2026
b744a77
[no ci] update ipynb tuto 1 and 2
baugetfa Feb 26, 2026
49b21c6
Merge branch 'millet_new' of https://github.com/adamavip/hydroroot in…
pradal Feb 27, 2026
14a3590
Update millet package with some minor update mainly in the API (chang…
pradal Feb 27, 2026
72f91e3
[no ci] Update example
pradal Feb 27, 2026
05b8655
[no ci] remove notebook in src
pradal Feb 27, 2026
bae4216
Merge branch 'millet' into paper_hydroroot
pradal Feb 27, 2026
c29ceef
[no ci] update ipynb tuto 1
baugetfa Feb 27, 2026
7ec3915
Merge branch 'paper_hydroroot' of https://github.com/openalea/hydroro…
baugetfa Feb 27, 2026
7d0bd08
[no ci] moved doc/example/millet/Simulating_archicture.ipynb to tutor…
baugetfa Feb 27, 2026
e0127ef
[no ci] WIP tuto millet
baugetfa Feb 27, 2026
dfa683b
[no ci] WIP millet add_soil2
baugetfa Feb 27, 2026
9838818
[no ci] millet changed name add_soil2 to add_soil_1D
baugetfa Feb 27, 2026
47b8cfb
[no ci] millet changed name diameter_law2 to diameter_fit_law and ref…
baugetfa Feb 27, 2026
8caf4e0
[no ci] millet diameter_fit_law doc
baugetfa Feb 27, 2026
5910f3d
[no ci] millet compute_diameters_from_laws to compute_diam_radius_fro…
baugetfa Feb 27, 2026
8b76d08
[no ci] WIP millet tuto
baugetfa Feb 27, 2026
2a18221
[no ci] main.hydroroot_flow radial or axial calculation if not None
baugetfa Feb 27, 2026
39b2e50
[no ci] millet tuto added another soil
baugetfa Feb 27, 2026
9214d67
[no ci] WIP millet tuto
baugetfa Mar 2, 2026
374239f
[no ci] changed SR_diameters.csv delimiter to ;
baugetfa Mar 2, 2026
a5681a6
[no ci] new soil_1D module in main.py, removed unit change in hard in…
baugetfa Mar 2, 2026
a3fb0c9
[no ci] update doc in soil_1D in main.py
baugetfa Mar 3, 2026
8916537
[no ci] WIP ipynb millet tuto
baugetfa Mar 3, 2026
19d27ff
[no ci] in tutorial moved files to data and updated index.ipynb
baugetfa Mar 3, 2026
e531934
changed name of function with age to dag for days after germination
baugetfa Mar 16, 2026
ff92788
WIP changed name of function with age to dag for days after germination
baugetfa Mar 16, 2026
2febae7
[no ci] changed , to ;
baugetfa Mar 16, 2026
6d548e7
[no ci] fix error in radius calculation from diameter
baugetfa Mar 16, 2026
966ebaa
[no ci] compute_diameter_from_laws = compute_diam_radius_from_laws fo…
baugetfa Mar 16, 2026
cf8998e
[no ci] update ipynb
baugetfa Mar 16, 2026
5bc647c
[no ci] update ipynb and corrections after review
baugetfa Mar 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ mamba env create -f ./conda/environment.yml

#### Usage

See notebooks in example directory, they are listed [here](doc/example/notebook_list.ipynb) and can be played following [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/openalea/hydroroot/HEAD?urlpath=%2Fdoc%2Ftree%2Fexample%2Fnotebook_list.ipynb)
See notebooks in example directory, they are listed [here](doc/example/index.ipynb) and can be played following [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/openalea/hydroroot/HEAD?urlpath=%2Fdoc%2Ftree%2Fexample%2Fnotebook_list.ipynb)


## Documentation
Expand Down
200 changes: 67 additions & 133 deletions doc/example/example_archi_from_rsml.ipynb

Large diffs are not rendered by default.

13 changes: 6 additions & 7 deletions doc/example/example_cut_and_flow_pure_water.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
import matplotlib.pyplot as plt

from openalea.hydroroot.init_parameter import Parameters
from openalea.hydroroot.solver_wrapper import pure_hydraulic_model
from openalea.hydroroot.cut_and_flow import pure_hydraulic_model

start_time = time.time()

Expand Down Expand Up @@ -95,22 +95,21 @@
fig, axs = plt.subplots(2,2)
axs[0,0].axis('off')
### Display the plot J vs Lcut
dresults.plot.scatter('max_length', 'Jexp (uL/s)', c = 'black', ax = axs[0,1], label = 'Jexp(P) cnf')
dresults.plot.line('max_length', 'Jv (uL/s)', c = 'purple', ax = axs[0,1], label = 'Jv(P)')
axs[0,1].scatter(dresults['max_length'], dresults['Jexp (uL/s)'], c = 'black', label = 'Jexp(P) cnf')
axs[0,1].plot(dresults['max_length'], dresults['Jv (uL/s)'], c = 'purple', label = 'Jv(P)')
axs[0,1].set_xlabel('max length (m)')
axs[0,1].set_ylabel('Jv (uL/s)')

### Plot K vs x and comparing radial k between 1st guess and optim value
dresults.plot.scatter('x', 'K 1st', c = 'black', ax = axs[1,0], label = 'K1st')
dresults.plot.line('x', 'K optimized', c = 'purple', ax = axs[1,0], label = 'K adjusted')
axs[1,0].scatter(dresults['x'], dresults['K 1st'], c = 'black', label = 'K1st')
axs[1,0].plot(dresults['x'], dresults['K optimized'], c = 'purple', label = 'K adjusted')
axs[1,0].set_xlabel('dist. to tip (m)')
axs[1,0].set_ylabel('K (10-9 m4/(s.Mpa))')

d = pd.DataFrame({'radial':['k', 'k adjusted'], 'val':[parameter.hydro['k0'], dresults['k (10-9 m/s/MPa)'][0]]})
d.plot.bar(x='radial', y='val', rot=0, ax = axs[1,1])
axs[1,1].bar(x=d['radial'], height=d['val'])
axs[1,1].set_ylabel('k (10-9 m/(s.MPa))')
axs[1,1].xaxis.label.set_visible(False)
axs[1,1].get_legend().remove()

fig.patch.set_facecolor('lightgrey')
fig.tight_layout()
Expand Down
17 changes: 8 additions & 9 deletions doc/example/example_cut_and_flow_water_solute.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
import matplotlib.pyplot as plt

from openalea.hydroroot.init_parameter import Parameters
from openalea.hydroroot.solver_wrapper import water_solute_model
from openalea.hydroroot.cut_and_flow import water_solute_model

results = {}
g_cut = {}
Expand Down Expand Up @@ -134,8 +134,8 @@
if 'Jexp(P)' in list(dresults.columns):
d = dresults[['dp', 'Jexp(P)', 'Jv(P)']].dropna()
d.sort_values(['dp'], inplace=True)
d.plot.scatter('dp', 'Jexp(P)', ax = axs[0, 0], label = 'Jexp(P)')
d.plot.line('dp', 'Jv(P)', ax = axs[0, 0], label = 'Jv(P)')
axs[0,0].scatter(d['dp'], d['Jexp(P)'], label = 'Jexp(P)')
axs[0,0].plot(d['dp'], d['Jv(P)'], label = 'Jv(P)')
j = np.array(d.loc[:, ['Jv(P)', 'Jexp(P)']])
axs[0, 0].set_ylim(j.min(),j.max())
axs[0,0].set_xlabel('P (Mpa)')
Expand All @@ -144,28 +144,27 @@
#Jv CnF data and fit
if 'Jexp cnf (uL/s)' in list(dresults.columns):
d = dresults[['max_length', 'Jexp cnf (uL/s)', 'Jv cnf (uL/s)']].dropna()
d.plot.scatter('max_length', 'Jexp cnf (uL/s)', ax = axs[0, 1], label = 'Jexp(P) cnf')
d.plot.line('max_length', 'Jv cnf (uL/s)', ax = axs[0, 1], label = 'Jv(P)')
axs[0,1].scatter(d['max_length'], d['Jexp cnf (uL/s)'], label = 'Jexp(P) cnf')
axs[0,1].plot(d['max_length'], d['Jv cnf (uL/s)'], label = 'Jv(P)')
j = np.array(d.loc[:, ['Jv cnf (uL/s)', 'Jexp cnf (uL/s)']])
axs[0, 1].set_ylim(j.min(),j.max())
axs[0,1].set_xlabel('max length (m)')
axs[0,1].set_ylabel('Jv (uL/s)')

#K 1st guess and optim
d = dresults[['x pr', 'K1st pr', 'K pr']].dropna()
d.plot.scatter('x pr', 'K1st pr', ax = axs[1, 0], label = 'K1st')
d.plot.line('x pr', 'K pr', ax = axs[1, 0], label = 'K adjusted')
axs[1, 0].scatter(d['x pr'], d['K1st pr'], label = 'K1st')
axs[1, 0].plot(d['x pr'], d['K pr'], label = 'K adjusted')
axs[1, 0].set_ylim(min(d['K1st pr'].min(), d['K pr'].min()),
max(d['K1st pr'].max(), d['K pr'].max()))
axs[1,0].set_xlabel('dist. to tip (m)')
axs[1,0].set_ylabel('K (10-9 m4/(s.Mpa)')

#radial k 1st guess and optim
d = pd.DataFrame({'lab':['k', 'k adjusted'], 'val':[parameter.hydro['k0'], dresults['kpr'][0]]})
d.plot.bar(x='lab', y='val', rot=0, ax = axs[1, 1])
axs[1,1].bar(x=d['lab'], height=d['val'])
axs[1,1].set_ylabel('k (10-9 m/(s.MPa)')
axs[1,1].xaxis.label.set_visible(False)
axs[1,1].get_legend().remove()

fig.patch.set_facecolor('lightgrey')
fig.tight_layout()
Expand Down
Loading