Commit ac072196 authored by Matthieu Boileau's avatar Matthieu Boileau

plot: handle SEIR/SIR

parent 054051ce
Pipeline #4004 passed with stages
in 2 minutes and 6 seconds
......@@ -4,6 +4,6 @@
#include "solveur_temps.hpp"
#include "matplotlibcpp.h"
void plotSolutionNoeud(const int, const std::string&, SolveurTemps*);
void plotSolutionNoeud(const int, const int, const std::string&, SolveurTemps*);
#endif
......@@ -31,6 +31,7 @@ class SolveurTemps {
std::vector<double> getSolutionCurrentTime();
// Renvoie les solutions pour chaque pas de temps
std::vector< std::vector<double> > getVariablesTime();
Modele* getModel();
};
#endif
......@@ -151,17 +151,19 @@ int main() {
cout << "Final time : " << solveur_temps.getCurrentTime() << endl;
int nb_noeuds = modele_graphe.get_graphe()->get_nbnodes();
int nvar = solveur_temps.getModel()->get_n() / nb_noeuds; // SIR: nvar = 3 ; SEIR: nvar = 4
// On boucle sur les villes pour afficher la solution finale et tracer l'évolution temporelle
for (int n=0; n<nb_noeuds; n++) {
string noeud = modele_graphe.get_graphe()->get_noeud(n)->get_nom();
for (int inoeud=0; inoeud<nb_noeuds; inoeud++) {
string noeud = modele_graphe.get_graphe()->get_noeud(inoeud)->get_nom();
cout << "Values for " << noeud << " : " << endl;
for (int i=n*3; i<(n+1)*3; i++) {
for (int i=inoeud*nvar; i<(inoeud+1)*nvar; i++) {
cout << solveur_temps.getSolutionCurrentTime()[i] << endl;
}
plotSolutionNoeud(n, noeud, &solveur_temps);
plotSolutionNoeud(nvar, inoeud, noeud, &solveur_temps);
}
// On trace l'évolution temporelle de la somme sur toutes les villes
plotSolutionNoeud(-nb_noeuds, "Total", &solveur_temps);
plotSolutionNoeud(nvar, -nb_noeuds, "Total", &solveur_temps);
return 0;
}
......@@ -3,12 +3,13 @@
namespace plt = matplotlibcpp;
using namespace std;
void plotSolutionNoeud(const int inoeud, const string& nom, SolveurTemps* solveur_temps) {
void plotSolutionNoeud(const int nvar, const int inoeud, const string& nom, SolveurTemps* solveur_temps) {
std::vector< std::vector<double> > m_variablesTemps = solveur_temps->getVariablesTime();
int nstep = m_variablesTemps.size();
vector<double> t(nstep);
vector<double> s(nstep);
vector<double> e(nstep);
vector<double> i(nstep);
vector<double> r(nstep);
......@@ -16,21 +17,36 @@ void plotSolutionNoeud(const int inoeud, const string& nom, SolveurTemps* solveu
// On cible la ville inoeud
for(int k = 0; k < nstep; k++) {
t[k] = solveur_temps->get_dt() * k;
s[k] = m_variablesTemps[k][inoeud*3];
i[k] = m_variablesTemps[k][inoeud*3 + 1];
r[k] = m_variablesTemps[k][inoeud*3 + 2];
int ivar = inoeud*nvar;
s[k] = m_variablesTemps[k][ivar];
if (nvar == 4) { // cas SEIR
ivar++;
e[k] = m_variablesTemps[k][ivar];
}
ivar++;
i[k] = m_variablesTemps[k][ivar];
ivar++;
r[k] = m_variablesTemps[k][ivar];
}
} else {
// On fait la somme sur toutes les villes
for(int k = 0; k < nstep; k++) {
t[k] = solveur_temps->get_dt() * k;
s[k] = 0.;
e[k] = 0.;
i[k] = 0.;
r[k] = 0.;
for(int j = 0; j < -inoeud; j++) {
s[k] += m_variablesTemps[k][j*3];
i[k] += m_variablesTemps[k][j*3 + 1];
r[k] += m_variablesTemps[k][j*3 + 2];
int ivar = j*nvar;
s[k] += m_variablesTemps[k][ivar];
if (nvar == 4) { // cas SEIR
ivar++;
e[k] += m_variablesTemps[k][ivar];
}
ivar++;
i[k] += m_variablesTemps[k][ivar];
ivar++;
r[k] += m_variablesTemps[k][ivar];
}
}
}
......@@ -56,4 +72,4 @@ void plotSolutionNoeud(const int inoeud, const string& nom, SolveurTemps* solveu
cout << "Tracé sauvé dans " << filename << endl;
plt::close();
}
\ No newline at end of file
}
......@@ -23,6 +23,10 @@ void SolveurTemps::setModele(Modele *m) {
m_modele = m;
}
Modele* SolveurTemps::getModel() {
return m_modele;
}
void SolveurTemps::setInitialValue() {
vector< vector<double> > v;
if (m_modele == NULL) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment