Hi there R-helpers: I'm having problems with the function ode() found in the package deSolve. It seems that when my state variables are too numerous (>33000 elements), the function throws the following error: Error in vode(y, times, func, parms, ...) : cannot allocate memory block of size 137438953456.0 Gb In addition: Warning message: In vode(y, times, func, parms, ...) : NAs introduced by coercion This appears to be case regardless of the computer I use; that is, whether it's a laptop or server with 24Gb of RAM. Why is ode() trying to allocate 137 billion gigabytes of memory?! (I receive exactly the same error message whether I have, for example, 34000 or 80000 state variables: the amount of memory trying to be allocated is exactly the same.) I have included a trivial example below that uses a function that returns a rate of change of zero for all state variables.> require(deSolve)Loading required package: deSolve> C<-rep(0,34000) > TestFunc<-function(t,C,para){+ return(list(rep(0,length(C)))) + }> soln<-ode(y=C,times=seq(0,1,0.1),func=TestFunc,parms=c(0),method="vode")Error in vode(y, times, func, parms, ...) : cannot allocate memory block of size 137438953456.0 Gb In addition: Warning message: In vode(y, times, func, parms, ...) : NAs introduced by coercion>Am I making a foolish mistake somewhere or is this simply a limitation of the function? Thanks in advance! [[alternative HTML version deleted]]
Hi there R-helpers: I'm having problems with the function ode() found in the package deSolve. It seems that when my state variables are too numerous (>33000 elements), the function throws the following error: Error in vode(y, times, func, parms, ...) : cannot allocate memory block of size 137438953456.0 Gb In addition: Warning message: In vode(y, times, func, parms, ...) : NAs introduced by coercion This appears to be case regardless of the computer I use; that is, whether it's a laptop or server with 24Gb of RAM. Why is ode() trying to allocate 137 billion gigabytes of memory?! (I receive exactly the same error message whether I have, for example, 34000 or 80000 state variables: the amount of memory trying to be allocated is exactly the same.) I have included a trivial example below that uses a function that returns a rate of change of zero for all state variables.> require(deSolve)Loading required package: deSolve> C<-rep(0,34000) > TestFunc<-function(t,C,para){+ return(list(rep(0,length(C)))) + }> soln<-ode(y=C,times=seq(0,1,0.1),func=TestFunc,parms=c(0),method="vode")Error in vode(y, times, func, parms, ...) : cannot allocate memory block of size 137438953456.0 Gb In addition: Warning message: In vode(y, times, func, parms, ...) : NAs introduced by coercion>Am I making a foolish mistake somewhere or is this simply a limitation of the function? Thanks in advance! [[alternative HTML version deleted]]
Karline Soetaert
2012-Feb-04 17:01 UTC
[R] ode() tries to allocate an absurd amount of memory
Thomas, It is a limitation of the function you are using. The method "vode" is an implicit method, meaning that it has to create and invert a matrix of the size = number of variables ^2. In your case, this is a full matrix of 33000 rows and columns. If your ODE is easy to solve, you might try to use method = "adams" or method = "ode45", which will select an explicit method, that does not need this huge matrix. If you are trying to solve a PDE, you probably want to use ode.1D or ode.2D or ode.3D depending on the dimensionality of your PDE. It is possible to solve problems of the order 1e5 variables with these functions. If it is not a PDE, and it cannot be solved with adams or ode45, then you might try method = "lsodes" which will select a sparse solver. Hope this helps, Karline By the way, there exists a mailing list, called R-sig-dynamic-models that deals with this type of questions. Original message: Date: Fri, 3 Feb 2012 09:33:05 -0500 From: Thomas Brown <thomasbrown8128@gmail.com<mailto:thomasbrown8128@gmail.com>> To: r-help@r-project.org<mailto:r-help@r-project.org> Subject: [R] ode() tries to allocate an absurd amount of memory Message-ID: <CAF9VQ7zNR26sxUCRDsYEm1ietTTaj13TMnvdnCPfz8t56yJMXw@mail.gmail.com<mailto:CAF9VQ7zNR26sxUCRDsYEm1ietTTaj13TMnvdnCPfz8t56yJMXw@mail.gmail.com>> Content-Type: text/plain Hi there R-helpers: I'm having problems with the function ode() found in the package deSolve. It seems that when my state variables are too numerous (>33000 elements), the function throws the following error: Error in vode(y, times, func, parms, ...) : cannot allocate memory block of size 137438953456.0 Gb In addition: Warning message: In vode(y, times, func, parms, ...) : NAs introduced by coercion This appears to be case regardless of the computer I use; that is, whether it's a laptop or server with 24Gb of RAM. Why is ode() trying to allocate 137 billion gigabytes of memory?! (I receive exactly the same error message whether I have, for example, 34000 or 80000 state variables: the amount of memory trying to be allocated is exactly the same.) I have included a trivial example below that uses a function that returns a rate of change of zero for all state variables.> require(deSolve)Loading required package: deSolve> C<-rep(0,34000)> TestFunc<-function(t,C,para){+ return(list(rep(0,length(C)))) + }> soln<-ode(y=C,times=seq(0,1,0.1),func=TestFunc,parms=c(0),method="vode")Error in vode(y, times, func, parms, ...) : cannot allocate memory block of size 137438953456.0 Gb In addition: Warning message: In vode(y, times, func, parms, ...) : NAs introduced by coercion>Am I making a foolish mistake somewhere or is this simply a limitation of the function? Thanks in advance! [[alternative HTML version deleted]]