@@ -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)%>
68346744end 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