<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle18
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-NZ" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">I am developing a simulation model in C++ and I want to expose it to R for testing. The model is in a C++ class and uses the boost::odeint library for numerical integration. I am also using an unordered_map to expose
 the model variables to the user. <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I am having some trouble exposing the class functionality to C++, either as separate // [[Rcpp::export]] methods or using RCPP_MODULE. The following code successfully instantiates the model and returns the unordered_map
 but crashes Rcpp if I try to access the advance(t,dt) method.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"># sample code embedded in an R script<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">library(Rcpp)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Sys.setenv("PKG_CXXFLAGS"='-I"C:/boost/boost_1_66_0"')<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">sourceCpp(code='<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          #include <unordered_map><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          #include <string><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          #define BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          #include <boost/numeric/odeint.hpp><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          #include <Rcpp.h><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // Enable C++11 via this plugin (Rcpp 0.10.3 or later)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // [[Rcpp::plugins(cpp11)]]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          using namespace std;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          using namespace boost::numeric::odeint;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          using namespace Rcpp;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          class spring{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          public:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // unordered_map gives user efficient access to variables by name<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // https://stackoverflow.com/questions/8483985/obtaining-list-of-keys-and-values-from-unordered-map<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // will be more efficient if we intelligently reserve storage for the map at construction time<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // https://stackoverflow.com/questions/15135900/how-to-pass-a-mapdouble-t-from-c-to-r-with-rcpp<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          unordered_map< string , double > variable;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          private:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // declare state_type and system_time<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          typedef boost::array< double , 3 > state_type;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          double system_time;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          const int system_variables = 12; // number of variables available to user<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // declare boost::odeint stepper<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          typedef runge_kutta4< state_type > stepper_type;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          stepper_type stepper;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // state variables<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          double time;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          double xd;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          double x;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // constants<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          const double k = 0.12;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          const double a = 1.0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          const double w = 1.0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          const double g = 9.81;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          const double mass = 0.03;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          const double xdic = 0.0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          const double xic = 0.0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // other variables<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          double xdd = -999;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          public:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // constructor<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          spring(){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // reserve buckets to minimise storage and avoid rehashing<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // note: only need variables the user needs to set or get<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable.reserve( system_variables );<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          void initialise_model( double a_system_time ){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // initialise system time<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          system_time = a_system_time;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // initial calculations<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // initial conditions<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          time = 0.0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          xd = xdic;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          x = xic;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          void pull_variables_from_model(){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // generic system property<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["system_time"] = system_time;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // state variables<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["time"] = time;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["xd"] = xd;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["x"] = x;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // constants<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["k"] = k;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["a"] = a;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["w"] = w;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["g"] = g;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["mass"] = mass;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["xdic"] = xdic;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["xic"] = xic;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // other variables<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          variable["xdd"] = xdd;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          void push_variables_to_model(){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // generic system property<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          system_time = variable["system_time"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // state variables<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          time = variable["time"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          xd = variable["xd"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          x = variable["x"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // constants (cant change these)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          //                 k = variable["k"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          //                 a = variable["a"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          //                 w = variable["w"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          //                 g = variable["g"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          //                 mass = variable["mass"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          //                 xdic = variable["xdic"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          //                 xic = variable["xic"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // other variables<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          xdd = variable["xdd"];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          private:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          state_type get_state(){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          state_type a_state;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // return current state<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          a_state[0] = time;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          a_state[1] = xd;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          a_state[2] = x;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          return( a_state );<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          void set_state( state_type a_state ){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // set state<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          time = a_state[0];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          xd = a_state[1];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          x = a_state[2];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          public:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          void calculate_rate(){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // calculations<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          xdd = ( mass * g - k * xd - a * x ) / mass;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          public:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // called by boost::odeint::integrate()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          void operator()( const state_type &a_state , state_type &a_rate, double a_time ){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // set state<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          system_time = a_time;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          time = a_state[0];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          xd = a_state[1];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          x = a_state[2];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // calculate rate<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          calculate_rate();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // return rate<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          a_rate[0] = 1.0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          a_rate[1] = xdd;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          a_rate[2] = xd;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          void advance( const double end_time , const double time_step ){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          double a_time;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          state_type a_state;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          a_time = system_time;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          a_state = get_state();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // https://stackoverflow.com/questions/10976078/using-boostnumericodeint-inside-the-class<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          integrate_const( stepper , *this , a_state, a_time , end_time , time_step );<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          system_time = end_time;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          set_state( a_state );<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          calculate_rate();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }; // end class spring_type<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          spring my_spring;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // https://stackoverflow.com/questions/34181135/converting-an-stdmap-to-an-rcpplist<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // [[Rcpp::export]]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          void initialise_model( double t ){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          my_spring.initialise_model( t );<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">         // [[Rcpp::export]]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          void pull_variables_from_model(){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          my_spring.pull_variables_from_model();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // [[Rcpp::export]]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          NumericVector get_spring_variables(){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          NumericVector my_vector;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          my_vector = my_spring.variable; // coerces unordered_map to named vector<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          return my_vector;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // whenever I try to expose the advance method I get an error<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // // [[Rcpp::export]]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // void advance( double t , double dt ){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // my_spring.advance( t , dt );<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          int main(){<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          // do nothing<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">          ') # end of sourceCpp<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"># instantiate and query the model<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">initialise_model(0)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">pull_variables_from_model()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">x <- get_spring_variables()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">print(x) # this all works.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"># I now want to do this<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">advance( 1 , 0.1)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">pull_variables_from_model()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">x <- get_spring_variables() # is this necessary?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">print(x)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"># end of R script<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Thank you<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="color:black;mso-fareast-language:EN-NZ"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><b><span style="color:black;mso-fareast-language:EN-NZ">Simon Woodward</span></b><span style="color:black;mso-fareast-language:EN-NZ"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="color:black;mso-fareast-language:EN-NZ">Senior Scientist (Mathematical Modelling)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><b><i><span style="font-size:16.0pt;color:black;mso-fareast-language:EN-NZ">Dairy</span></i></b><b><i><span style="font-size:16.0pt;color:#33CC33;mso-fareast-language:EN-NZ">NZ</span></i></b><i><span style="font-size:16.0pt;color:black;mso-fareast-language:EN-NZ"><o:p></o:p></span></i></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.0pt;color:black;mso-fareast-language:EN-NZ">Cnr Ruakura & Morrinsville Roads | Newstead | Private Bag 3221| Hamilton 3240 | NEW ZEALAND<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.0pt;color:black;mso-fareast-language:EN-NZ">Ph +64 7 858 3750 | DDI +64 7 858 3787 | Fax +64 7 858 3751<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.0pt;color:black;mso-fareast-language:EN-NZ">Web
<a href="http://www.dairynz.co.nz/"><span style="color:blue">www.dairynz.co.nz</span></a> |
</span><u><span style="font-size:8.0pt;color:blue;mso-fareast-language:EN-NZ"><a href="http://www.godairy.co.nz/"><span style="color:blue">www.GoDairy.co.nz</span></a></span></u><span style="font-size:8.0pt;color:black;mso-fareast-language:EN-NZ"> |
<a href="http://www.getfresh.co.nz/"><span style="color:blue">www.getfresh.co.nz</span></a>
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</body>
</html>