I've tried to write the extended version of the water formation system (OH included). I wonder if anyone else has tried it so we can compare our codes. Here is the function:
complex_water_formation <- function(N, r1_rate, r2_rate, r3_rate, r4_rate, H_ini, O_ini, OH_ini, W_ini) {
W <- d_W <- rep(NA, N)
OH <- d_OH <- rep(NA, N)
O <- d_O <- rep(NA, N)
H <- d_H <- rep(NA, N)
W[1] <- W_ini
OH[1] <- OH_ini
O[1] <- O_ini
H[1] <- H_ini
d_W[1] <- d_OH[1] <- d_O[1] <- d_H[1] <- 0
for(i in 2:N) {
d_W[i] <- r4_rate * d_OH[i-1] * d_H[i-1] - r3_rate * d_W[i-1]
d_OH[i] <- -r4_rate * d_H[i-1] * d_OH[i-1] - r2_rate * d_OH[i-1] + r1_rate * d_O[i-1] * d_H[i-1] + r3_rate * d_W[i-1]
d_O[i] <- -r1_rate * d_H[i-1] * d_O[i-1] + r2_rate * d_OH[i-1]
d_H[i] <- r2_rate * d_OH[i-1] + r3_rate * d_W[i-1] - r1_rate * d[H-1] * d_O[i-1] - r4_rate * d_H[i-1] * d_OH[i-1]
W[i] <- W[i-1] + d_W[i]
OH[i] <- OH[i-1] + d_OH[i]
O[i] <- O[i-1] + d_O[i]
H[i] <- H[i-1] + d_H[i]
}
return(data.frame(W, H, O, OH))
}