From e452e915ace207e28b02e5ef95d49a57c51f93a8 Mon Sep 17 00:00:00 2001 From: Rich FitzJohn Date: Fri, 16 Aug 2024 14:59:21 +0100 Subject: [PATCH] Move to new packing structure --- DESCRIPTION | 2 +- R/dust.R | 2 +- inst/dust/cows.cpp | 11 ++++++++--- src/cows.cpp | 13 +++++++++---- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index cc074c5..116cf22 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -18,7 +18,7 @@ Imports: dust2 LinkingTo: cpp11, - dust2, + dust2 (>= 0.1.1), mcstate2 Suggests: testthat (>= 3.0.0) diff --git a/R/dust.R b/R/dust.R index c1865f8..be67b27 100644 --- a/R/dust.R +++ b/R/dust.R @@ -1,4 +1,4 @@ -## Generated by dust2 (version 0.1.0) - do not edit +## Generated by dust2 (version 0.1.1) - do not edit cows <- function() { dust2::dust_system_generator("cows", "discrete") } diff --git a/inst/dust/cows.cpp b/inst/dust/cows.cpp index a4983df..96e3f9a 100644 --- a/inst/dust/cows.cpp +++ b/inst/dust/cows.cpp @@ -60,8 +60,12 @@ class cows { using rng_state_type = mcstate::random::generator; - static size_t size_state(const shared_state& shared) { - return 4 * (shared.n_herds + shared.n_regions); + static auto packing_state(const shared_state& shared) { + return dust2::packing{{"S_herd", {shared.n_herds}}, {"S_region", {shared.n_regions}}, {"E_herd", {shared.n_herds}}, {"E_region", {shared.n_regions}}, {"I_herd", {shared.n_herds}}, {"I_region", {shared.n_regions}}, {"R_herd", {shared.n_herds}}, {"R_region", {shared.n_regions}}}; + } + + static auto packing_gradient(const shared_state& shared) { + return dust2::packing{}; } static void initial(real_type time, @@ -71,7 +75,8 @@ class cows { rng_state_type& rng_state, real_type * state_next) { // Start by zeroing everything - std::fill(state_next, state_next + size_state(shared), 0); + const auto len_state = 4 * (shared.n_herds + shared.n_regions); + std::fill(state_next, state_next + len_state, 0); // Then fill in susceptibles from the mean herd size // // Thom: should this be drawn from some distribution? If so that diff --git a/src/cows.cpp b/src/cows.cpp index a050085..73e5034 100644 --- a/src/cows.cpp +++ b/src/cows.cpp @@ -1,4 +1,4 @@ -// Generated by dust2 (version 0.1.0) - do not edit +// Generated by dust2 (version 0.1.1) - do not edit #include #include @@ -62,8 +62,12 @@ class cows { using rng_state_type = mcstate::random::generator; - static size_t size_state(const shared_state& shared) { - return 4 * (shared.n_herds + shared.n_regions); + static auto packing_state(const shared_state& shared) { + return dust2::packing{{"S_herd", {shared.n_herds}}, {"S_region", {shared.n_regions}}, {"E_herd", {shared.n_herds}}, {"E_region", {shared.n_regions}}, {"I_herd", {shared.n_herds}}, {"I_region", {shared.n_regions}}, {"R_herd", {shared.n_herds}}, {"R_region", {shared.n_regions}}}; + } + + static auto packing_gradient(const shared_state& shared) { + return dust2::packing{}; } static void initial(real_type time, @@ -73,7 +77,8 @@ class cows { rng_state_type& rng_state, real_type * state_next) { // Start by zeroing everything - std::fill(state_next, state_next + size_state(shared), 0); + const auto len_state = 4 * (shared.n_herds + shared.n_regions); + std::fill(state_next, state_next + len_state, 0); // Then fill in susceptibles from the mean herd size // // Thom: should this be drawn from some distribution? If so that