mac-theobio / McMasterPandemic

SEIR+ model
GNU General Public License v3.0
20 stars 5 forks source link

tmb-condense branch segfaults when c++ make_state function is called #194

Closed stevencarlislewalker closed 2 years ago

stevencarlislewalker commented 2 years ago

Steps

Expected Result

The model is produced and printed without error

Actual Result

Segfault error message:

 *** caught segfault ***
address 0x0, cause 'memory not mapped'

Traceback:
 1: retape(set.defaults = TRUE)
 2: MakeADFun(data = list(state = c(state), ratemat = ratemat, from = null_to_int0(from),     to = null_to_int0(to), count = null_to_int0(count), spi = null_to_int0(spi),     modifier = null_to_int0(modifier), updateidx = null_to_int0(c(updateidx)),     breaks = null_to_int0(breaks), count_of_tv_at_breaks = null_to_int0(count_of_tv_at_breaks),     tv_val = null_to_num0(schedule$tv_val), tv_spi = null_to_int0(schedule$tv_spi),     tv_spi_unique = null_to_int0(sort(unique(schedule$tv_spi))),     tv_orig = null_to_log0(schedule$Type == "rel_orig"), tv_abs = null_to_log0(schedule$Type ==         "abs"), sumidx = null_to_int0(sumidx), sumcount = null_to_int0(unname(sumcount)),     summandidx = null_to_int0(summandidx), factr_spi = null_to_int0(factr_indices$spi_factr),     factr_count = null_to_int0(factr_indices$count), factr_spi_compute = null_to_int0(factr_indices$spi),     factr_modifier = null_to_int0(factr_indices$modifier), do_make_state = isTRUE(do_make_state),     max_iters_eig_pow_meth = int0_to_0(null_to_0(max_iters_eig_pow_meth)),     tol_eig_pow_meth = null_to_num0(tol_eig_pow_meth), outflow_row_count = null_to_int0(outflow$row_count),     outflow_col_count = null_to_int0(outflow$col_count), outflow_rows = null_to_int0(outflow$rows),     outflow_cols = null_to_int0(outflow$cols), linearized_outflow_row_count = null_to_int0(linearized_outflow$row_count),     linearized_outflow_col_count = null_to_int0(linearized_outflow$col_count),     linearized_outflow_rows = null_to_int0(linearized_outflow$rows),     linearized_outflow_cols = null_to_int0(linearized_outflow$cols),     lin_param_vals = null_to_num0(linearized_params$lin_param_vals),     lin_param_count = null_to_int0(linearized_params$lin_param_count),     lin_param_idx = null_to_int0(linearized_params$lin_param_idx),     df_state_par_idx = null_to_int0(disease_free$df_state_par_idx),     df_state_count = null_to_int0(disease_free$df_state_count),     df_state_idx = null_to_int0(disease_free$df_state_idx), im_all_drop_eigen_idx = null_to_int0(initialization_mapping$all_drop_eigen_idx),     im_eigen_drop_infected_idx = null_to_int0(initialization_mapping$eigen_drop_infected_idx),     im_all_to_infected_idx = null_to_int0(initialization_mapping$all_to_infected_idx),     im_susceptible_idx = null_to_int0(initialization_mapping$susceptible_idx),     ip_total_idx = int0_to_0(null_to_0(initial_population$total_idx)),     ip_infected_idx = int0_to_0(null_to_0(initial_population$infected_idx)),     do_hazard = isTRUE(do_hazard), do_hazard_lin = isTRUE(do_hazard_lin),     do_approx_hazard = isTRUE(do_approx_hazard), do_approx_hazard_lin = isTRUE(do_approx_hazard_lin),     sri_output = null_to_int0(sim_report_expr_indices$sri_output),     sr_count = null_to_int0(sim_report_expr_indices$sr_count),     sri = null_to_int0(sim_report_expr_indices$sri), sr_modifier = null_to_int0(sim_report_expr_indices$sr_modifier),     lag_diff_sri = null_to_int0(lag_diff$sri), lag_diff_delay_n = null_to_int0(lag_diff$delay_n),     conv_sri = null_to_int0(conv$sri), conv_c_prop_idx = null_to_int0(conv$c_prop_idx),     conv_c_delay_cv_idx = null_to_int0(conv$c_delay_cv_idx),     conv_c_delay_mean_idx = null_to_int0(conv$c_delay_mean_idx),     conv_qmax = null_to_int0(conv$qmax), obs_var_id = null_to_int0(observed$variable_id),     obs_loss_id = null_to_int0(observed$loss_id), obs_loss_param_count = null_to_int0(observed$loss_param_count),     obs_spi_loss_param = null_to_int0(observed$spi_loss_param),     obs_time_step = null_to_int0(observed$time_step), obs_history_col_id = null_to_int0(observed$history_col_id),     obs_value = observed$observed, opt_param_id = null_to_int0(index_table$opt_param_id),     opt_trans_id = null_to_int0(index_table$param_trans_id),     opt_count_reg_params = null_to_int0(index_table$count_hyperparams),     opt_reg_params = null_to_num0(hyperparameters), opt_reg_family_id = null_to_int0(index_table$prior_distr_id),     opt_tv_param_id = null_to_int0(index_tv_table$opt_tv_mult_id),     opt_tv_trans_id = null_to_int0(index_tv_table$param_trans_id),     opt_tv_count_reg_params = null_to_int0(index_tv_table$count_hyperparams),     opt_tv_reg_params = null_to_num0(hyperparameters_tv), opt_tv_reg_family_id = null_to_int0(index_tv_table$prior_distr_id),     numIterations = int0_to_0(null_to_0(iters))), parameters = list(params = c(unlist(params)),     tv_mult = null_to_num0(init_tv_mult)), map = map, DLL = DLL)
 3: tmb_fun(model)
 4: concatenated_state_vector(., sim_params)
 5: head(., length(model$state))
 6: setNames(., names(model$state))
 7: model %>% concatenated_state_vector(sim_params) %>% head(length(model$state)) %>%     setNames(names(model$state))
 8: initial_state_vector(model)
 9: update_initial_state(model, silent = TRUE)
10: make_base_model(params = read_params("PHAC.csv"), state = make_state(params = read_params("PHAC.csv")),     start_date = "2022-01-01", end_date = "2022-02-01", do_make_state = TRUE)
An irrecoverable exception occurred. R is aborting now ...
[1]    6254 segmentation fault  Rscript sandbox/do_make_state_segfault.R
stevencarlislewalker commented 2 years ago

The issue appears to be in the eigenvector calculation

guanwg commented 2 years ago

A bug fix has been checked in.

guanwg commented 2 years ago

Please insert the following two lines in sandbox/do_make_state_segfault.R.

set_spec_version("0.2.0", '../../inst/tmb')
tmb_mode()
stevencarlislewalker commented 2 years ago

You can feel free to add these lines @guanwg

stevencarlislewalker commented 2 years ago

Closed with 043b7297bc6d65aab13e0f86376c065495b9e338