diff --git a/src/random_mars.cpp b/src/random_mars.cpp index ab357591e7..93d226da6a 100644 --- a/src/random_mars.cpp +++ b/src/random_mars.cpp @@ -287,3 +287,31 @@ void RanMars::select_subset(bigint ntarget, int nmine, int *mark, int *next) // niter,nmark,nactiveall,thresh,nflipall); } } + +/* ---------------------------------------------------------------------- + store state in buffer +------------------------------------------------------------------------- */ + +void RanMars::get_state(double *state) +{ + for (int i=0; i < 98; ++i) state[i] = u[i]; + state[98] = i97; + state[99] = j97; + state[100]= c; + state[101]= cd; + state[102]= cm; +} + +/* ---------------------------------------------------------------------- + restore state from buffer +------------------------------------------------------------------------- */ + +void RanMars::set_state(double *state) +{ + for (int i=0; i < 98; ++i) u[i] = state[i]; + i97 = state[98]; + j97 = state[99]; + c = state[100]; + cd = state[101]; + cm = state[102]; +} diff --git a/src/random_mars.h b/src/random_mars.h index 03199c84e8..1bcd16b051 100644 --- a/src/random_mars.h +++ b/src/random_mars.h @@ -28,6 +28,8 @@ class RanMars : protected Pointers { double rayleigh(double sigma); double besselexp(double theta, double alpha, double cp); void select_subset(bigint, int, int *, int *); + void get_state(double *); + void set_state(double *); private: int save;