/** * @file tests/plot/milsol.hpp * @author The PARADEVS Development Team * See the AUTHORS or Authors.txt file */ /* * PARADEVS - the multimodeling and simulation environment * This file is a part of the PARADEVS environment * * Copyright (C) 2013-2015 ULCO http://www.univ-litoral.fr * Copyright (C) 2009 INRA * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef TESTS_PLOT_MILSOL_HPP #define TESTS_PLOT_MILSOL_HPP 1 #include #include #include namespace paradevs { namespace tests { namespace plot { class Milsol { public: Milsol() : count(0), TotalSporeReady(0) { p1 = 0.5; p2 = 1.0; p3 = 10.0; p4 = 0.05; p5 = 0.025; p6 = 1.5; p7 = 75.0; p8 = 150.0; p9 = 225.0; p10 = 0.004; p11 = 0.009; p12 = 2.0; p13 = 1.0; p14 = 0.037; D0 = 100.0; D1 = 150.0; Dc = 100.0; CUM0 = 6.0; CUM1 = 10.0; Topt = 18.0; Tmin = 3.0; FACT = 2000.0; SSA = 1. / 17700; _total_ready_spore_number_t = 0.0; _total_ready_spore_number_t2 = 0.0; _total_ready_spore_number_t3 = 0.0; _zoospore_number = 0.0; } double get_ready_spore_number() const { return TotalSporeReady; } virtual void operator()(typename common::DoubleTime::type t) { _total_ready_spore_number_t = 0.0; _climate.get_temperatures(t, _temperatures); _climate.get_humidities(t, _humidities); createCohorte(); for (unsigned int i = 0; i < _cohortes.size(); ++i) { for (unsigned int j = 0; j < 24 ; ++j) { _cohortes[i].compute(_temperatures[j], _humidities[j]); _total_ready_spore_number_t += _cohortes[i].sporul(); if (condEndCohorte(i)) { _cohortes.erase(_cohortes.begin() + i); i--; break; } } } _total_ready_spore_number_t2 = _total_ready_spore_number_t - _total_ready_spore_number_t3; _total_ready_spore_number_t3 = _total_ready_spore_number_t; TotalSporeReady = _total_ready_spore_number_t2; } void add_zoospore_number(double n) { _zoospore_number += n; } double get_zoospore_number() const { return _zoospore_number; } void set_inoculum_primaire_number(double n) { _zoospore_number = n; } private: bool condEndCohorte(int k) { return (_cohortes[k].age() > p9); } bool condBeginCohorte() { return _zoospore_number > 0.0; } void createCohorte() { if (condBeginCohorte()) { ++count; _cohortes.push_back( Cohorte(count, _zoospore_number, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, D0, D1, Dc, CUM0, CUM1, Topt, Tmin, FACT, SSA)); } } double p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14; double D0, D1, Dc; double CUM0, CUM1; double Topt, Tmin; double FACT, SSA; std::vector < Cohorte > _cohortes; std::vector < double > _temperatures; std::vector < double > _humidities; int count; double TotalSporeReady; double _total_ready_spore_number_t; double _total_ready_spore_number_t2; double _total_ready_spore_number_t3; double _zoospore_number; Climate _climate; }; } } } // namespace paradevs tests plot #endif