public Gumel2004_Export(
            IGumel2004_Context Gumel2004_Context)
        {
            this.Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            this.Gumel2004_Context = Gumel2004_Context;

            this.Gumel2004_Solution = new C19M.M.C.A.Gumel2004.Classes.Solutions.Gumel2004_Solution();
        }
        public void Solve(
            IGumel2004_Context Gumel2004_Context)
        {
            IGumel2004_Model Gumel2004_Model = new C19M.M.C.A.Gumel2004.Classes.Models.Gumel2004_Model(
                Gumel2004_Context);

            MathNet.Numerics.LinearAlgebra.Vector <double>[] RungeKuttaResults =
                MathNet.Numerics.OdeSolvers.RungeKutta.FourthOrder(
                    MathNet.Numerics.LinearAlgebra.Vector <double> .Build.Dense(new[] {
                (double)Gumel2004_Model.E.InitialValue.Value.Value,
                (double)Gumel2004_Model.I.InitialValue.Value.Value,
                (double)Gumel2004_Model.J.InitialValue.Value.Value,
                (double)Gumel2004_Model.Q.InitialValue.Value.Value,
                (double)Gumel2004_Model.R.InitialValue.Value.Value,
                (double)Gumel2004_Model.S.InitialValue.Value.Value
            }),
                    Gumel2004_Model.t.NumberDaysAfterStartDate(Gumel2004_Model.t.StartDate).Value.Value,
                    Gumel2004_Model.t.NumberDaysAfterStartDate(Gumel2004_Model.t.EndDate).Value.Value,
                    Gumel2004_Model.t.NumberDaysAfterStartDate(Gumel2004_Model.t.EndDate).Value.Value - Gumel2004_Model.t.NumberDaysAfterStartDate(Gumel2004_Model.t.StartDate).Value.Value + 1,
                    this.f(
                        Gumel2004_Model.t,
                        Gumel2004_Model.d_1,
                        Gumel2004_Model.d_2,
                        Gumel2004_Model.p,
                        Gumel2004_Model.β,
                        Gumel2004_Model.γ_1,
                        Gumel2004_Model.γ_2,
                        Gumel2004_Model.ε_E,
                        Gumel2004_Model.ε_J,
                        Gumel2004_Model.ε_Q,
                        Gumel2004_Model.κ_1,
                        Gumel2004_Model.κ_2,
                        Gumel2004_Model.μ,
                        Gumel2004_Model.Π,
                        Gumel2004_Model.σ_1,
                        Gumel2004_Model.σ_2,
                        Gumel2004_Model.E,
                        Gumel2004_Model.I,
                        Gumel2004_Model.J,
                        Gumel2004_Model.Q,
                        Gumel2004_Model.R,
                        Gumel2004_Model.S));

            // E
            this.E = new C19M.M.C.A.Gumel2004.Classes.Calculations.DayAsymptomaticIndividuals.E_Calculation().Calculate(
                Gumel2004_Model.t,
                RungeKuttaResults);

            // I
            this.I = new C19M.M.C.A.Gumel2004.Classes.Calculations.DaySymptomaticIndividuals.I_Calculation().Calculate(
                Gumel2004_Model.t,
                RungeKuttaResults);

            // J
            this.J = new C19M.M.C.A.Gumel2004.Classes.Calculations.DayIsolatedIndividuals.J_Calculation().Calculate(
                Gumel2004_Model.t,
                RungeKuttaResults);

            // Q
            this.Q = new C19M.M.C.A.Gumel2004.Classes.Calculations.DayQuarantinedIndividuals.Q_Calculation().Calculate(
                Gumel2004_Model.t,
                RungeKuttaResults);

            // R
            this.R = new C19M.M.C.A.Gumel2004.Classes.Calculations.DayRecoveredIndividuals.R_Calculation().Calculate(
                Gumel2004_Model.t,
                RungeKuttaResults);

            // S
            this.S = new C19M.M.C.A.Gumel2004.Classes.Calculations.DaySusceptibleIndividuals.S_Calculation().Calculate(
                Gumel2004_Model.t,
                RungeKuttaResults);

            // DayDiseaseInducedDeaths
            this.DayDiseaseInducedDeaths = new C19M.M.C.A.Gumel2004.Classes.Calculations.DayDiseaseInducedDeaths.DayDiseaseInducedDeaths_Calculation().Calculate(
                Gumel2004_Model.t,
                Gumel2004_Model.d_1,
                Gumel2004_Model.d_2,
                this.I,
                this.J);

            // DayProbableCases
            this.DayProbableCases = new C19M.M.C.A.Gumel2004.Classes.Calculations.DayProbableCases.DayProbableCases_Calculation().Calculate(
                Gumel2004_Model.t,
                this.I,
                this.J,
                this.Q,
                this.R);

            // DayCumulativeDiseaseInducedDeaths
            this.DayCumulativeDiseaseInducedDeaths = new C19M.M.C.A.Gumel2004.Classes.Calculations.DayCumulativeDiseaseInducedDeaths.DayCumulativeDiseaseInducedDeaths_Calculation().Calculate(
                Gumel2004_Model.t,
                this.DayDiseaseInducedDeaths);

            // DayCumulativeProbableCases
            this.DayCumulativeProbableCases = new C19M.M.C.A.Gumel2004.Classes.Calculations.DayCumulativeProbableCases.DayCumulativeProbableCases_Calculation().Calculate(
                Gumel2004_Model.t,
                this.DayProbableCases);
        }
示例#3
0
        public Gumel2004_Model(
            IGumel2004_Context context)
        {
            this.Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            // Indices

            // t
            this.t = new Classes.Indices.t(
                context.EndDate,
                context.NumberDaysAfterStartDate,
                context.StartDate);

            // Parameters

            // d_1
            this.d_1 = new C19M.M.C.A.Gumel2004.Classes.Parameters.DiseaseInducedDeathRateSymptomaticIndividuals.d(
                context.DiseaseInducedDeathRateSymptomaticIndividuals);

            // d_2
            this.d_2 = new C19M.M.C.A.Gumel2004.Classes.Parameters.DiseaseInducedDeathRateIsolatedIndividuals.d(
                context.DiseaseInducedDeathRateIsolatedIndividuals);

            // p
            this.p = new p(
                context.RecruitmentRateAsymptomaticIndividuals);

            // β
            this.β = new β(
                context.BasicTransmissionCoefficient);

            // γ_1
            this.γ_1 = new C19M.M.C.A.Gumel2004.Classes.Parameters.QuarantineRateAsymptomaticIndividuals.γ(
                context.QuarantineRateAsymptomaticIndividuals);

            // γ_2
            this.γ_2 = new C19M.M.C.A.Gumel2004.Classes.Parameters.IsolationRateSymptomaticIndividuals.γ(
                context.IsolationRateSymptomaticIndividuals);

            // ε_E
            this.ε_E = new C19M.M.C.A.Gumel2004.Classes.Parameters.TransmissionCoefficientModificationFactorAsymptomaticIndividuals.ε(
                context.TransmissionCoefficientModificationFactorAsymptomaticIndividuals);

            // ε_J
            this.ε_J = new C19M.M.C.A.Gumel2004.Classes.Parameters.TransmissionCoefficientModificationFactorIsolatedIndividuals.ε(
                context.TransmissionCoefficientModificationFactorIsolatedIndividuals);

            // ε_Q
            this.ε_Q = new C19M.M.C.A.Gumel2004.Classes.Parameters.TransmissionCoefficientModificationFactorQuarantinedIndividuals.ε(
                context.TransmissionCoefficientModificationFactorQuarantinedIndividuals);

            // κ_1
            this.κ_1 = new C19M.M.C.A.Gumel2004.Classes.Parameters.DevelopmentClinicalSymptomsRateAsymptomaticIndividuals.κ(
                context.DevelopmentClinicalSymptomsRateAsymptomaticIndividuals);

            // κ_2
            this.κ_2 = new C19M.M.C.A.Gumel2004.Classes.Parameters.DevelopmentClinicalSymptomsRateQuarantinedIndividuals.κ(
                context.DevelopmentClinicalSymptomsRateQuarantinedIndividuals);

            // μ
            this.μ = new μ(
                context.NaturalDeathRate);

            // Π
            this.Π = new Π(
                context.NetInflowRateSusceptibleIndividuals);

            // σ_1
            this.σ_1 = new C19M.M.C.A.Gumel2004.Classes.Parameters.RecoveryRateSymptomaticIndividuals.σ(
                context.RecoveryRateSymptomaticIndividuals);

            // σ_2
            this.σ_2 = new C19M.M.C.A.Gumel2004.Classes.Parameters.RecoveryRateIsolatedIndividuals.σ(
                context.RecoveryRateIsolatedIndividuals);

            // Variables

            // E(t)
            this.E = new C19M.M.C.A.Gumel2004.Classes.Variables.AsymptomaticIndividuals.E(
                context.InitialValueAsymptomaticIndividuals);

            // I(t)
            this.I = new C19M.M.C.A.Gumel2004.Classes.Variables.SymptomaticIndividuals.I(
                context.InitialValueSymptomaticIndividuals);

            // J(t)
            this.J = new C19M.M.C.A.Gumel2004.Classes.Variables.IsolatedIndividuals.J(
                context.InitialValueIsolatedIndividuals);

            // N(t)
            this.N = new C19M.M.C.A.Gumel2004.Classes.Variables.TotalPopulationSize.N(
                new FhirDecimal(
                    context.InitialValueAsymptomaticIndividuals.Value.Value   // E(0)
                    +
                    context.InitialValueSymptomaticIndividuals.Value.Value    // I(0)
                    +
                    context.InitialValueIsolatedIndividuals.Value.Value       // J(0)
                    +
                    context.InitialValueQuarantinedIndividuals.Value.Value    // Q(0)
                    +
                    context.InitialValueRecoveredIndividuals.Value.Value      // R(0)
                    +
                    context.InitialValueSusceptibleIndividuals.Value.Value)); // S(0)

            // Q(t)
            this.Q = new C19M.M.C.A.Gumel2004.Classes.Variables.QuarantinedIndividuals.Q(
                context.InitialValueQuarantinedIndividuals);

            // R(t)
            this.R = new C19M.M.C.A.Gumel2004.Classes.Variables.RecoveredIndividuals.R(
                context.InitialValueRecoveredIndividuals);

            // S(t)
            this.S = new C19M.M.C.A.Gumel2004.Classes.Variables.SusceptibleIndividuals.S(
                context.InitialValueSusceptibleIndividuals);
        }