@@ -64,10 +64,9 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
6464 auto icu_occupancy = 0.0 ;
6565 auto test_and_trace_required = 0.0 ;
6666 for (auto i = AgeGroup (0 ); i < n_agegroups; ++i) {
67- auto rateINS =
68- 0.5 / (params.get <osecirvvs::IncubationTime>()[i] - params.get <osecirvvs::SerialInterval>()[i]);
6967 test_and_trace_required +=
70- (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * rateINS *
68+ (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) /
69+ params.get <osecirvvs::TimeInfectedNoSymptoms>()[i] *
7170 (this ->populations .get_from (pop, {i, InfectionState::InfectedNoSymptomsNaive}) +
7271 this ->populations .get_from (pop, {i, InfectionState::InfectedNoSymptomsPartialImmunity}) +
7372 this ->populations .get_from (pop, {i, InfectionState::InfectedNoSymptomsImprovedImmunity}) +
@@ -128,11 +127,6 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
128127 dydt[SIIi] = 0 ;
129128 dydt[EIIi] = 0 ;
130129
131- double rateE =
132- 1.0 / (2 * params.get <osecirvvs::SerialInterval>()[i] - params.get <osecirvvs::IncubationTime>()[i]);
133- double rateINS =
134- 0.5 / (params.get <osecirvvs::IncubationTime>()[i] - params.get <osecirvvs::SerialInterval>()[i]);
135-
136130 double reducExposedPartialImmunity = params.get <osecirvvs::ReducExposedPartialImmunity>()[i];
137131 double reducExposedImprovedImmunity = params.get <osecirvvs::ReducExposedImprovedImmunity>()[i];
138132 double reducInfectedSymptomsPartialImmunity =
@@ -244,13 +238,17 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
244238
245239 /* *** path of immune-naive ***/
246240
247- dydt[ENi] -= rateE * y[ENi]; // only exchange of E and InfectedNoSymptoms done here
248- dydt[INSNi] = rateE * y[ENi] - rateINS * y[INSNi];
249- dydt[INSNCi] = -rateINS * y[INSNCi];
241+ dydt[ENi] -=
242+ y[ENi] / params.get <osecirvvs::TimeExposed>()[i]; // only exchange of E and InfectedNoSymptoms done here
243+ dydt[INSNi] = y[ENi] / params.get <osecirvvs::TimeExposed>()[i] -
244+ y[INSNi] / params.get <osecirvvs::TimeInfectedNoSymptoms>()[i];
245+ dydt[INSNCi] = -y[INSNCi] / params.get <osecirvvs::TimeInfectedNoSymptoms>()[i];
250246
251- dydt[ISyNi] = (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * rateINS * y[INSNi] -
247+ dydt[ISyNi] = (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) /
248+ params.get <osecirvvs::TimeInfectedNoSymptoms>()[i] * y[INSNi] -
252249 (y[ISyNi] / params.get <osecirvvs::TimeInfectedSymptoms>()[i]);
253- dydt[ISyNCi] = (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * rateINS * y[INSNCi] -
250+ dydt[ISyNCi] = (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) /
251+ params.get <osecirvvs::TimeInfectedNoSymptoms>()[i] * y[INSNCi] -
254252 (y[ISyNCi] / params.get <osecirvvs::TimeInfectedSymptoms>()[i]);
255253
256254 dydt[ISevNi] = params.get <osecirvvs::SeverePerInfectedSymptoms>()[i] /
@@ -262,16 +260,20 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
262260
263261 /* *** path of partially immune (e.g., one dose of vaccination) ***/
264262
265- dydt[EPIi] -= rateE * y[EPIi]; // only exchange of E and InfectedNoSymptoms done here
266- dydt[INSPIi] = rateE * y[EPIi] - (rateINS / reducTimeInfectedMild) * y[INSPIi];
267- dydt[INSPICi] = -(rateINS / reducTimeInfectedMild) * y[INSPICi];
263+ dydt[EPIi] -=
264+ y[EPIi] /
265+ params.get <osecirvvs::TimeExposed>()[i]; // only exchange of E and InfectedNoSymptoms done here
266+ dydt[INSPIi] = y[EPIi] / params.get <osecirvvs::TimeExposed>()[i] -
267+ y[INSPIi] / (params.get <osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild);
268+ dydt[INSPICi] = -y[INSPICi] / (params.get <osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild);
268269 dydt[ISyPIi] = (reducInfectedSymptomsPartialImmunity / reducExposedPartialImmunity) *
269- (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) *
270- (rateINS / reducTimeInfectedMild) * y[INSPIi] -
270+ (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * y[INSPIi] /
271+ (params. get <osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) -
271272 (y[ISyPIi] / (params.get <osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild));
272273 dydt[ISyPICi] = (reducInfectedSymptomsPartialImmunity / reducExposedPartialImmunity) *
273- (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) *
274- (rateINS / reducTimeInfectedMild) * y[INSPICi] -
274+ (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) /
275+ (params.get <osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) *
276+ y[INSPICi] -
275277 (y[ISyPICi] / (params.get <osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild));
276278 dydt[ISevPIi] = reducInfectedSevereCriticalDeadPartialImmunity / reducInfectedSymptomsPartialImmunity *
277279 params.get <osecirvvs::SeverePerInfectedSymptoms>()[i] /
@@ -286,19 +288,20 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
286288
287289 /* *** path of twice vaccinated, here called immune although reinfection is possible now ***/
288290
289- dydt[EIIi] -= rateE * y[EIIi]; // only exchange of E and C done here
291+ dydt[EIIi] -= y[EIIi] / params. get <osecirvvs::TimeExposed>()[i ]; // only exchange of E and C done here
290292
291- dydt[INSIIi] = rateE * y[EIIi] - (rateINS / reducTimeInfectedMild) * y[INSIIi];
292- dydt[INSIICi] = -(rateINS / reducTimeInfectedMild) * y[INSIICi];
293+ dydt[INSIIi] = y[EIIi] / params.get <osecirvvs::TimeExposed>()[i] -
294+ y[INSIIi] / (params.get <osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild);
295+ dydt[INSIICi] = -y[INSIICi] / (params.get <osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild);
293296
294297 dydt[ISyIIi] = (reducInfectedSymptomsImprovedImmunity / reducExposedImprovedImmunity) *
295- (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) *
296- (rateINS / reducTimeInfectedMild) * y[INSIIi] -
298+ (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * y[INSIIi] /
299+ (params. get <osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) -
297300 (1 / (params.get <osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild)) * y[ISyIIi];
298301 dydt[ISyIICi] =
299302 (reducInfectedSymptomsImprovedImmunity / reducExposedImprovedImmunity) *
300- (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) *
301- (rateINS / reducTimeInfectedMild) * y[INSIICi] -
303+ (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i]) * y[INSIICi] /
304+ (params. get <osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) -
302305 (1 / (params.get <osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild)) * y[ISyIICi];
303306 dydt[ISevIIi] = reducInfectedSevereCriticalDeadImprovedImmunity / reducInfectedSymptomsImprovedImmunity *
304307 params.get <osecirvvs::SeverePerInfectedSymptoms>()[i] /
@@ -312,19 +315,20 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
312315 params.get <osecirvvs::TimeInfectedSevere>()[i] * y[ISevIIi];
313316
314317 // recovered and deaths from all paths
315- dydt[SIIi] +=
316- params.get <osecirvvs::RecoveredPerInfectedNoSymptoms >()[i] * rateINS * (y[INSNi] + y[INSNCi]) +
317- (1 - params.get <osecirvvs::SeverePerInfectedSymptoms>()[i]) /
318- params.get <osecirvvs::TimeInfectedSymptoms>()[i] * (y[ISyNi] + y[ISyNCi]) +
319- (1 - params.get <osecirvvs::CriticalPerSevere>()[i]) / params. get <osecirvvs::TimeInfectedSevere>()[i] *
320- y[ISevNi] +
321- (1 - params.get <osecirvvs::DeathsPerCritical>()[i]) / params. get <osecirvvs::TimeInfectedCritical>()[i] *
322- y[ICrNi];
318+ dydt[SIIi] += params. get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i] /
319+ params.get <osecirvvs::TimeInfectedNoSymptoms >()[i] * (y[INSNi] + y[INSNCi]) +
320+ (1 - params.get <osecirvvs::SeverePerInfectedSymptoms>()[i]) /
321+ params.get <osecirvvs::TimeInfectedSymptoms>()[i] * (y[ISyNi] + y[ISyNCi]) +
322+ (1 - params.get <osecirvvs::CriticalPerSevere>()[i]) /
323+ params. get <osecirvvs::TimeInfectedSevere>()[i] * y[ISevNi] +
324+ (1 - params.get <osecirvvs::DeathsPerCritical>()[i]) /
325+ params. get <osecirvvs::TimeInfectedCritical>()[i] * y[ICrNi];
323326
324327 dydt[SIIi] +=
325328 (1 - (reducInfectedSymptomsPartialImmunity / reducExposedPartialImmunity) *
326- (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i])) *
327- rateINS / reducTimeInfectedMild * (y[INSPIi] + y[INSPICi]) +
329+ (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i])) /
330+ (params.get <osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) *
331+ (y[INSPIi] + y[INSPICi]) +
328332 (1 - (reducInfectedSevereCriticalDeadPartialImmunity / reducInfectedSymptomsPartialImmunity) *
329333 params.get <osecirvvs::SeverePerInfectedSymptoms>()[i]) /
330334 (params.get <osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild) *
@@ -339,7 +343,8 @@ class FlowlessModel : public CompartmentalModel<osecirvvs::InfectionState,
339343 dydt[SIIi] +=
340344 (1 - (reducInfectedSymptomsImprovedImmunity / reducExposedImprovedImmunity) *
341345 (1 - params.get <osecirvvs::RecoveredPerInfectedNoSymptoms>()[i])) *
342- rateINS / reducTimeInfectedMild * (y[INSIIi] + y[INSIICi]) +
346+ (params.get <osecirvvs::TimeInfectedNoSymptoms>()[i] * reducTimeInfectedMild) *
347+ (y[INSIIi] + y[INSIICi]) +
343348 (1 - (reducInfectedSevereCriticalDeadImprovedImmunity / reducInfectedSymptomsImprovedImmunity) *
344349 params.get <osecirvvs::SeverePerInfectedSymptoms>()[i]) /
345350 (params.get <osecirvvs::TimeInfectedSymptoms>()[i] * reducTimeInfectedMild) *
@@ -650,11 +655,11 @@ void setup_model(Model& model)
650655 contact_matrix[0 ].add_damping (0.3 , SimulationTime (5.0 ));
651656
652657 // times
653- model.parameters .template get <osecirvvs::IncubationTime >()[AgeGroup (0 )] = 5.2 ;
654- model.parameters .template get <osecirvvs::SerialInterval >()[AgeGroup (0 )] = 0.5 * 3.33 + 0.5 * 5.2 ;
655- model.parameters .template get <osecirvvs::TimeInfectedSymptoms>()[AgeGroup (0 )] = 7 ;
656- model.parameters .template get <osecirvvs::TimeInfectedSevere>()[AgeGroup (0 )] = 6 ;
657- model.parameters .template get <osecirvvs::TimeInfectedCritical>()[AgeGroup (0 )] = 7 ;
658+ model.parameters .template get <osecirvvs::TimeExposed >()[AgeGroup (0 )] = 3.33 ;
659+ model.parameters .template get <osecirvvs::TimeInfectedNoSymptoms >()[AgeGroup (0 )] = 1.87 ;
660+ model.parameters .template get <osecirvvs::TimeInfectedSymptoms>()[AgeGroup (0 )] = 7 ;
661+ model.parameters .template get <osecirvvs::TimeInfectedSevere>()[AgeGroup (0 )] = 6 ;
662+ model.parameters .template get <osecirvvs::TimeInfectedCritical>()[AgeGroup (0 )] = 7 ;
658663
659664 // probabilities
660665 model.parameters .template get <osecirvvs::TransmissionProbabilityOnContact>()[AgeGroup (0 )] = 0.15 ;
0 commit comments