Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 48 additions & 43 deletions cpp/benchmarks/flow_simulation_ode_secirvvs.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,9 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
auto icu_occupancy = 0.0;
auto test_and_trace_required = 0.0;
for (auto i = AgeGroup(0); i < n_agegroups; ++i) {
auto rateINS =
0.5 / (params.get<osecirvvs::IncubationTime>()[i] - params.get<osecirvvs::SerialInterval>()[i]);
test_and_trace_required +=
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * rateINS *
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) /
params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] *
(this->populations.get_from(pop, {i, InfectionState::InfectedNoSymptomsNaive}) +
this->populations.get_from(pop, {i, InfectionState::InfectedNoSymptomsPartialImmunity}) +
this->populations.get_from(pop, {i, InfectionState::InfectedNoSymptomsImprovedImmunity}) +
Expand Down Expand Up @@ -128,11 +127,6 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
dydt[SIIi] = 0;
dydt[EIIi] = 0;

double rateE =
1.0 / (2 * params.get<osecirvvs::SerialInterval>()[i] - params.get<osecirvvs::IncubationTime>()[i]);
double rateINS =
0.5 / (params.get<osecirvvs::IncubationTime>()[i] - params.get<osecirvvs::SerialInterval>()[i]);

double reducExposedPartialImmunity = params.get<osecirvvs::ReducExposedPartialImmunity>()[i];
double reducExposedImprovedImmunity = params.get<osecirvvs::ReducExposedImprovedImmunity>()[i];
double reducInfectedSymptomsPartialImmunity =
Expand Down Expand Up @@ -244,13 +238,17 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,

/**** path of immune-naive ***/

dydt[ENi] -= rateE * y[ENi]; // only exchange of E and InfectedNoSymptoms done here
dydt[INSNi] = rateE * y[ENi] - rateINS * y[INSNi];
dydt[INSNCi] = -rateINS * y[INSNCi];
dydt[ENi] -=
y[ENi] / params.get<osecirvvs::TimeExposed>()[i]; // only exchange of E and InfectedNoSymptoms done here
dydt[INSNi] = y[ENi] / params.get<osecirvvs::TimeExposed>()[i] -
y[INSNi] / params.get<osecirvvs::TimeInfectedNoSymptoms>()[i];
dydt[INSNCi] = -y[INSNCi] / params.get<osecirvvs::TimeInfectedNoSymptoms>()[i];

dydt[ISyNi] = (1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * rateINS * y[INSNi] -
dydt[ISyNi] = (1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) /
params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * y[INSNi] -
(y[ISyNi] / params.get<osecirvvs::TimeInfectedSymptoms>()[i]);
dydt[ISyNCi] = (1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * rateINS * y[INSNCi] -
dydt[ISyNCi] = (1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) /
params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * y[INSNCi] -
(y[ISyNCi] / params.get<osecirvvs::TimeInfectedSymptoms>()[i]);

dydt[ISevNi] = params.get<osecirvvs::SeverePerInfectedSymptoms>()[i] /
Expand All @@ -262,16 +260,20 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,

/**** path of partially immune (e.g., one dose of vaccination) ***/

dydt[EPIi] -= rateE * y[EPIi]; // only exchange of E and InfectedNoSymptoms done here
dydt[INSPIi] = rateE * y[EPIi] - (rateINS / reducTimeInfectedMild) * y[INSPIi];
dydt[INSPICi] = -(rateINS / reducTimeInfectedMild) * y[INSPICi];
dydt[EPIi] -=
y[EPIi] /
params.get<osecirvvs::TimeExposed>()[i]; // only exchange of E and InfectedNoSymptoms done here
dydt[INSPIi] = y[EPIi] / params.get<osecirvvs::TimeExposed>()[i] -
y[INSPIi] / (params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild);
dydt[INSPICi] = -y[INSPICi] / (params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild);
dydt[ISyPIi] = (reducInfectedSymptomsPartialImmunity / reducExposedPartialImmunity) *
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) *
(rateINS / reducTimeInfectedMild) * y[INSPIi] -
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * y[INSPIi] /
(params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) -
(y[ISyPIi] / (params.get<osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild));
dydt[ISyPICi] = (reducInfectedSymptomsPartialImmunity / reducExposedPartialImmunity) *
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) *
(rateINS / reducTimeInfectedMild) * y[INSPICi] -
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) /
(params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) *
y[INSPICi] -
(y[ISyPICi] / (params.get<osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild));
dydt[ISevPIi] = reducInfectedSevereCriticalDeadPartialImmunity / reducInfectedSymptomsPartialImmunity *
params.get<osecirvvs::SeverePerInfectedSymptoms>()[i] /
Expand All @@ -286,19 +288,20 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,

/**** path of twice vaccinated, here called immune although reinfection is possible now ***/

dydt[EIIi] -= rateE * y[EIIi]; // only exchange of E and C done here
dydt[EIIi] -= y[EIIi] / params.get<osecirvvs::TimeExposed>()[i]; // only exchange of E and C done here

dydt[INSIIi] = rateE * y[EIIi] - (rateINS / reducTimeInfectedMild) * y[INSIIi];
dydt[INSIICi] = -(rateINS / reducTimeInfectedMild) * y[INSIICi];
dydt[INSIIi] = y[EIIi] / params.get<osecirvvs::TimeExposed>()[i] -
y[INSIIi] / (params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild);
dydt[INSIICi] = -y[INSIICi] / (params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild);

dydt[ISyIIi] = (reducInfectedSymptomsImprovedImmunity / reducExposedImprovedImmunity) *
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) *
(rateINS / reducTimeInfectedMild) * y[INSIIi] -
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * y[INSIIi] /
(params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) -
(1 / (params.get<osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild)) * y[ISyIIi];
dydt[ISyIICi] =
(reducInfectedSymptomsImprovedImmunity / reducExposedImprovedImmunity) *
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) *
(rateINS / reducTimeInfectedMild) * y[INSIICi] -
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * y[INSIICi] /
(params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) -
(1 / (params.get<osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild)) * y[ISyIICi];
dydt[ISevIIi] = reducInfectedSevereCriticalDeadImprovedImmunity / reducInfectedSymptomsImprovedImmunity *
params.get<osecirvvs::SeverePerInfectedSymptoms>()[i] /
Expand All @@ -312,19 +315,20 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
params.get<osecirvvs::TimeInfectedSevere>()[i] * y[ISevIIi];

// recovered and deaths from all paths
dydt[SIIi] +=
params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i] * rateINS * (y[INSNi] + y[INSNCi]) +
(1 - params.get<osecirvvs::SeverePerInfectedSymptoms>()[i]) /
params.get<osecirvvs::TimeInfectedSymptoms>()[i] * (y[ISyNi] + y[ISyNCi]) +
(1 - params.get<osecirvvs::CriticalPerSevere>()[i]) / params.get<osecirvvs::TimeInfectedSevere>()[i] *
y[ISevNi] +
(1 - params.get<osecirvvs::DeathsPerCritical>()[i]) / params.get<osecirvvs::TimeInfectedCritical>()[i] *
y[ICrNi];
dydt[SIIi] += params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i] /
params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * (y[INSNi] + y[INSNCi]) +
(1 - params.get<osecirvvs::SeverePerInfectedSymptoms>()[i]) /
params.get<osecirvvs::TimeInfectedSymptoms>()[i] * (y[ISyNi] + y[ISyNCi]) +
(1 - params.get<osecirvvs::CriticalPerSevere>()[i]) /
params.get<osecirvvs::TimeInfectedSevere>()[i] * y[ISevNi] +
(1 - params.get<osecirvvs::DeathsPerCritical>()[i]) /
params.get<osecirvvs::TimeInfectedCritical>()[i] * y[ICrNi];

dydt[SIIi] +=
(1 - (reducInfectedSymptomsPartialImmunity / reducExposedPartialImmunity) *
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i])) *
rateINS / reducTimeInfectedMild * (y[INSPIi] + y[INSPICi]) +
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i])) /
(params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) *
(y[INSPIi] + y[INSPICi]) +
(1 - (reducInfectedSevereCriticalDeadPartialImmunity / reducInfectedSymptomsPartialImmunity) *
params.get<osecirvvs::SeverePerInfectedSymptoms>()[i]) /
(params.get<osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild) *
Expand All @@ -339,7 +343,8 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
dydt[SIIi] +=
(1 - (reducInfectedSymptomsImprovedImmunity / reducExposedImprovedImmunity) *
(1 - params.get<osecirvvs::RecoveredPerInfectedNoSymptoms>()[i])) *
rateINS / reducTimeInfectedMild * (y[INSIIi] + y[INSIICi]) +
(params.get<osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) *
(y[INSIIi] + y[INSIICi]) +
(1 - (reducInfectedSevereCriticalDeadImprovedImmunity / reducInfectedSymptomsImprovedImmunity) *
params.get<osecirvvs::SeverePerInfectedSymptoms>()[i]) /
(params.get<osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild) *
Expand Down Expand Up @@ -650,11 +655,11 @@ void setup_model(Model& model)
contact_matrix[0].add_damping(0.3, SimulationTime(5.0));

//times
model.parameters.template get<osecirvvs::IncubationTime>()[AgeGroup(0)] = 5.2;
model.parameters.template get<osecirvvs::SerialInterval>()[AgeGroup(0)] = 0.5 * 3.33 + 0.5 * 5.2;
model.parameters.template get<osecirvvs::TimeInfectedSymptoms>()[AgeGroup(0)] = 7;
model.parameters.template get<osecirvvs::TimeInfectedSevere>()[AgeGroup(0)] = 6;
model.parameters.template get<osecirvvs::TimeInfectedCritical>()[AgeGroup(0)] = 7;
model.parameters.template get<osecirvvs::TimeExposed>()[AgeGroup(0)] = 3.33;
model.parameters.template get<osecirvvs::TimeInfectedNoSymptoms>()[AgeGroup(0)] = 1.87;
model.parameters.template get<osecirvvs::TimeInfectedSymptoms>()[AgeGroup(0)] = 7;
model.parameters.template get<osecirvvs::TimeInfectedSevere>()[AgeGroup(0)] = 6;
model.parameters.template get<osecirvvs::TimeInfectedCritical>()[AgeGroup(0)] = 7;

//probabilities
model.parameters.template get<osecirvvs::TransmissionProbabilityOnContact>()[AgeGroup(0)] = 0.15;
Expand Down
10 changes: 5 additions & 5 deletions cpp/benchmarks/graph_simulation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,11 @@ mio::osecirvvs::Model create_model(size_t num_agegroups, const ScalarType tmax)

for (mio::AgeGroup i = 0; i < (mio::AgeGroup)num_agegroups; i++) {
//times
model.parameters.get<mio::osecirvvs::IncubationTime>()[i] = 5.2;
model.parameters.get<mio::osecirvvs::SerialInterval>()[i] = 0.5 * 3.33 + 0.5 * 5.2;
model.parameters.get<mio::osecirvvs::TimeInfectedSymptoms>()[i] = 7;
model.parameters.get<mio::osecirvvs::TimeInfectedSevere>()[i] = 6;
model.parameters.get<mio::osecirvvs::TimeInfectedCritical>()[i] = 7;
model.parameters.get<mio::osecirvvs::TimeExposed>()[i] = 3.33;
model.parameters.get<mio::osecirvvs::TimeInfectedNoSymptoms>()[i] = 1.87;
model.parameters.get<mio::osecirvvs::TimeInfectedSymptoms>()[i] = 7;
model.parameters.get<mio::osecirvvs::TimeInfectedSevere>()[i] = 6;
model.parameters.get<mio::osecirvvs::TimeInfectedCritical>()[i] = 7;

//probabilities
model.parameters.get<mio::osecirvvs::TransmissionProbabilityOnContact>()[i] = 0.15;
Expand Down
10 changes: 5 additions & 5 deletions cpp/benchmarks/secir_ageres_setups.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,11 @@ mio::osecir::Model make_model(int num)
params.set<mio::osecir::Seasonality>(0);

for (auto i = mio::AgeGroup(0); i < nb_groups; i++) {
params.get<mio::osecir::IncubationTime>()[i] = 5.2;
params.get<mio::osecir::TimeInfectedSymptoms>()[i] = 6.;
params.get<mio::osecir::SerialInterval>()[i] = 4.2;
params.get<mio::osecir::TimeInfectedSevere>()[i] = 12;
params.get<mio::osecir::TimeInfectedCritical>()[i] = 8;
params.get<mio::osecir::TimeExposed>()[i] = 3.2;
params.get<mio::osecir::TimeInfectedNoSymptoms>()[i] = 2.;
params.get<mio::osecir::TimeInfectedSymptoms>()[i] = 6.;
params.get<mio::osecir::TimeInfectedSevere>()[i] = 12;
params.get<mio::osecir::TimeInfectedCritical>()[i] = 8;

model.populations[{i, mio::osecir::InfectionState::Exposed}] = fact * nb_exp_t0;
model.populations[{i, mio::osecir::InfectionState::InfectedNoSymptoms}] = fact * nb_car_t0;
Expand Down
10 changes: 5 additions & 5 deletions cpp/examples/graph_stochastic_mobility.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ int main(int /*argc*/, char** /*argv*/)

//set initialization and model parameters
for (auto i = mio::AgeGroup(0); i < num_age_groups; i++) {
params.get<mio::osecir::IncubationTime>()[i] = 5.2;
params.get<mio::osecir::TimeInfectedSymptoms>()[i] = 6.;
params.get<mio::osecir::SerialInterval>()[i] = 4.2;
params.get<mio::osecir::TimeInfectedSevere>()[i] = 12;
params.get<mio::osecir::TimeInfectedCritical>()[i] = 8;
params.get<mio::osecir::TimeExposed>()[i] = 3.2;
params.get<mio::osecir::TimeInfectedNoSymptoms>()[i] = 2.;
params.get<mio::osecir::TimeInfectedSymptoms>()[i] = 6.;
params.get<mio::osecir::TimeInfectedSevere>()[i] = 12.;
params.get<mio::osecir::TimeInfectedCritical>()[i] = 8.;

//initial populations is equally distributed among age groups
model.populations[{i, mio::osecir::InfectionState::Exposed}] = fact * num_exp;
Expand Down
2 changes: 1 addition & 1 deletion cpp/examples/lct_secir.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ int main()

// Set Parameters.
model.parameters.get<mio::lsecir::TimeExposed>() = 3.2;
model.parameters.get<mio::lsecir::TimeInfectedNoSymptoms>() = 2;
model.parameters.get<mio::lsecir::TimeInfectedNoSymptoms>() = 2.;
model.parameters.get<mio::lsecir::TimeInfectedSymptoms>() = 5.8;
model.parameters.get<mio::lsecir::TimeInfectedSevere>() = 9.5;
// It is also possible to change values with the set function.
Expand Down
10 changes: 5 additions & 5 deletions cpp/examples/ode_secir.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@ int main()
model.parameters.set<mio::osecir::StartDay>(60);
model.parameters.set<mio::osecir::Seasonality>(0.2);

model.parameters.get<mio::osecir::IncubationTime>() = 5.2;
model.parameters.get<mio::osecir::TimeInfectedSymptoms>() = 5.8;
model.parameters.get<mio::osecir::SerialInterval>() = 4.2;
model.parameters.get<mio::osecir::TimeInfectedSevere>() = 9.5;
model.parameters.get<mio::osecir::TimeInfectedCritical>() = 7.1;
model.parameters.get<mio::osecir::TimeExposed>() = 3.2;
model.parameters.get<mio::osecir::TimeInfectedNoSymptoms>() = 2.0;
model.parameters.get<mio::osecir::TimeInfectedSymptoms>() = 5.8;
model.parameters.get<mio::osecir::TimeInfectedSevere>() = 9.5;
model.parameters.get<mio::osecir::TimeInfectedCritical>() = 7.1;

mio::ContactMatrixGroup& contact_matrix = model.parameters.get<mio::osecir::ContactPatterns>();
contact_matrix[0] = mio::ContactMatrix(Eigen::MatrixXd::Constant(1, 1, cont_freq));
Expand Down
12 changes: 6 additions & 6 deletions cpp/examples/ode_secir_ageres.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,11 @@ int main()
params.get<mio::osecir::TestAndTraceCapacity>() = 35;

for (auto i = mio::AgeGroup(0); i < nb_groups; i++) {
params.get<mio::osecir::IncubationTime>()[i] = 5.2;
params.get<mio::osecir::TimeInfectedSymptoms>()[i] = 5.8;
params.get<mio::osecir::SerialInterval>()[i] = 4.2;
params.get<mio::osecir::TimeInfectedSevere>()[i] = 9.5;
params.get<mio::osecir::TimeInfectedCritical>()[i] = 7.1;
params.get<mio::osecir::TimeExposed>()[i] = 3.2;
params.get<mio::osecir::TimeInfectedNoSymptoms>()[i] = 2.;
params.get<mio::osecir::TimeInfectedSymptoms>()[i] = 5.8;
params.get<mio::osecir::TimeInfectedSevere>()[i] = 9.5;
params.get<mio::osecir::TimeInfectedCritical>()[i] = 7.1;

model.populations[{i, mio::osecir::InfectionState::Exposed}] = fact * nb_exp_t0;
model.populations[{i, mio::osecir::InfectionState::InfectedNoSymptoms}] = fact * nb_car_t0;
Expand Down Expand Up @@ -106,7 +106,7 @@ int main()

for (size_t i = 0; i < (size_t)params.get_num_groups(); i++) {
printf("\t %s[%d]: %.0f", vars[k].c_str(), (int)i,
secir.get_last_value()[k + (size_t)mio::osecir::InfectionState::Count * (int)i]);
secir.get_last_value()[k + (size_t)mio::osecir::InfectionState::Count * (int)i]);
dummy += secir.get_last_value()[k + (size_t)mio::osecir::InfectionState::Count * (int)i];
}

Expand Down
12 changes: 6 additions & 6 deletions cpp/examples/ode_secir_parameter_study.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,11 @@ int main()
params.set<mio::osecir::Seasonality>(0);

for (auto i = mio::AgeGroup(0); i < num_groups; i++) {
params.get<mio::osecir::IncubationTime>()[i] = 5.2;
params.get<mio::osecir::TimeInfectedSymptoms>()[i] = 6.;
params.get<mio::osecir::SerialInterval>()[i] = 4.2;
params.get<mio::osecir::TimeInfectedSevere>()[i] = 12;
params.get<mio::osecir::TimeInfectedCritical>()[i] = 8;
params.get<mio::osecir::TimeExposed>()[i] = 3.2;
params.get<mio::osecir::TimeInfectedNoSymptoms>()[i] = 2.;
params.get<mio::osecir::TimeInfectedSymptoms>()[i] = 6.;
params.get<mio::osecir::TimeInfectedSevere>()[i] = 12;
params.get<mio::osecir::TimeInfectedCritical>()[i] = 8;

model.populations[{i, mio::osecir::InfectionState::Exposed}] = fact * num_exp_t0;
model.populations[{i, mio::osecir::InfectionState::InfectedNoSymptoms}] = fact * num_car_t0;
Expand Down Expand Up @@ -150,7 +150,7 @@ int main()
auto write_result_status = write_single_run_result(run, graph);
if (!write_result_status) {
std::cout << "Error writing result: " << write_result_status.error().formatted_message();
}
}
return 0; //Result handler must return something, but only meaningful when using MPI.
};
parameter_study.run(sample_graph, handle_result);
Expand Down
Loading