Skip to content

Commit 19c8d32

Browse files
committed
changed output method uses xml file to pass variables from simvars to output routine
1 parent e2767e6 commit 19c8d32

File tree

13 files changed

+863
-616
lines changed

13 files changed

+863
-616
lines changed

Compiler/Template/CodegenCpp.tpl

Lines changed: 24 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,6 @@ template translateModel(SimCode simCode)
7171
let()= textFile(simulationExtensionCppFile(simCode , &extraFuncs , &extraFuncsDecl, "", stateDerVectorName, false),'OMCpp<%fileNamePrefix%>Extension.cpp')
7272
let()= textFile(simulationWriteOutputHeaderFile(simCode , &extraFuncs , &extraFuncsDecl, ""),'OMCpp<%fileNamePrefix%>WriteOutput.h')
7373
let()= textFile(simulationWriteOutputCppFile(simCode , &extraFuncs , &extraFuncsDecl, "", stateDerVectorName, false),'OMCpp<%fileNamePrefix%>WriteOutput.cpp')
74-
let()= textFile(simulationWriteOutputAlgVarsCppFile(simCode , &extraFuncs , &extraFuncsDecl, "", stateDerVectorName, false),'OMCpp<%fileNamePrefix%>WriteOutputAlgVars.cpp')
75-
let()= textFile(simulationWriteOutputParameterCppFile(simCode , &extraFuncs , &extraFuncsDecl, "", false),'OMCpp<%fileNamePrefix%>WriteOutputParameter.cpp')
76-
let()= textFile(simulationWriteOutputAliasVarsCppFile(simCode , &extraFuncs , &extraFuncsDecl, "", stateDerVectorName, false),'OMCpp<%fileNamePrefix%>WriteOutputAliasVars.cpp')
7774
let()= textFile(simulationFactoryFile(simCode , &extraFuncs , &extraFuncsDecl, ""),'OMCpp<%fileNamePrefix%>FactoryExport.cpp')
7875
let()= textFile(simulationMainRunScript(simCode , &extraFuncs , &extraFuncsDecl, "", "", "", "exec"), '<%fileNamePrefix%><%simulationMainRunScriptSuffix(simCode , &extraFuncs , &extraFuncsDecl, "")%>')
7976
let jac = (jacobianMatrixes |> (mat, _, _, _, _, _, _) =>
@@ -335,7 +332,7 @@ case SIMCODE(modelInfo=MODELINFO(__),simulationSettingsOpt = SOME(settings as SI
335332
let numparams = match settings.outputFormat case "csv" then "1" else n
336333
<<
337334
#pragma once
338-
typedef HistoryImpl<<%outputtype%>,<%numProtectedAlgvars(modelInfo)%>+<%numProtectedAliasvars(modelInfo)%>+<%numStatevars(modelInfo)%>,<%numDerivativevars(modelInfo)%>,0,<%numparams%>> HistoryImplType;
335+
typedef HistoryImpl<<%outputtype%> > HistoryImplType;
339336

340337
/*****************************************************************************
341338
*
@@ -358,62 +355,6 @@ case SIMCODE(modelInfo=MODELINFO(__),simulationSettingsOpt = SOME(settings as SI
358355
protected:
359356
void initialize();
360357
private:
361-
<% match modelInfo case MODELINFO(vars=SIMVARS(__)) then
362-
<<
363-
void writeParams(HistoryImplType::value_type_p& params);
364-
<%List.partition(protectedVars(vars.paramVars), 100) |> ls hasindex idx => 'void writeParamsReal_<%idx%>(HistoryImplType::value_type_p& params );';separator="\n"%>
365-
void writeParamsReal(HistoryImplType::value_type_p& params );
366-
<%List.partition(protectedVars(vars.intParamVars), 100) |> ls hasindex idx => 'void writeParamsInt_<%idx%>(HistoryImplType::value_type_p& params );';separator="\n"%>
367-
void writeParamsInt(HistoryImplType::value_type_p& params );
368-
<%List.partition(protectedVars(vars.boolParamVars), 100) |> ls hasindex idx => 'void writeParamsBool_<%idx%>(HistoryImplType::value_type_p& params );';separator="\n"%>
369-
void writeParamsBool(HistoryImplType::value_type_p& params );
370-
371-
372-
void writeAlgVarsValues(HistoryImplType::value_type_v *v);
373-
<%List.partition( protectedVars(vars.algVars), 100) |> ls hasindex idx => 'void writeAlgVarsValues_<%idx%>(HistoryImplType::value_type_v *v);';separator="\n" %>
374-
void writeDiscreteAlgVarsValues(HistoryImplType::value_type_v *v);
375-
<%List.partition( protectedVars(vars.discreteAlgVars), 100) |> ls hasindex idx => 'void writeDiscreteAlgVarsValues_<%idx%>(HistoryImplType::value_type_v *v);';separator="\n" %>
376-
void writeIntAlgVarsValues(HistoryImplType::value_type_v *v);
377-
<%List.partition( protectedVars(vars.intAlgVars), 100) |> ls hasindex idx => 'void writeIntAlgVarsValues_<%idx%>(HistoryImplType::value_type_v *v);';separator="\n" %>
378-
void writeBoolAlgVarsValues(HistoryImplType::value_type_v *v);
379-
<%List.partition( protectedVars(vars.boolAlgVars), 100) |> ls hasindex idx => 'void writeBoolAlgVarsValues_<%idx%>(HistoryImplType::value_type_v *v);';separator="\n" %>
380-
void writeAliasVarsValues(HistoryImplType::value_type_v *v);
381-
<%List.partition( protectedVars(vars.aliasVars), 100) |> ls hasindex idx => 'void writeAliasVarsValues_<%idx%>(HistoryImplType::value_type_v *v);';separator="\n" %>
382-
void writeIntAliasVarsValues(HistoryImplType::value_type_v *v);
383-
<%List.partition( protectedVars(vars.intAliasVars), 100) |> ls hasindex idx => 'void writeIntAliasVarsValues_<%idx%>(HistoryImplType::value_type_v *v);';separator="\n" %>
384-
void writeBoolAliasVarsValues(HistoryImplType::value_type_v *v);
385-
<%List.partition( protectedVars(vars.boolAliasVars), 100) |> ls hasindex idx => 'void writeBoolAliasVarsValues_<%idx%>(HistoryImplType::value_type_v *v);';separator="\n" %>
386-
void writeStateValues(HistoryImplType::value_type_v *v, HistoryImplType::value_type_dv *v2);
387-
388-
>>
389-
end match%>
390-
391-
void writeAlgVarsResultNames(vector<string>& names);
392-
void writeDiscreteAlgVarsResultNames(vector<string>& names);
393-
void writeIntAlgVarsResultNames(vector<string>& names);
394-
void writeBoolAlgVarsResultNames(vector<string>& names);
395-
void writeAliasVarsResultNames(vector<string>& names);
396-
void writeIntAliasVarsResultNames(vector<string>& names);
397-
void writeBoolAliasVarsResultNames(vector<string>& names);
398-
void writeStateVarsResultNames(vector<string>& names);
399-
void writeDerivativeVarsResultNames(vector<string>& names);
400-
void writeParametertNames(vector<string>& names);
401-
void writeIntParameterNames(vector<string>& names);
402-
void writeBoolParameterNames(vector<string>& names);
403-
404-
void writeAlgVarsResultDescription(vector<string>& names);
405-
void writeDiscreteAlgVarsResultDescription(vector<string>& names);
406-
void writeIntAlgVarsResultDescription(vector<string>& names);
407-
void writeBoolAlgVarsResultDescription(vector<string>& names);
408-
void writeAliasVarsResultDescription(vector<string>& names);
409-
void writeIntAliasVarsResultDescription(vector<string>& names);
410-
void writeBoolAliasVarsResultDescription(vector<string>& names);
411-
void writeStateVarsResultDescription(vector<string>& names);
412-
void writeDerivativeVarsResultDescription(vector<string>& names);
413-
void writeParameterDescription(vector<string>& names);
414-
void writeIntParameterDescription(vector<string>& names);
415-
void writeBoolParameterDescription(vector<string>& names);
416-
417358
HistoryImplType* _historyImpl;
418359
};
419360
>>
@@ -810,13 +751,13 @@ case SIMCODE(modelInfo = MODELINFO(__)) then
810751
<%lastIdentOfPath(modelInfo.name)%>WriteOutput::<%lastIdentOfPath(modelInfo.name)%>WriteOutput(IGlobalSettings* globalSettings, boost::shared_ptr<IAlgLoopSolverFactory> nonlinsolverfactory, boost::shared_ptr<ISimData> sim_data, boost::shared_ptr<ISimVars> sim_vars)
811752
: <%lastIdentOfPath(modelInfo.name)%>(globalSettings, nonlinsolverfactory, sim_data,sim_vars)
812753
{
813-
_historyImpl = new HistoryImplType(*globalSettings);
754+
_historyImpl = new HistoryImplType(*globalSettings,<%numAlgvars(modelInfo)%> + <%numAliasvars(modelInfo)%> + 2*<%numStatevars(modelInfo)%>);
814755
}
815756

816757
<%lastIdentOfPath(modelInfo.name)%>WriteOutput::<%lastIdentOfPath(modelInfo.name)%>WriteOutput(<%lastIdentOfPath(modelInfo.name)%>WriteOutput& instance)
817758
: <%lastIdentOfPath(modelInfo.name)%>(instance.getGlobalSettings(), instance.getAlgLoopSolverFactory(), instance.getSimData(), instance.getSimVars())
818759
{
819-
_historyImpl = new HistoryImplType(*instance.getGlobalSettings());
760+
_historyImpl = new HistoryImplType(*instance.getGlobalSettings(),<%numAlgvars(modelInfo)%>+ <%numAliasvars(modelInfo)%> + 2*<%numStatevars(modelInfo)%>);
820761
}
821762

822763
<%lastIdentOfPath(modelInfo.name)%>WriteOutput::~<%lastIdentOfPath(modelInfo.name)%>WriteOutput()
@@ -2814,9 +2755,6 @@ template calcHelperMainfile(SimCode simCode ,Text& extraFuncs,Text& extraFuncsDe
28142755
#include "OMCpp<%fileNamePrefix%>InitializeExtVars.cpp"
28152756
#include "OMCpp<%fileNamePrefix%>Initialize.cpp"
28162757
#include "OMCpp<%fileNamePrefix%>WriteOutput.cpp"
2817-
#include "OMCpp<%fileNamePrefix%>WriteOutputAlgVars.cpp"
2818-
#include "OMCpp<%fileNamePrefix%>WriteOutputParameter.cpp"
2819-
#include "OMCpp<%fileNamePrefix%>WriteOutputAliasVars.cpp"
28202758
#include "OMCpp<%fileNamePrefix%>Jacobian.cpp"
28212759
#include "OMCpp<%fileNamePrefix%>StateSelection.cpp"
28222760
#include "OMCpp<%fileNamePrefix%>.cpp"
@@ -5833,8 +5771,8 @@ case SIMCODE(modelInfo = MODELINFO(__),makefileParams = MAKEFILE_PARAMS(__)) th
58335771
>>
58345772
else
58355773
<<
5836-
IPropertyReader *reader = new XmlPropertyReader("<%makefileParams.compileDir%>/OMCpp<%fileNamePrefix%>Init.xml");
5837-
reader->readInitialValues(*this, _sim_vars);
5774+
_reader = boost::shared_ptr<IPropertyReader>(new XmlPropertyReader("<%makefileParams.compileDir%>/OMCpp<%fileNamePrefix%>Init.xml"));
5775+
_reader->readInitialValues(*this, _sim_vars);
58385776
>>
58395777
%>
58405778
initializeFreeVariables();
@@ -6730,56 +6668,41 @@ case SIMCODE(modelInfo = MODELINFO(__),simulationSettingsOpt = SOME(settings as
67306668

67316669
void <%lastIdentOfPath(modelInfo.name)%>WriteOutput::writeOutput(const IWriteOutput::OUTPUT command)
67326670
{
6671+
6672+
const output_int_vars_t& outputIntVars = _reader->getIntOutVars();
6673+
const output_real_vars_t& outputRealVars= _reader->getRealOutVars();
6674+
const output_bool_vars_t& outputBoolVars = _reader->getBoolOutVars();
67336675
//Write head line
67346676
if (command & IWriteOutput::HEAD_LINE)
67356677
{
6736-
vector<string> varsnames;
6737-
vector<string> vardescs;
6738-
vector<string> paramnames;
6739-
vector<string> paramdecs;
6740-
writeAlgVarsResultNames(varsnames);
6741-
writeDiscreteAlgVarsResultNames(varsnames);
6742-
writeIntAlgVarsResultNames(varsnames);
6743-
writeBoolAlgVarsResultNames(varsnames);
6744-
writeAliasVarsResultNames(varsnames);
6745-
writeIntAliasVarsResultNames(varsnames);
6746-
writeBoolAliasVarsResultNames(varsnames);
6747-
writeStateVarsResultNames(varsnames);
6748-
writeDerivativeVarsResultNames(varsnames);
67496678

6679+
const all_names_t outputVarNames = boost::make_tuple(outputRealVars.ourputVarNames,outputIntVars.ourputVarNames,outputBoolVars.ourputVarNames);
6680+
const all_names_t outputVarDescription = boost::make_tuple(outputRealVars.ourputVarDescription,outputIntVars.ourputVarDescription,outputBoolVars.ourputVarDescription);
67506681
<%
67516682
match settings.outputFormat
67526683
case "mat" then
67536684
<<
6754-
writeParametertNames(paramnames);
6755-
writeIntParameterNames(paramnames);
6756-
writeBoolParameterNames(paramnames);
6757-
writeAlgVarsResultDescription(vardescs);
6758-
writeDiscreteAlgVarsResultDescription(vardescs);
6759-
writeIntAlgVarsResultDescription(vardescs);
6760-
writeBoolAlgVarsResultDescription(vardescs);
6761-
writeAliasVarsResultDescription(vardescs);
6762-
writeIntAliasVarsResultDescription(vardescs);
6763-
writeBoolAliasVarsResultDescription(vardescs);
6764-
writeStateVarsResultDescription(vardescs);
6765-
writeDerivativeVarsResultDescription(vardescs);
6766-
writeParameterDescription(paramdecs);
6767-
writeIntParameterDescription(paramdecs);
6768-
writeBoolParameterDescription(paramdecs);
6685+
const all_names_t parameterVarNames = boost::make_tuple(outputRealVars.parameterNames,outputIntVars.parameterNames,outputBoolVars.parameterNames);
6686+
const all_names_t parameterVarDescription = boost::make_tuple(outputRealVars.parameterDescription,outputIntVars.parameterDescription,outputBoolVars.parameterDescription);
67696687
>>
6688+
else
6689+
<<
6690+
const all_names_t parameterVarNames;
6691+
const all_names_t parameterVarDescription;
6692+
>>
67706693
%>
6771-
_historyImpl->write(varsnames,vardescs,paramnames,paramdecs);
6694+
_historyImpl->write(outputVarNames,outputVarDescription,parameterVarNames,parameterVarDescription);
6695+
67726696
<%
67736697
match settings.outputFormat
67746698
case "mat" then
67756699
<<
6776-
HistoryImplType::value_type_p params;
6700+
const all_vars_t params = boost::make_tuple(outputRealVars.outputParams,outputIntVars.outputParams,outputBoolVars.outputParams);
67776701

6778-
writeParams(params);
67796702
>>
67806703
else
67816704
<<
6782-
HistoryImplType::value_type_p params;
6705+
const all_vars_t params;
67836706
>>
67846707
%>
67856708
_historyImpl->write(params,_global_settings->getStartTime(),_global_settings->getEndTime());
@@ -6791,19 +6714,8 @@ case SIMCODE(modelInfo = MODELINFO(__),simulationSettingsOpt = SOME(settings as
67916714
/* HistoryImplType::value_type_v v;
67926715
HistoryImplType::value_type_dv v2; */
67936716

6794-
boost::shared_ptr<HistoryImplType::values_type> container = _historyImpl->getFreeContainer();
6795-
boost::shared_ptr<HistoryImplType::value_type_v> v = container->get<0>();
6796-
boost::shared_ptr<HistoryImplType::value_type_dv> v2 = container->get<1>();
6797-
container->get<2>() = _simTime;
6717+
const HistoryImplType::values_type container = boost::make_tuple(outputRealVars.outputVars,outputIntVars.outputVars,outputBoolVars.outputVars,_simTime);
67986718

6799-
writeAlgVarsValues(v.get());
6800-
writeDiscreteAlgVarsValues(v.get());
6801-
writeIntAlgVarsValues(v.get());
6802-
writeBoolAlgVarsValues(v.get());
6803-
writeAliasVarsValues(v.get());
6804-
writeIntAliasVarsValues(v.get());
6805-
writeBoolAliasVarsValues(v.get());
6806-
writeStateValues(v.get(),v2.get());
68076719

68086720
<%if Flags.isSet(Flags.WRITE_TO_BUFFER) then
68096721
<<
@@ -6826,9 +6738,7 @@ case SIMCODE(modelInfo = MODELINFO(__),simulationSettingsOpt = SOME(settings as
68266738
%>
68276739
}
68286740
}
6829-
<%generateWriteOutputFunctionsForVars(modelInfo, simCode , &extraFuncs , &extraFuncsDecl, extraFuncsNamespace, '<%lastIdentOfPath(modelInfo.name)%>WriteOutput', useFlatArrayNotation)%>
68306741

6831-
<%writeoutput1(modelInfo)%>
68326742
>>
68336743
//<%writeAlgloopvars(odeEquations,algebraicEquations, parameterEquations,simCode , &extraFuncs , &extraFuncsDecl, extraFuncsNamespace)%>
68346744
end writeoutput;
@@ -7101,7 +7011,7 @@ match modelInfo
71017011
<%memberPreVariableDefinitions%>
71027012
<%conditionvariables%>
71037013
Functions* _functions;
7104-
7014+
boost::shared_ptr<IPropertyReader> _reader;
71057015
boost::shared_ptr<IAlgLoopSolverFactory> _algLoopSolverFactory; ///< Factory that provides an appropriate solver
71067016
<%algloopsolver%>
71077017
<%jacalgloopsolver%>

0 commit comments

Comments
 (0)