Skip to content

Commit

Permalink
Fix negate alias parameters (#527)
Browse files Browse the repository at this point in the history
  • Loading branch information
niklwors authored and lochel committed Nov 8, 2019
1 parent a7c5e31 commit 384bc76
Show file tree
Hide file tree
Showing 8 changed files with 39 additions and 27 deletions.
4 changes: 3 additions & 1 deletion OMCompiler/Compiler/Template/CodegenCpp.tpl
Expand Up @@ -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
Expand Down
Expand Up @@ -99,7 +99,7 @@ void XmlPropertyReader::readInitialValues(IContinuous& system, shared_ptr<ISimVa
if (emitResult)
{
if (isParameter)
_realVars.addParameter(name, descripton, realVarPtr);
_realVars.addParameter(name, descripton, realVarPtr, isNegatedAlias);
else
_realVars.addOutputVar(name, descripton, realVarPtr, isNegatedAlias);
}
Expand All @@ -121,7 +121,7 @@ void XmlPropertyReader::readInitialValues(IContinuous& system, shared_ptr<ISimVa
if (emitResult)
{
if (isParameter)
_intVars.addParameter(name, descripton, intVarPtr);
_intVars.addParameter(name, descripton, intVarPtr, isNegatedAlias);
else
_intVars.addOutputVar(name, descripton, intVarPtr, isNegatedAlias);
}
Expand All @@ -143,7 +143,7 @@ void XmlPropertyReader::readInitialValues(IContinuous& system, shared_ptr<ISimVa
if (emitResult)
{
if (isParameter)
_boolVars.addParameter(name, descripton, boolVarPtr);
_boolVars.addParameter(name, descripton, boolVarPtr, isNegatedAlias);
else
_boolVars.addOutputVar(name, descripton, boolVarPtr, isNegatedAlias);
}
Expand Down
Expand Up @@ -103,9 +103,9 @@ class HistoryImpl : public IHistory,
{
ResultsPolicy::eraseAll();
};
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)
{
ResultsPolicy::write(v_list,start_time,end_time);
ResultsPolicy::write(v_list, neg_v_list,start_time,end_time);
};
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)
Expand Down
Expand Up @@ -44,8 +44,10 @@ struct SimulationOutput
values_t outputVars;
/** Container for all output parameter*/
values_t outputParams;
/** Container for all output variable kinds*/
/** Container for all negate alias output variable */
negate_values_t negateOutputVars;
/** Container for all negate alias parameter */
negate_values_t negateParams;

/**
* \brief adds a parameter to output list
Expand All @@ -54,11 +56,12 @@ struct SimulationOutput
* \param [in] description description of parameter
* \param [in] var pointer to parameter in simvars array
*/
void addParameter(string& name,string& description,const T* var)
void addParameter(string& name,string& description,const T* var, bool negate)
{
parameterNames.push_back(name);
parameterDescription.push_back(description);
outputParams.push_back(var);
negateParams.push_back(negate);
}
/**
* \brief adds a variable to output list
Expand Down Expand Up @@ -101,6 +104,9 @@ typedef tuple<real_vars_t,int_vars_t,bool_vars_t,double,der_vars_t,res_vars_t>
typedef tuple<real_vars_t,int_vars_t,bool_vars_t,der_vars_t,res_vars_t> all_vars_t;
/**typedef for all output variables kinds at one time step*/
typedef tuple<negate_values_t,negate_values_t,negate_values_t,negate_values_t,negate_values_t> neg_all_vars_t;



/**typedef for all output data at one time step*/
typedef tuple<all_vars_time_t,neg_all_vars_t> write_data_t;
/**typedef for all variable names*/
Expand Down Expand Up @@ -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;
Expand Down
Expand Up @@ -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
}
Expand Down
Expand Up @@ -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
Expand Down
Expand Up @@ -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;
Expand All @@ -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<double>());


// ...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<int>());
// ...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<bool>());


// if matrix is complete, write to file!
writeMatVer4Matrix("data_1", uiParCount, 2, _doubleMatrixData1, sizeof(double));
Expand Down
Expand Up @@ -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
Expand Down

0 comments on commit 384bc76

Please sign in to comment.