88#include < stan/math/prim/err.hpp>
99#include < stan/math/prim/fun/value_of.hpp>
1010#include < stan/math/prim/functor/for_each.hpp>
11+ #include < sundials/sundials_context.h>
1112#include < cvodes/cvodes.h>
1213#include < nvector/nvector_serial.h>
1314#include < sunmatrix/sunmatrix_dense.h>
@@ -70,6 +71,7 @@ class cvodes_integrator_adjoint_vari : public vari_base {
7071 * vari class).
7172 */
7273 struct cvodes_solver : public chainable_alloc {
74+ sundials::Context sundials_context_;
7375 const std::string function_name_str_;
7476 const std::decay_t <F> f_;
7577 const size_t N_ ;
@@ -107,6 +109,7 @@ class cvodes_integrator_adjoint_vari : public vari_base {
107109 size_t num_args_vars, int solver_forward,
108110 const T_Args&... args)
109111 : chainable_alloc(),
112+ sundials_context_ (),
110113 function_name_str_(function_name),
111114 f_(std::forward<FF >(f)),
112115 N_(N),
@@ -119,22 +122,22 @@ class cvodes_integrator_adjoint_vari : public vari_base {
119122 state_backward_(Eigen::VectorXd::Zero(N)),
120123 quad_(Eigen::VectorXd::Zero(num_args_vars)),
121124 t0_(t0),
122- nv_state_forward_(N_VMake_Serial(N, state_forward_.data())),
123- nv_state_backward_(N_VMake_Serial(N, state_backward_.data())),
124- nv_quad_(N_VMake_Serial(num_args_vars, quad_.data())),
125+ nv_state_forward_(N_VMake_Serial(N, state_forward_.data(), sundials_context_ )),
126+ nv_state_backward_(N_VMake_Serial(N, state_backward_.data(), sundials_context_ )),
127+ nv_quad_(N_VMake_Serial(num_args_vars, quad_.data(), sundials_context_ )),
125128 nv_absolute_tolerance_forward_(
126- N_VMake_Serial (N, absolute_tolerance_forward_.data())),
129+ N_VMake_Serial (N, absolute_tolerance_forward_.data(), sundials_context_ )),
127130 nv_absolute_tolerance_backward_(
128- N_VMake_Serial (N, absolute_tolerance_backward_.data())),
129- A_forward_(SUNDenseMatrix(N, N)),
130- A_backward_(SUNDenseMatrix(N, N)),
131+ N_VMake_Serial (N, absolute_tolerance_backward_.data(), sundials_context_ )),
132+ A_forward_(SUNDenseMatrix(N, N, sundials_context_ )),
133+ A_backward_(SUNDenseMatrix(N, N, sundials_context_ )),
131134 LS_forward_(
132135 N == 0 ? nullptr
133- : SUNDenseLinearSolver (nv_state_forward_, A_forward_)),
136+ : SUNLinSol_Dense (nv_state_forward_, A_forward_, sundials_context_ )),
134137 LS_backward_(
135138 N == 0 ? nullptr
136- : SUNDenseLinearSolver (nv_state_backward_, A_backward_)),
137- cvodes_mem_(CVodeCreate(solver_forward)),
139+ : SUNLinSol_Dense (nv_state_backward_, A_backward_, sundials_context_ )),
140+ cvodes_mem_(CVodeCreate(solver_forward, sundials_context_ )),
138141 local_args_tuple_(deep_copy_vars(args)...),
139142 value_of_args_tuple_(value_of(args)...) {
140143 if (cvodes_mem_ == nullptr ) {
0 commit comments