Appendix 1. Below is a subset of the BUGS code used to obtain the parameter estimates in Table 1 of the main text. Estimates were obtained by simultaneously fitting equations 5 and 6 to the following datasets: daily respiration, lnP (ln.R.D[,] in the BUGS code below); daily gross primary production, lnR (ln.P.D[,]); temperature, 1/kTc – 1/kT (inv.kt[,]); and mass-corrected community size structure for autotrophs (ln.scb.aut[])and (ln.scb.het[]). Because mass-corrected biomass is calculated based on one of the estimated variables, alpha, which characterizes size dependence of metabolic rate, it was necessary to explicitly write out all of the body size terms in the BUGS code below. Hence, the actual file used for our calculations was ~13000 lines in length.

model {

#vague priors for parameters to be estimated

Ep ~ dnorm(0, 0.001) #activation energy for photosynthesis (eV)

ln.p0 ~ dnorm(0, 0.001) #normalisation for individual-level photosynthesis (g^{1-alpha} C day^{-1})

Er ~ dnorm(0, 0.001) #activation energy for respiration (eV)

ln.r0.aut ~dnorm(0, 0.001) #autotroph normalisation for individual-level respiration (g^{1-alpha} C day^{-1})

ln.r0.het ~dnorm(0, 0.001) #heterotroph normalisation for individual-level respiration (g^{1-alpha} C day^{-1})

alpha ~ dnorm(0, 0.001) #size scaling exponent (dimensionless)

tau.ln.P.D ~ dgamma(0.001,0.001); sigma2.ln.P.D <- 1/tau.ln.P.D #error/precision of daily GPP predictions, P_D

tau.ln.R.D ~ dgamma(0.001,0.001); sigma2.ln.R.D <- 1/tau.ln.R.D #error/precision of daily ER predictions, R_D

#mass-corrected biomass for autotrophs

#sum: (# inds)*(dilution/2)*(mass^alpha)

#pond: 1

ln.scb.aut[1] <- log(

1*68040842.2*pow(6.84e-15,alpha) +

1*68040842.2*pow(7.84e-15,alpha) +

1*68040842.2*pow(9.65e-15,alpha) +

<LINES REMOVED>

1*226802807.4*pow(6.14182e-10,alpha) +

1*226802807.4*pow(6.80244e-10,alpha) +

1*226802807.4*pow(9.86178e-10,alpha))

<LINES REMOVED>

#pond: 18

ln.scb.aut[1] <- log(

1*75600935.8*pow(5.89e-15,alpha) +

2*75600935.8*pow(6.19e-15,alpha) +

1*226802807.4*pow(6.59e-15,alpha) +

<LINES REMOVED>

1*250*pow(6.551530559e-06,alpha) +

1*250*pow(6.580778463e-06,alpha) +

1*250*pow(6.637602963e-06,alpha) +

1*250*pow(6.715318823e-06,alpha) +

1*250*pow(6.879107087e-06,alpha) +

1*250*pow(1.326183546e-05,alpha) +

1*250*pow(2.872562028e-05,alpha))

#mass-corrected biomass for heterotrophs

#sum: (# inds)*(dilution/2)*(mass^alpha)

ln.scb.het[1] <- log(

1*250*pow(3.342618e-09,alpha) +

5*250*pow(4.178272e-09,alpha) +

<LINES REMOVED>

1*250*pow(0.0002762539768,alpha))

<LINES REMOVED>

#pond: 18

ln.scb.het[18] <- log(

4*250*pow(1.3370471e-08,alpha) +

4*250*pow(2.2562669e-08,alpha) +

3*250*pow(6.6852353e-08,alpha) +

3*250*pow(8.0222823e-08,alpha) +

<LINES REMOVED>

1*250*pow(2.08913602e-05,alpha))

for(mesocosm in 1:18) {

#daily respiration

ln.P.Tc[mesocosm] <- ln.p0 + ln.scb.aut[mesocosm]

ln.R.Tc[mesocosm] <- log(exp(ln.r0.aut + ln.scb.aut[mesocosm]) + exp(ln.r0.het + ln.scb.het[mesocosm]))

for(date in 1:7) {

ln.P.D[mesocosm, date] ~ dnorm(mu.ln.P.D[mesocosm, date],tau.ln.P.D)

mu.ln.P.D[mesocosm, date] <- Ep*inv.kt[mesocosm, date] + ln.P.Tc[mesocosm]

ln.R.D[mesocosm, date] ~ dnorm(mu.ln.R.D[mesocosm, date],tau.ln.R.D)

mu.ln.R.D[mesocosm, date] <- Er*inv.kt[mesocosm, date] + ln.R.Tc[mesocosm]

}

#Boltzmann-averaged kinetics

ln.avg.kinetics.Ep[mesocosm] <- log(((exp(Ep*inv.kt[mesocosm,1]) + exp(Ep*inv.kt[mesocosm,7]))/2 + exp(Ep*inv.kt[mesocosm,2]) +

exp(Ep*inv.kt[mesocosm,3]) + exp(Ep*inv.kt[mesocosm,4]) + exp(Ep*inv.kt[mesocosm,5]) + exp(Ep*inv.kt[mesocosm,6]))/6)

ln.avg.kinetics.Er[mesocosm] <- log(((exp(Er*inv.kt[mesocosm,1]) + exp(Er*inv.kt[mesocosm,7]))/2 + exp(Er*inv.kt[mesocosm,2]) +

exp(Er*inv.kt[mesocosm,3]) + exp(Er*inv.kt[mesocosm,4]) + exp(Er*inv.kt[mesocosm,5]) + exp(Er*inv.kt[mesocosm,6]))/6)

}

}