PK A|X suppl-1.htmUT ff
J. A. M. Moore, J. Jiang, W. M. Post, A. T. Classen. 2015. Decomposition by ectomycorrhizal fungi alters soil carbon storage in a simulation model. Ecosphere 6:29. http://dx.doi.org/10.1890/ES14-00301.1
Supplement
R code for simulating long-term soil carbon pools.
Ecological Archives C006-008-S1.
Authors
File list (downloads)
Description
J. A. M. Moore
Department of Ecology and Evolutionary Biology
569 Dabney Hall, University of Tennessee
Knoxville, TN 37996 USA
E-mail: jbryan44@utk.edu
J. Jiang
Department of Ecology and Evolutionary Biology
569 Dabney Hall, University of Tennessee
Knoxville, TN 37996 USA
and
National Institute for Mathematical and Biological Synthesis
1122 Volunteer Blvd., Suite 106
Knoxville, TN 37996 USA
E-mail: Direct correspondence to Dr. Jiang Jiang (jjiang@nimbios.org) concerning MATLAB files.
W. M. Post
Department of Ecology and Evolutionary Biology
569 Dabney Hall, University of Tennessee
Knoxville, TN 37996 USA
A. T. Classen
Department of Ecology and Evolutionary Biology
569 Dabney Hall, University of Tennessee
Knoxville, TN 37996 USA
and
The Natural History Museum of Denmark
University of Copenhagen
DK-2100 Copenhagen, Denmark
File list
myc_ode.txt (MD5: 177ce2ec5175d7a58be65aca79cba19f)
myc_solver.txt (MD5: 117ec7041a594a4ca7201108bc75d0dc)
myc_perturbation.txt (MD5: 3642ff50200485b7da497667baa86559)
Description
The MATLAB script myc_ode.txt contains a function to be called by MATLAB ODE solver including the ODE equations.
The MATLAB script myc_solver.txt contains source code used to solve the ODE equations in myc_ode.txt.
The MATLAB script myc_perturbation.txt contains perturbation experiments for parameters and derives solutions analytically.
ESA Publications | Ecological Archives | Permissions | Citation | Contacts
PKڇm PK A|X myc_ode.txtUT ff% Supplementary source codes for % "Decomposition by ectomycorrhizal fungi alters % soil carbon storage in a simulation model" % by Moore J.A.M., Post W.M., Jiang J., and Classen A.T. % This file contain function to be called by matlab ode solver function ydot = myc_ode(t,y,pars) % Assign the values to each variable P = y(1); % Above ground plant C biomass L = y(2); % Leaf litter R = y(3); % Dead roots M = y(4); % Mycorrhizal C biomass B = y(5); % Bacterial C biomass S = y(6); % Soil C storage % Parameters G = pars(1); % Net primary productivity aL = pars(2); % Leaf litter allocation aR = pars(3); % Root allocation aM = pars(4); % Mycorrhizal allocation kL = pars(5); % Litter turnover kR = pars(6); % Root turnover kM = pars(7); % Mycorrhizal turnover kB = pars(8); % Microbial turnover rL = pars(9); % Fraction of litter respired rM = pars(10); % Mycorrhizal respiration rB = pars(11); % Microbial respiration eP = pars(12); % Plant acquisition efficiency eS = pars(13); % Soil acquisition efficienty u = pars(14); % Specific mycorrhizal C uptake V1 = pars(15); % Maximum microbial C uptake K1 = pars(16); % Microbial half-saturation V2 = pars(17); % Maximum mycorrhizal C uptake K2 = pars(18); % Mycorrhizal half-saturation s = pars(19); % scales NPP flag = pars(20);% Indicate which C uptake strategy is used if flag == 1 VM = 0; % No C uptake from soil, corresponding to V1 in paper elseif flag == 2 VM = u*M; % corresponding to V2 in paper else VM = V2*S/(K2+S); % corresponding to V3 in paper end % ODE equations for P, L, R, M, B, and S, respectively. rhs1 = G*s - (aL+aR+aM)*P; % P rhs2 = aL*P - kL*L; % L rhs3 = aR*P - kR*R; % R rhs4 = eP*aM*P - kM*M - rM*M + eS*VM; % M rhs5 = V1*S/(K1+S) - kB*B -rB*B; % B rhs6 = (1-rL)*kL*L + kR*R + kM*M + kB*B - VM - V1*S/(K1+S); % S ydot = [rhs1; rhs2; rhs3; rhs4; rhs5; rhs6];PKcK PK A|X myc_solver.txtUT ff% Supplementary source codes for % "Decomposition by ectomycorrhizal fungi alters % soil carbon storage in a simulation model" % by Moore J.A.M., Post W.M., Jiang J., and Classen A.T. % This file solve the equations by ode solver % Time span tspan = [0 1000]; % Initial C pool y0 = [10000, 1000, 1000, 50, 100, 5000]; % Parameters G = 1000; % Net primary productivity aL = 0.05; % Leaf litter allocation aR = 0.03; % Root allocation aM = 0.02; % Mycorrhizal allocation kL = 0.5; % Litter turnover kR = 0.3; % Root turnover kM = 3; % Mycorrhizal turnover kB = 3.75; % Microbial turnover rL = 0.9; % Fraction of litter respired rM = 1; % Mycorrhizal respiration rB = 5; % Microbial respiration eP = 1; % Plant acquisition efficiency eS = 0.3; % Soil acquisition efficienty u = 1.64; % Specific mycorrhizal C uptake V1 = 1600; % Maximum microbial C uptake K1 = 5000; % Microbial half-saturation V2 = 200; % Maximum mycorrhizal C uptake K2 = 5000; % Mycorrhizal half-saturation s = 1; % scales NPP (any number between 0 and 1) flag = 2; % Indicate which C uptake strategy is used (1,2,or 3) % Another version of parameters can be K1=5000, K2=2000, and u=2.29 pars = [G aL aR aM kL kR kM kB rL rM rB eP eS u V1 K1 V2 K2 s flag]; % Solve the equation by matlab ode45 solver, need to call "myc_ode.m" [t,y] = ode45(@(t,y) myc_ode(t,y,pars),tspan,y0); % Plot results figure subplot(3,2,1) plot(t,y(:,1)) ylabel('P') subplot(3,2,2) plot(t,y(:,6)) ylabel('S') subplot(3,2,3) plot(t,y(:,2)) ylabel('L') subplot(3,2,4) plot(t,y(:,3)) ylabel('R') subplot(3,2,5) plot(t,y(:,4)) ylabel('M') subplot(3,2,6) plot(t,y(:,5)) ylabel('B')PKs PK A|X > > myc_perturbation.txtUT ff% Supplementary source codes for % "Decomposition by ectomycorrhizal fungi alters % soil carbon storage in a simulation model" % by Moore J.A.M., Post W.M., Jiang J., and Classen A.T. % This file pertubate parameter and derive solutions analytically clear; % Parameters G = 1000; % Net primary productivity aL0 = 0.05; % Leaf litter allocation aR0 = 0.03; % Root allocation aM0 = 0.02; % Mycorrhizal allocation kL0 = 0.5; % Litter turnover kR0 = 0.3; % Root turnover kM0 = 3; % Mycorrhizal turnover kB0 = 3.75; % Microbial turnover rL0 = 0.9; % Fraction of litter respired rM0 = 1; % Mycorrhizal respiration rB0 = 5; % Microbial respiration eP = 1; % Plant acquisition efficiency eS0 = 0.3; % Soil acquisition efficienty u0 = 1.64; % Specific mycorrhizal C uptake V10 = 1600; % Maximum microbial C uptake K10 = 5000; % Microbial half-saturation V20 = 200; % Maximum mycorrhizal C uptake K20 = 5000; % Mycorrhizal half-saturation s = 1; % scales NPP %% Pertubation experiments Trecord = zeros(1000,28); for inde = 1:1000 s = rand aL = aL0*(0.9+0.2*rand); aM = aM0*(0.9+0.2*rand); aR = aR0*(0.9+0.2*rand); eS = eS0*(0.9+0.2*rand); kL = kL0*(0.9+0.2*rand); kR = kR0*(0.9+0.2*rand); kM = kM0*(0.9+0.2*rand); kB = kB0*(0.9+0.2*rand); rB = rB0*(0.9+0.2*rand); rM = rM0*(0.9+0.2*rand); rL = rL0*(0.9+0.2*rand); K1 = K10*(0.9+0.2*rand); K2 = K20*(0.9+0.2*rand); u = u0*(0.9+0.2*rand); V1 = V10*(0.9+0.2*rand); V2 = V20*(0.9+0.2*rand); % Steady state P, L, and R respectively. P_star = G*s/(aL + aM + aR); L_star = aL/kL*P_star; R_star = aR/kR*P_star; % Steady state M, B, and S in case of V1 M_star1 = eP*aM*P_star/(kM+rM); B_star1 = (G*s-rL*kL*L_star-rM*M_star1-(1-eP)*aM*P_star)/rB; S_star1 = (kB+rB)*B_star1*K1/(V1-(kB+rB)*B_star1); % Steady state M, B, and S in case of V2 M_star2 = eP*aM*P_star/(kM+rM-eS*u); B_star2 = (G*s-rL*kL*L_star-rM*M_star2-(1-eP)*aM*P_star - (1-eS)*u*M_star2)/rB; S_star2 = (kB+rB)*B_star2*K1/(V1-(kB+rB)*B_star2); % Steady state M, B, and S in case of V3 syms B M S B_hat = solve(V1*S/(K1+S)==kB*B+rB*B,B); M_hat = solve(eP*aM*P_star+eS*V2*S/(K2+S)==kM*M+rM*M,M); S_hat = solve(G*s-rL*kL*L_star-rM*M_hat-(1-eP)*aM*P_star-(1-eS)*V2*S/(K2+S)==rB*B_hat,S); S_star3 = eval(S_hat(1)); M_star3 = subs(M_hat,S,S_star3); B_star3 = subs(B_hat,S,S_star3); % For each uptake strategy, calculate key C flux MgetfromP1 = eP*aM*P_star; % Mycorrhizae get C from plant MgetfromS1 = 0; % Mycorrhizae get C from soil SdecombyB1 = V1*S_star1./(K1+S_star1); % Soil C decomposed by bacteria SdecombyM1 = 0; % Soil C decomposed by mycorrhizae MfluxtoS1 = kM*M_star1; % Mycorrhizae turnover C to soil MgetfromP2 = eP*aM*P_star; MgetfromS2 = eS*u*M_star2; SdecombyB2 = V1*S_star2./(K1+S_star2); SdecombyM2 = u*M_star2; MfluxtoS2 = kM*M_star2; MgetfromP3 = eP*aM*P_star; MgetfromS3 = eS*V2*S_star3./(K2+S_star3); SdecombyB3 = V1*S_star3./(K1+S_star3); SdecombyM3 = V2*S_star3./(K2+S_star3); MfluxtoS3 = kM*M_star3; % Record all the data for latter analysis Trecord(inde,:) = [P_star L_star R_star M_star1 M_star2 M_star3 ... B_star1 B_star2 B_star3 S_star1 S_star2 S_star3 ... MgetfromP1 MgetfromS1 SdecombyB1 SdecombyM1 MfluxtoS1 ... MgetfromP2 MgetfromS2 SdecombyB2 SdecombyM2 MfluxtoS2 ... MgetfromP3 MgetfromS3 SdecombyB3 SdecombyM3 MfluxtoS3 s]; end %% % Retrieve data from the dataset. load Trecord1 Pstar = Trecord(:,1); Lstar = Trecord(:,2); Rstar = Trecord(:,3); Mstar1 = Trecord(:,4); Mstar2 = Trecord(:,5); Mstar3 = Trecord(:,6); Bstar1 = Trecord(:,7); Bstar2 = Trecord(:,8); Bstar3 = Trecord(:,9); Sstar1 = Trecord(:,10); Sstar2 = Trecord(:,11); Sstar3 = Trecord(:,12); MgetfromP1 = Trecord(:,13); MgetfromS1 = Trecord(:,14); SdecombyB1 = Trecord(:,15); SdecombyM1 = Trecord(:,16); MfluxtoS1 = Trecord(:,17); MgetfromP2 = Trecord(:,18); MgetfromS2 = Trecord(:,19); SdecombyB2 = Trecord(:,20); SdecombyM2 = Trecord(:,21); MfluxtoS2 = Trecord(:,22); MgetfromP3 = Trecord(:,23); MgetfromS3 = Trecord(:,24); SdecombyB3 = Trecord(:,25); SdecombyM3 = Trecord(:,26); MfluxtoS3 = Trecord(:,27); ss = Trecord(:,28); %% percent change in soil C compare to V1 xs = ss*100; p2 = (Sstar2-Sstar1)./Sstar1*100; p3 = (Sstar3-Sstar1)./Sstar1*100; pp2 = p2; pp3 = p3; xs(p2<-80 | p3<-80)= []; pp2(p2<-80 | p3<-80)=[]; pp3(p2<-80 | p3<-80)=[]; inde = find(p2<-80 | p3<-80); poly2 = polyfit(xs,pp2,2); poly3 = polyfit(xs,pp3,2); x = [0:100]; f2 = polyval(poly2,x); f3 = polyval(poly3,x); figure hold on plot(x,f2,'k-.') plot(x,f3,'k') plot(xs,pp2,'ko','MarkerSize',4) plot(xs,pp3,'ko','MarkerFaceColor',[0 0 0],'MarkerSize',4) plot(x,f2,'k-.','Linewidth',1.5) plot(x,f3,'k','Linewidth',1.5) xlabel('Level of plant productivity (%)','fontsize',14) ylabel('Percent change in soil C (%)','fontsize',14) legend('Constant uptake','Variable uptake','Location',[0.2 0.2 0.2 0.1]) legend('boxoff') set(gca,'Fontname','Arial') %% proportion of Mycorrhizae C uptake figure hold on x = ss*100; y = MgetfromS3./(MgetfromP3+MgetfromS3)*100; x(inde) = []; y(inde) = []; plot(x,y,'ko','MarkerFaceColor',[0 0 0],'MarkerSize',4) xlabel('Level of plant productivity (%)','fontsize',14) ylabel('Percent of mycorrhizae C uptake from soil (%)','fontsize',14) p = polyfit(x,y,2); x1 = [0:100]; f = polyval(p,x1); hold on plot(x1,f,'k','linewidth',1.5) set(gca,'Fontname','Arial') %% percent of soil C transfferred to mycorrhizae figure hold on x=ss*100; y = SdecombyM3./(SdecombyB3+SdecombyM3)*100; x(inde) = []; y(inde) = []; plot(x,y,'ko','MarkerFaceColor',[0 0 0],'MarkerSize',4) xlabel('Level of plant productivity (%)','fontsize',14) ylabel('Percent of soil C transferred to mycorrhizae (%)','fontsize',14) p = polyfit(x,y,2); x1 = [0:100]; f = polyval(p,x1); hold on plot(x1,f,'k','linewidth',1.5) set(gca,'Fontname','Arial') PK*|> > PK- A|Xڇm @ suppl-1.htmUT fPK- A|XcK @ myc_ode.txtUT fPK- A|Xs @ myc_solver.txtUT fPK- A|X*|> > @' myc_perturbation.txtUT fPK z@