#Example Rumen Passage and SI Digestion Model for NANP Modeling Workshop #Time is in hours, mass in kg, and fluxes in kg/h library(deSolve); #Load the deSolve package) #A list of times to output predictions time <- seq(0, 100, by = 4) #Gut model - Rum plus SI Gut <- function(t, parms) { #Derivative section derivs <- function(t, state, parms) { with(as.list(c(state, parms)), { #Constants and Fluxes Fin <- DMI * Cnut FRumDeg <- Qrum * Kdeg FRumSI <- Qrum * Kpas RDnut <- FRumDeg/Fin #Differentials dQrum <- Fin - FRumDeg - FRumSI #Intestinal Components FSIAbs <- FRumSI * KSIAbs FSIFec <- FRumSI - FSIAbs TDnut <- (Fin - FSIFec) / Fin return(list(dQrum,Fin=Fin,FRumDeg=FRumDeg,FRumSI=FRumSI,FSIAbs=FSIAbs,RDnut=RDnut,TDnut=TDnut)) # return(list(dQrum,Fin=Fin,FRumSI=FRumSI,FSIAbs=FSIAbs,RDnut=RDnut,TDnut=TDnut)) }) } state <- c(Qrum=5.0) return(ode(y=state, times=t, func=derivs, parms=pars, method="rk4")) } #End of the Gut model function #Model Inputs DMI = 1.0; #kg DM/h Cnut = 0.3; #kg/kg DM Kdeg = 0.032; #per hour Kpas = 0.025; #per hour KSIAbs = 0.95; pars <- c(DMI,Cnut,Kdeg,Kpas,KSIAbs); #Define the list of model inputs out <- Gut(time, pars); #Call the model passing time and pars vectors #Model output is collected in the out matrix summary(out); #Summarize output plot(out)