diff --git a/OMCompiler/Compiler/Template/CodegenCpp.tpl b/OMCompiler/Compiler/Template/CodegenCpp.tpl index 2349f32233d..dee71afac69 100644 --- a/OMCompiler/Compiler/Template/CodegenCpp.tpl +++ b/OMCompiler/Compiler/Template/CodegenCpp.tpl @@ -6594,13 +6594,15 @@ case SIMCODE(modelInfo = MODELINFO(__),simulationSettingsOpt = SOME(settings as case "mat" then << const all_vars_t params = make_tuple(outputRealVars.outputParams,outputIntVars.outputParams,outputBoolVars.outputParams,outputDerVars.outputParams,outputResVars.outputParams); + neg_all_vars_t neg_all_params = make_tuple(outputRealVars.negateParams, outputIntVars.negateParams, outputBoolVars.negateParams, outputDerVars.negateParams, outputResVars.negateParams); >> else << const all_vars_t params; + const neg_all_vars_t neg_all_params; >> %> - _writeOutput->write(params,_global_settings->getStartTime(),_global_settings->getEndTime()); + _writeOutput->write(params,neg_all_params,_global_settings->getStartTime(),_global_settings->getEndTime()); } //Write the current values else diff --git a/OMCompiler/SimulationRuntime/cpp/Core/DataExchange/XmlPropertyReader.cpp b/OMCompiler/SimulationRuntime/cpp/Core/DataExchange/XmlPropertyReader.cpp index 2ba01cd8c56..c383a94c06e 100644 --- a/OMCompiler/SimulationRuntime/cpp/Core/DataExchange/XmlPropertyReader.cpp +++ b/OMCompiler/SimulationRuntime/cpp/Core/DataExchange/XmlPropertyReader.cpp @@ -99,7 +99,7 @@ void XmlPropertyReader::readInitialValues(IContinuous& system, shared_ptr typedef tuple all_vars_t; /**typedef for all output variables kinds at one time step*/ typedef tuple neg_all_vars_t; + + + /**typedef for all output data at one time step*/ typedef tuple write_data_t; /**typedef for all variable names*/ @@ -159,7 +165,7 @@ class IHistory virtual void clear()=0; virtual ~IHistory() {}; virtual void init() = 0; - virtual void write(const all_vars_t& v_list, double start_time, double end_time) = 0; + virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list,double start_time, double end_time) = 0; virtual void write(const all_names_t& s_list,const all_description_t& s_desc_list, const all_names_t& s_parameter_list,const all_description_t& s_desc_parameter_list) = 0; virtual void write(const all_vars_time_t& v_list,const neg_all_vars_t& neg_v_list) = 0; virtual void addContainerToWriteQueue(const write_data_t& container) = 0; diff --git a/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/BufferReaderWriter.h b/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/BufferReaderWriter.h index 9e4ff77d939..aaeb778d6d3 100644 --- a/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/BufferReaderWriter.h +++ b/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/BufferReaderWriter.h @@ -312,7 +312,7 @@ class BufferReaderWriter : public ContainerManager @start_time @end_time */ - virtual void write(const all_vars_t& v_list, double start_time, double end_time) + virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list, double start_time, double end_time) { //not supported for buffer } diff --git a/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/DefaultWriter.h b/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/DefaultWriter.h index 62b51dc2c50..06616e64c43 100644 --- a/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/DefaultWriter.h +++ b/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/DefaultWriter.h @@ -58,7 +58,7 @@ class DefaultWriter : public ContainerManager @start_time @end_time */ - virtual void write(const all_vars_t& v_list, double start_time, double end_time) + virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list, double start_time, double end_time) { //not supported for file output diff --git a/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/MatfileWriter.h b/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/MatfileWriter.h index 2cb9fd767b1..87872619c2a 100644 --- a/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/MatfileWriter.h +++ b/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/MatfileWriter.h @@ -289,7 +289,7 @@ class MatFileWriter : public ContainerManager * \return */ /*========================================================================================{end}==*/ - virtual void write(const all_vars_t& v_list, double start_time, double end_time) + virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list, double start_time, double end_time) { unsigned int uiParCount = get<0>(v_list).size() +get<1>(v_list).size()+get<2>(v_list).size()+ 1; // all variables + time double *doubleHelpMatrix = NULL; @@ -304,27 +304,31 @@ class MatFileWriter : public ContainerManager *(doubleHelpMatrix + uiParCount) = end_time; doubleHelpMatrix++; - // ...then the other real variables - for (real_vars_t::const_iterator it = get<0>(v_list).begin(); it != get<0>(v_list).end(); ++it) - { - *doubleHelpMatrix = *(*it); - *(doubleHelpMatrix + uiParCount) = *(*it); - doubleHelpMatrix++; - } - // ...then the other int variables - for (int_vars_t::const_iterator it = get<1>(v_list).begin(); it != get<1>(v_list).end(); ++it) + + std::transform(get<0>(v_list).begin(), get<0>(v_list).end(), get<0>(neg_v_list).begin(), + doubleHelpMatrix, WriteOutputVar()); + + + // ...followed by int variable values. + /*for (int_vars_t::const_iterator it = get<1>(v_list).begin(); it != get<1>(v_list).end(); ++it) { *doubleHelpMatrix = *(*it); - *(doubleHelpMatrix + uiParCount) = *(*it); doubleHelpMatrix++; - } - // ...then the other bool variables - for (bool_vars_t::const_iterator it = get<2>(v_list).begin(); it != get<2>(v_list).end(); ++it) + }*/ + size_t nReal = get<0>(v_list).size(); + std::transform(get<1>(v_list).begin(), get<1>(v_list).end(), get<1>(neg_v_list).begin(), + doubleHelpMatrix + nReal, WriteOutputVar()); + // ...followed by bool variable values. + /*for (bool_vars_t::const_iterator it = get<2>(v_list).begin(); it != get<2>(v_list).end(); ++it) { *doubleHelpMatrix = *(*it); - *(doubleHelpMatrix + uiParCount) = *(*it); doubleHelpMatrix++; } + */ + size_t nInt = get<1>(v_list).size(); + std::transform(get<2>(v_list).begin(), get<2>(v_list).end(), get<2>(neg_v_list).begin(), + doubleHelpMatrix + nReal + nInt, WriteOutputVar()); + // if matrix is complete, write to file! writeMatVer4Matrix("data_1", uiParCount, 2, _doubleMatrixData1, sizeof(double)); diff --git a/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/TextfileWriter.h b/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/TextfileWriter.h index 8300a12b4c9..7c3d4357a5f 100644 --- a/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/TextfileWriter.h +++ b/OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/TextfileWriter.h @@ -69,7 +69,7 @@ class TextFileWriter : public ContainerManager @start_time @end_time */ - virtual void write(const all_vars_t& v_list, double start_time, double end_time) + virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list, double start_time, double end_time) { //not supported for file output