machine/Engine.hpp
Go to the documentation of this file.
00001 /*
00002 
00003   This file is part of OpenFLUID software
00004   Copyright(c) 2007, INRA - Montpellier SupAgro
00005 
00006 
00007  == GNU General Public License Usage ==
00008 
00009   OpenFLUID is free software: you can redistribute it and/or modify
00010   it under the terms of the GNU General Public License as published by
00011   the Free Software Foundation, either version 3 of the License, or
00012   (at your option) any later version.
00013 
00014   OpenFLUID is distributed in the hope that it will be useful,
00015   but WITHOUT ANY WARRANTY; without even the implied warranty of
00016   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017   GNU General Public License for more details.
00018 
00019   You should have received a copy of the GNU General Public License
00020   along with OpenFLUID. If not, see <http://www.gnu.org/licenses/>.
00021 
00022 
00023  == Other Usage ==
00024 
00025   Other Usage means a use of OpenFLUID that is inconsistent with the GPL
00026   license, and requires a written agreement between You and INRA.
00027   Licensees for Other Usage of OpenFLUID may use this file in accordance
00028   with the terms contained in the written agreement between You and INRA.
00029   
00030 */
00031 
00032 
00033 
00034 /**
00035   @file
00036 
00037   @author Jean-Christophe FABRE <fabrejc@supagro.inra.fr>
00038 */
00039 
00040 
00041 #ifndef __ENGINE_HPP__
00042 #define __ENGINE_HPP__
00043 
00044 
00045 #include <openfluid/dllexport.hpp>
00046 #include <openfluid/core/TypeDefs.hpp>
00047 #include <openfluid/base/SimulationLogger.hpp>
00048 
00049 namespace openfluid {
00050 namespace base {
00051 class RuntimeEnvironment;
00052 class SimulationStatus;
00053 }
00054 namespace core {
00055 class Value;
00056 class DateTime;
00057 }
00058 }
00059 
00060 
00061 namespace openfluid { namespace machine {
00062 
00063 class ModelInstance;
00064 class MonitoringInstance;
00065 class MachineListener;
00066 class SimulationBlob;
00067 
00068 
00069 // =====================================================================
00070 // =====================================================================
00071 
00072 
00073 /**
00074   Computation engine class
00075 */
00076 class DLLEXPORT Engine
00077 {
00078 
00079   private:
00080 
00081      SimulationBlob& m_SimulationBlob;
00082 
00083      openfluid::base::RuntimeEnvironment* mp_RunEnv;
00084 
00085      openfluid::base::SimulationStatus* mp_SimStatus;
00086 
00087      MachineListener* mp_MachineListener;
00088 
00089      ModelInstance& m_ModelInstance;
00090 
00091      MonitoringInstance& m_MonitoringInstance;
00092 
00093      openfluid::base::SimulationLogger* mp_SimLogger;
00094 
00095 
00096 
00097      void checkSimulationVarsProduction(int ExpectedVarsCount);
00098 
00099      void checkModelConsistency();
00100 
00101      void checkAttributesConsistency();
00102 
00103      void checkExtraFilesConsistency();
00104 
00105      void checkExistingVariable(const openfluid::core::VariableName_t& VarName,
00106                                 const openfluid::core::Value::Type& VarType,
00107                                 const openfluid::core::UnitClass_t& ClassName,
00108                                 const std::string& SimulatorID);
00109 
00110      void createVariable(const openfluid::core::VariableName_t& VarName,
00111                          const openfluid::core::Value::Type& VarType,
00112                          const openfluid::core::UnitClass_t& ClassName,
00113                          bool UpdateMode,
00114                          const std::string& SimulatorID);
00115 
00116      void checkExistingAttribute(openfluid::core::AttributeName_t AttrName,
00117                                  openfluid::core::UnitClass_t ClassName,
00118                                  const std::string& SimulatorID);
00119 
00120      void createAttribute(openfluid::core::AttributeName_t AttrName,
00121                           openfluid::core::UnitClass_t ClassName,
00122                           const std::string& SimulatorID);
00123 
00124      void prepareOutputDir();
00125 
00126 
00127   public:
00128     /**
00129       Constructor
00130     */
00131     Engine(SimulationBlob& SimBlob,
00132            ModelInstance& MInstance, MonitoringInstance& OLInstance,
00133            openfluid::machine::MachineListener* MachineListener);
00134 
00135     /**
00136       Destructor
00137     */
00138     ~Engine();
00139 
00140 
00141     void initialize();
00142 
00143     void initParams();
00144 
00145     void prepareData();
00146 
00147     void checkConsistency();
00148 
00149     void run();
00150 
00151     void finalize();
00152 
00153     const openfluid::base::SimulationStatus* getSimulationStatus() { return mp_SimStatus; };
00154 
00155     SimulationBlob*  getSimulationBlob() { return &m_SimulationBlob; };
00156 
00157     MachineListener* getMachineListener() { return mp_MachineListener; };
00158 
00159     ModelInstance* getModelInstance() { return &m_ModelInstance; };
00160 
00161     unsigned int getWarningsCount() const { return mp_SimLogger->getWarningsCount(); };
00162 };
00163 
00164 
00165 } } //namespaces
00166 
00167 
00168 #endif
00169 
00170 
00171 
00172 
00173 
00174 
00175 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines