#####Middle Eocene greenhouse warming facilitated by diminished weathering feedback
#####Van der Ploeg et al.

#####Supplementary Software 1 - Os cycle model code

###Description

##The following lines of code were used for our Os cycle model simulations.
##For a full derivation of the equations used here, please refer to the Methods.
##Scenarios 1-12 are presented in Supplementary Table 4 and the Os cycle parameters are presented in Supplementary Table 5.
##Note: this code makes use of R package deSolve to solve differential equations.

###Preparation

##Set model timescale
x = seq(from = 0, to = 1000, by = 1) #Model timescale = 1000 kyr, timestep = 1 kyr

##Present-day Os cycle parameters (see Supplementary Table 7)
N.Os = 7.2e7 #Os inventory in oceans
F.riv.Os = 1800e6 #Riverine Os flux to oceans
F.ext.Os = 80e6 #Extraterrestrial Os flux to oceans
R.riv.Os = 1.4 #187Os/188Os composition of rivers
R.hyd.Os = 0.13 #187Os/188Os composition of hydrothermal fluids
R.ext.Os = 0.13 #187Os/188Os composition of extraterrestrial dust
R.sw.Os = 1.06 #187Os/188Os composition of seawater

##Calculation of present-day F.hyd.Os to arrive at steady state with R.sw.Os = 1.06
test.f <- function(F.hyd.Os) return((F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/(N.Os/(7.4+R.sw.Os))) #Find F.hyd.Os for dR.sw.Os / dt = 0 in equation (20)
result <- uniroot(f = test.f, interval = c(100e5, 100e7), tol = 0.0000000001) #Result from fitting F.hyd.Os
F.hyd.Os.calc <- result$root #Calculated hydrothermal Os flux to oceans

F.sed.Os = F.riv.Os+F.hyd.Os.calc+F.ext.Os #Calculated sedimentary Os flux from oceans

##Pre-MECO Os cycle parameters (see Supplementary Table 7)
N.Os.preMECO = N.Os #Os inventory in oceans
F.ext.Os.preMECO = F.ext.Os #Extraterrestrial Os flux to oceans
F.sed.Os.preMECO = F.sed.Os #Sedimentary Os flux from oceans
R.riv.Os.preMECO = R.riv.Os #187Os/188Os composition of rivers
R.hyd.Os.preMECO = R.hyd.Os #187Os/188Os composition of hydrothermal fluids
R.ext.Os.preMECO = R.ext.Os #187Os/188Os composition of extraterrestrial dust
R.sw.Os.preMECO = 0.55 #187Os/188Os composition of seawater

##Calculation of pre-MECO F.riv.Os and F.hyd.Os to arrive at steady state with R.sw.Os = 0.55
test.f <- function(F.hyd.Os.preMECO) return(((F.sed.Os.preMECO-F.hyd.Os.preMECO-F.ext.Os.preMECO)*((R.riv.Os.preMECO-R.sw.Os.preMECO)/(7.4+R.riv.Os.preMECO))+F.hyd.Os.preMECO*((R.hyd.Os.preMECO-R.sw.Os.preMECO)/(7.4+R.hyd.Os.preMECO))+F.ext.Os.preMECO*((R.ext.Os.preMECO-R.sw.Os.preMECO)/(7.4+R.ext.Os.preMECO)))/(N.Os.preMECO/(7.4+R.sw.Os.preMECO))) #Find F.hyd.Os.preMECO for dR.sw.Os / dt = 0 in equation (20)
result <- uniroot(f = test.f, interval = c(1000e5, 1000e7), tol = 0.0000000001) #Result from fitting F.hyd.Os.preMECO
F.hyd.Os.preMECO.calc <- result$root #Calculated hydrothermal Os flux to oceans

F.riv.Os.preMECO.calc = F.sed.Os-F.hyd.Os.preMECO.calc-F.ext.Os #Calculated riverine Os flux to oceans

###Forcing functions for hydrothermal Os flux

##Timeseries Scenarios 1-12
k.volc.1 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 1.1, length.out = 500), rep(1, 450))) #Scenario 1
k.volc.2 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 1.15, length.out = 500), rep(1, 450))) #Scenario 2
k.volc.3 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 1.2, length.out = 500), rep(1, 450))) #Scenario 3
k.volc.4 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 1.1, length.out = 500), rep(1, 450))) #Scenario 4
k.volc.5 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 1.15, length.out = 500), rep(1, 450))) #Scenario 5
k.volc.6 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 1.2, length.out = 500), rep(1, 450))) #Scenario 6
k.volc.7 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 1001))) #Scenario 7
k.volc.8 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 1001))) #Scenario 8
k.volc.9 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 1001))) #Scenario 9
k.volc.10 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 1.05, length.out = 500), rep(1, 450))) #Scenario 10
k.volc.11 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 1001))) #Scenario 11
k.volc.12 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 1001))) #Scenario 12

##Forcing functions Scenarios 1-12
k.volc.1f <- approxfun(k.volc.1) #Scenario 1
k.volc.2f <- approxfun(k.volc.2) #Scenario 2
k.volc.3f <- approxfun(k.volc.3) #Scenario 3
k.volc.4f <- approxfun(k.volc.4) #Scenario 4
k.volc.5f <- approxfun(k.volc.5) #Scenario 5
k.volc.6f <- approxfun(k.volc.6) #Scenario 6
k.volc.7f <- approxfun(k.volc.7) #Scenario 7
k.volc.8f <- approxfun(k.volc.8) #Scenario 8
k.volc.9f <- approxfun(k.volc.9) #Scenario 9
k.volc.10f <- approxfun(k.volc.10) #Scenario 10
k.volc.11f <- approxfun(k.volc.11) #Scenario 11
k.volc.12f <- approxfun(k.volc.12) #Scenario 12

###Scaled silicate and carbonate weathering C fluxes for Scenarios 1-3

##Scenario 1
CO2.1 <- read.csv("1.csv", header = TRUE) #Load LOSCAR CO2 output for Scenario 1
CO2.1 <- data.frame(x = CO2.1$Time/1000, y = CO2.1$CO2) #Adjust timescale
CO2.1.spl <- smooth.spline(CO2.1) #Create smoothing spline
CO2.1.pred <- predict(CO2.1.spl, x) #Resample data at t = x
CO2.1.calc <- data.frame(x = x, y = CO2.1.pred$y) #Resampled CO2 forcing
k.silw.1 <- data.frame(x = x, y = (CO2.1.calc$y/CO2.1.calc$y[1])^0.2) #Calculated relative change in silicate weathering C flux
k.carbw.1 <- data.frame(x = x, y = (CO2.1.calc$y/CO2.1.calc$y[1])^0.4) #Calculated relative change in carbonate weathering C flux

##Scenario 2
CO2.2 <- read.csv("2.csv", header = TRUE) #Load LOSCAR CO2 output for Scenario 2
CO2.2 <- data.frame(x = CO2.2$Time/1000, y = CO2.2$CO2) #Adjust timescale
CO2.2.spl <- smooth.spline(CO2.2) #Create smoothing spline
CO2.2.pred <- predict(CO2.2.spl, x) #Resample data at t = x
CO2.2.calc <- data.frame(x = x, y = CO2.2.pred$y) #Resampled CO2 forcing
k.silw.2 <- data.frame(x = x, y = (CO2.2.calc$y/CO2.2.calc$y[1])^0.2) #Calculated relative change in silicate weathering C flux
k.carbw.2 <- data.frame(x = x, y = (CO2.2.calc$y/CO2.2.calc$y[1])^0.4) #Calculated relative change in carbonate weathering C flux

##Scenario 3
CO2.3 <- read.csv("3.csv", header = TRUE) #Load LOSCAR CO2 output for Scenario 3
CO2.3 <- data.frame(x = CO2.3$Time/1000, y = CO2.3$CO2) #Adjust timescale
CO2.3.spl <- smooth.spline(CO2.3) #Create smoothing spline
CO2.3.pred <- predict(CO2.3.spl, x) #Resample data at t = x
CO2.3.calc <- data.frame(x = x, y = CO2.3.pred$y) #Resampled CO2 forcing
k.silw.3 <- data.frame(x = x, y = (CO2.3.calc$y/CO2.3.calc$y[1])^0.2) #Calculated relative change in silicate weathering C flux
k.carbw.3 <- data.frame(x = x, y = (CO2.3.calc$y/CO2.3.calc$y[1])^0.4) #Calculated relative change in carbonate weathering C flux

###Forcing functions for riverine Os flux

##Timeseries Scenarios 4-12
k.riv.4 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 1001))) #Scenario 4
k.riv.5 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 1001))) #Scenario 5
k.riv.6 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 1001))) #Scenario 6
k.riv.7 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 0.9, length.out = 500), rep(1, 450))) #Scenario 7
k.riv.8 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 0.85, length.out = 500), rep(1, 450))) #Scenario 8
k.riv.9 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 0.8, length.out = 500), rep(1, 450))) #Scenario 9
k.riv.10 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 0.95, length.out = 500), rep(1, 450))) #Scenario 10
k.riv.11 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 0.9, length.out = 500), rep(1, 450))) #Scenario 11
k.riv.12 <- data.frame(x = seq(from = 0, to = 1000, by = 1), y = c(rep(1, 51), seq(from = 1, to = 0.9, length.out = 500), rep(1, 450))) #Scenario 12

##Forcing functions Scenarios 1-12
k.riv.1f <- approxfun(k.silw.1) #Scenario 1
k.riv.2f <- approxfun(k.silw.2) #Scenario 2
k.riv.3f <- approxfun(k.silw.3) #Scenario 3
k.riv.4f <- approxfun(k.riv.4) #Scenario 4
k.riv.5f <- approxfun(k.riv.5) #Scenario 5
k.riv.6f <- approxfun(k.riv.6) #Scenario 6
k.riv.7f <- approxfun(k.riv.7) #Scenario 7
k.riv.8f <- approxfun(k.riv.8) #Scenario 8
k.riv.9f <- approxfun(k.riv.9) #Scenario 9
k.riv.10f <- approxfun(k.riv.10) #Scenario 10
k.riv.11f <- approxfun(k.riv.11) #Scenario 11
k.riv.12f <- approxfun(k.riv.12) #Scenario 12

###Model scenarios

##Load deSolve package
require(deSolve)

##Scenario 1
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.1f(t) #Hydrothermal forcing
          kriv <- k.riv.1f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) #Equation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out1 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.1 <- data.frame(x = x, y = out1[,2]) #Modeled Os inventory of seawater
R.Os.1 <- data.frame(x = x, y = out1[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 2
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.2f(t) #Hydrothermal forcing
          kriv <- k.riv.2f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) #Equation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out2 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.2 <- data.frame(x = x, y = out2[,2]) #Modeled Os inventory of seawater
R.Os.2 <- data.frame(x = x, y = out2[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 3
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.3f(t) #Hydrothermal forcing
          kriv <- k.riv.3f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) #Equation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out3 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.3 <- data.frame(x = x, y = out3[,2]) #Modeled Os inventory of seawater
R.Os.3 <- data.frame(x = x, y = out3[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 4
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.4f(t) #Hydrothermal forcing
          kriv <- k.riv.4f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) #Equation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out4 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.4 <- data.frame(x = x, y = out4[,2]) #Modeled Os inventory of seawater
R.Os.4 <- data.frame(x = x, y = out4[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 5
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.5f(t) #Hydrothermal forcing
          kriv <- k.riv.5f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) #Equation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out5 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.5 <- data.frame(x = x, y = out5[,2]) #Modeled Os inventory of seawater
R.Os.5 <- data.frame(x = x, y = out5[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 6
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.6f(t) #Hydrothermal forcing
          kriv <- k.riv.6f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) #Equation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out6 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.6 <- data.frame(x = x, y = out6[,2]) #Modeled Os inventory of seawater
R.Os.6 <- data.frame(x = x, y = out6[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 7
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.7f(t) #Hydrothermal forcing
          kriv <- k.riv.7f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) #Equation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out7 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.7 <- data.frame(x = x, y = out7[,2]) #Modeled Os inventory of seawater
R.Os.7 <- data.frame(x = x, y = out7[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 8
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.8f(t) #Hydrothermal forcing
          kriv <- k.riv.8f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) #Equation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out8 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.8 <- data.frame(x = x, y = out8[,2]) #Modeled Os inventory of seawater
R.Os.8 <- data.frame(x = x, y = out8[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 9
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.9f(t) #Hydrothermal forcing
          kriv <- k.riv.9f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) #Equation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out9 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.9 <- data.frame(x = x, y = out9[,2]) #Modeled Os inventory of seawater
R.Os.9 <- data.frame(x = x, y = out9[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 10
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.10f(t) #Hydrothermal forcing
          kriv <- k.riv.10f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) #Equation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out10 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.10 <- data.frame(x = x, y = out10[,2]) #Modeled Os inventory of seawater
R.Os.10 <- data.frame(x = x, y = out10[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 11
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.11f(t) #Hydrothermal forcing
          kriv <- k.riv.11f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) Eequation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out11 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.11 <- data.frame(x = x, y = out11[,2]) #Modeled Os inventory of seawater
R.Os.11 <- data.frame(x = x, y = out11[,3]) #Modeled 187Os/188Os composition of seawater

##Scenario 12
model <- function(t, state, parameters) #Model description for differential equations
{
  with (as.list(c(state, parameters)),
        {
          
          kvolc <- k.volc.12f(t) #Hydrothermal forcing
          kriv <- k.riv.12f(t) #Riverine forcing
          
          dN.Os <- kriv*F.riv.Os+kvolc*F.hyd.Os+F.ext.Os-k.Os*N.Os #Equation (15)
          dR.sw.Os <- ((kriv*F.riv.Os*((R.riv.Os-R.sw.Os)/(7.4+R.riv.Os))+kvolc*F.hyd.Os*((R.hyd.Os-R.sw.Os)/(7.4+R.hyd.Os))+F.ext.Os*((R.ext.Os-R.sw.Os)/(7.4+R.ext.Os)))/((N.Os/(7.4+R.sw.Os)))) Eequation (20)
          
          return (list(c(dN.Os, dR.sw.Os))) #State variables to be solved
        })
}
parameters <- c(F.riv.Os = F.riv.Os.preMECO.calc, F.hyd.Os = F.hyd.Os.preMECO.calc, F.ext.Os = F.ext.Os.preMECO, k.Os = (F.sed.Os.preMECO)/(N.Os.preMECO), R.riv.Os = R.riv.Os.preMECO, R.hyd.Os = R.hyd.Os.preMECO, R.ext.Os = R.hyd.Os.preMECO) #Pre-MECO Os cycle parameters
state <- c(N.Os = N.Os.preMECO, R.sw.Os = R.sw.Os.preMECO) #Initial values of state variables N.Os and R.sw.Os
time.seq <- x #Timescale
out12 <- ode(y=state,times=time.seq,func=model,parms=parameters) #Model execution

N.Os.12 <- data.frame(x = x, y = out12[,2]) #Modeled Os inventory of seawater
R.Os.12 <- data.frame(x = x, y = out12[,3]) #Modeled 187Os/188Os composition of seawater

#####