Skip to content

Commit 384bc76

Browse files
niklworslochel
authored andcommitted
Fix negate alias parameters (#527)
1 parent a7c5e31 commit 384bc76

File tree

8 files changed

+39
-27
lines changed

8 files changed

+39
-27
lines changed

OMCompiler/Compiler/Template/CodegenCpp.tpl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6594,13 +6594,15 @@ case SIMCODE(modelInfo = MODELINFO(__),simulationSettingsOpt = SOME(settings as
65946594
case "mat" then
65956595
<<
65966596
const all_vars_t params = make_tuple(outputRealVars.outputParams,outputIntVars.outputParams,outputBoolVars.outputParams,outputDerVars.outputParams,outputResVars.outputParams);
6597+
neg_all_vars_t neg_all_params = make_tuple(outputRealVars.negateParams, outputIntVars.negateParams, outputBoolVars.negateParams, outputDerVars.negateParams, outputResVars.negateParams);
65976598
>>
65986599
else
65996600
<<
66006601
const all_vars_t params;
6602+
const neg_all_vars_t neg_all_params;
66016603
>>
66026604
%>
6603-
_writeOutput->write(params,_global_settings->getStartTime(),_global_settings->getEndTime());
6605+
_writeOutput->write(params,neg_all_params,_global_settings->getStartTime(),_global_settings->getEndTime());
66046606
}
66056607
//Write the current values
66066608
else

OMCompiler/SimulationRuntime/cpp/Core/DataExchange/XmlPropertyReader.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ void XmlPropertyReader::readInitialValues(IContinuous& system, shared_ptr<ISimVa
9999
if (emitResult)
100100
{
101101
if (isParameter)
102-
_realVars.addParameter(name, descripton, realVarPtr);
102+
_realVars.addParameter(name, descripton, realVarPtr, isNegatedAlias);
103103
else
104104
_realVars.addOutputVar(name, descripton, realVarPtr, isNegatedAlias);
105105
}
@@ -121,7 +121,7 @@ void XmlPropertyReader::readInitialValues(IContinuous& system, shared_ptr<ISimVa
121121
if (emitResult)
122122
{
123123
if (isParameter)
124-
_intVars.addParameter(name, descripton, intVarPtr);
124+
_intVars.addParameter(name, descripton, intVarPtr, isNegatedAlias);
125125
else
126126
_intVars.addOutputVar(name, descripton, intVarPtr, isNegatedAlias);
127127
}
@@ -143,7 +143,7 @@ void XmlPropertyReader::readInitialValues(IContinuous& system, shared_ptr<ISimVa
143143
if (emitResult)
144144
{
145145
if (isParameter)
146-
_boolVars.addParameter(name, descripton, boolVarPtr);
146+
_boolVars.addParameter(name, descripton, boolVarPtr, isNegatedAlias);
147147
else
148148
_boolVars.addOutputVar(name, descripton, boolVarPtr, isNegatedAlias);
149149
}

OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/HistoryImpl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ class HistoryImpl : public IHistory,
103103
{
104104
ResultsPolicy::eraseAll();
105105
};
106-
virtual void write(const all_vars_t& v_list, double start_time, double end_time)
106+
virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list, double start_time, double end_time)
107107
{
108-
ResultsPolicy::write(v_list,start_time,end_time);
108+
ResultsPolicy::write(v_list, neg_v_list,start_time,end_time);
109109
};
110110
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&
111111
s_desc_parameter_list)

OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/IHistory.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,10 @@ struct SimulationOutput
4444
values_t outputVars;
4545
/** Container for all output parameter*/
4646
values_t outputParams;
47-
/** Container for all output variable kinds*/
47+
/** Container for all negate alias output variable */
4848
negate_values_t negateOutputVars;
49+
/** Container for all negate alias parameter */
50+
negate_values_t negateParams;
4951

5052
/**
5153
* \brief adds a parameter to output list
@@ -54,11 +56,12 @@ struct SimulationOutput
5456
* \param [in] description description of parameter
5557
* \param [in] var pointer to parameter in simvars array
5658
*/
57-
void addParameter(string& name,string& description,const T* var)
59+
void addParameter(string& name,string& description,const T* var, bool negate)
5860
{
5961
parameterNames.push_back(name);
6062
parameterDescription.push_back(description);
6163
outputParams.push_back(var);
64+
negateParams.push_back(negate);
6265
}
6366
/**
6467
* \brief adds a variable to output list
@@ -101,6 +104,9 @@ typedef tuple<real_vars_t,int_vars_t,bool_vars_t,double,der_vars_t,res_vars_t>
101104
typedef tuple<real_vars_t,int_vars_t,bool_vars_t,der_vars_t,res_vars_t> all_vars_t;
102105
/**typedef for all output variables kinds at one time step*/
103106
typedef tuple<negate_values_t,negate_values_t,negate_values_t,negate_values_t,negate_values_t> neg_all_vars_t;
107+
108+
109+
104110
/**typedef for all output data at one time step*/
105111
typedef tuple<all_vars_time_t,neg_all_vars_t> write_data_t;
106112
/**typedef for all variable names*/
@@ -159,7 +165,7 @@ class IHistory
159165
virtual void clear()=0;
160166
virtual ~IHistory() {};
161167
virtual void init() = 0;
162-
virtual void write(const all_vars_t& v_list, double start_time, double end_time) = 0;
168+
virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list,double start_time, double end_time) = 0;
163169
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;
164170
virtual void write(const all_vars_time_t& v_list,const neg_all_vars_t& neg_v_list) = 0;
165171
virtual void addContainerToWriteQueue(const write_data_t& container) = 0;

OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/BufferReaderWriter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ class BufferReaderWriter : public ContainerManager
312312
@start_time
313313
@end_time
314314
*/
315-
virtual void write(const all_vars_t& v_list, double start_time, double end_time)
315+
virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list, double start_time, double end_time)
316316
{
317317
//not supported for buffer
318318
}

OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/DefaultWriter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class DefaultWriter : public ContainerManager
5858
@start_time
5959
@end_time
6060
*/
61-
virtual void write(const all_vars_t& v_list, double start_time, double end_time)
61+
virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list, double start_time, double end_time)
6262
{
6363

6464
//not supported for file output

OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/MatfileWriter.h

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ class MatFileWriter : public ContainerManager
289289
* \return
290290
*/
291291
/*========================================================================================{end}==*/
292-
virtual void write(const all_vars_t& v_list, double start_time, double end_time)
292+
virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list, double start_time, double end_time)
293293
{
294294
unsigned int uiParCount = get<0>(v_list).size() +get<1>(v_list).size()+get<2>(v_list).size()+ 1; // all variables + time
295295
double *doubleHelpMatrix = NULL;
@@ -304,27 +304,31 @@ class MatFileWriter : public ContainerManager
304304
*(doubleHelpMatrix + uiParCount) = end_time;
305305
doubleHelpMatrix++;
306306

307-
// ...then the other real variables
308-
for (real_vars_t::const_iterator it = get<0>(v_list).begin(); it != get<0>(v_list).end(); ++it)
309-
{
310-
*doubleHelpMatrix = *(*it);
311-
*(doubleHelpMatrix + uiParCount) = *(*it);
312-
doubleHelpMatrix++;
313-
}
314-
// ...then the other int variables
315-
for (int_vars_t::const_iterator it = get<1>(v_list).begin(); it != get<1>(v_list).end(); ++it)
307+
308+
std::transform(get<0>(v_list).begin(), get<0>(v_list).end(), get<0>(neg_v_list).begin(),
309+
doubleHelpMatrix, WriteOutputVar<double>());
310+
311+
312+
// ...followed by int variable values.
313+
/*for (int_vars_t::const_iterator it = get<1>(v_list).begin(); it != get<1>(v_list).end(); ++it)
316314
{
317315
*doubleHelpMatrix = *(*it);
318-
*(doubleHelpMatrix + uiParCount) = *(*it);
319316
doubleHelpMatrix++;
320-
}
321-
// ...then the other bool variables
322-
for (bool_vars_t::const_iterator it = get<2>(v_list).begin(); it != get<2>(v_list).end(); ++it)
317+
}*/
318+
size_t nReal = get<0>(v_list).size();
319+
std::transform(get<1>(v_list).begin(), get<1>(v_list).end(), get<1>(neg_v_list).begin(),
320+
doubleHelpMatrix + nReal, WriteOutputVar<int>());
321+
// ...followed by bool variable values.
322+
/*for (bool_vars_t::const_iterator it = get<2>(v_list).begin(); it != get<2>(v_list).end(); ++it)
323323
{
324324
*doubleHelpMatrix = *(*it);
325-
*(doubleHelpMatrix + uiParCount) = *(*it);
326325
doubleHelpMatrix++;
327326
}
327+
*/
328+
size_t nInt = get<1>(v_list).size();
329+
std::transform(get<2>(v_list).begin(), get<2>(v_list).end(), get<2>(neg_v_list).begin(),
330+
doubleHelpMatrix + nReal + nInt, WriteOutputVar<bool>());
331+
328332

329333
// if matrix is complete, write to file!
330334
writeMatVer4Matrix("data_1", uiParCount, 2, _doubleMatrixData1, sizeof(double));

OMCompiler/SimulationRuntime/cpp/Include/Core/DataExchange/Policies/TextfileWriter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class TextFileWriter : public ContainerManager
6969
@start_time
7070
@end_time
7171
*/
72-
virtual void write(const all_vars_t& v_list, double start_time, double end_time)
72+
virtual void write(const all_vars_t& v_list, const neg_all_vars_t& neg_v_list, double start_time, double end_time)
7373
{
7474

7575
//not supported for file output

0 commit comments

Comments
 (0)