Skip to content

Commit

Permalink
In SimCodeCpp.tpl fixed a bug with arrays and extended functions for …
Browse files Browse the repository at this point in the history
…doing reduction.

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@10970 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Kaie Kubjas authored and Kaie Kubjas committed Jan 27, 2012
1 parent 9ea9370 commit 7f04f5f
Show file tree
Hide file tree
Showing 9 changed files with 458 additions and 165 deletions.
559 changes: 409 additions & 150 deletions Compiler/susan_codegen/SimCode/SimCodeCpp.tpl

Large diffs are not rendered by default.

10 changes: 9 additions & 1 deletion SimulationRuntime/cpp/Source/DataExchange/Interfaces/IHistory.h
Expand Up @@ -22,10 +22,14 @@ class IHistory
*/
virtual void getSimResults(const double time,ublas::vector<double>& v,ublas::vector<double>& dv) =0;
/**
Returns all simulation results for all Varibables (R matrix) and rhs(dR)
Returns all simulation results for all Variables (R matrix) and rhs(dR)
*/
virtual void getSimResults(ublas::matrix<double>& R,ublas::matrix<double>& dR) =0;
/**
Returns all simulation results for all Variables (R matrix), rhs(dR) and residues (Re)
*/
virtual void getSimResults(ublas::matrix<double>& R,ublas::matrix<double>& dR,ublas::matrix<double>& Re) =0;
/**
Returns all output variables results
*/
virtual void getOutputResults(ublas::matrix<double>& OR)=0;
Expand All @@ -46,6 +50,10 @@ class IHistory
*/
virtual unsigned long getDimdR()=0;
/**
Returns number of residues
*/
virtual unsigned long getDimRe()=0;
/**
Clears simulation buffer
*/
virtual void clear()=0;
Expand Down
Expand Up @@ -67,6 +67,9 @@ int SystemDefaultImplementation::getDimRHS(const IContinous::INDEX index) const
i+= _dimAE;
else if (index & IContinous::DIFF_INDEX1)
i+= _dimAE;

if (index & IContinous::ALL_RESIDUES)
i+= _dimResidues;

return i;
};
Expand Down
Expand Up @@ -83,6 +83,7 @@ class BOOST_EXTENSION_SYSTEM_DECL SystemDefaultImplementation
int
_dimODE1stOrder, ///< Number (dimension) of first order ordinary differential equations
_dimODE2ndOrder, ///< Number (dimension) of second order ordinary differential equations (RHS of a mechanical system)
_dimResidues, ///< Number of residues
_dimAE; ///< Number (dimension) of algebraic equations (e.g. constraints from an algebraic loop)
bool _initial;

Expand Down
4 changes: 3 additions & 1 deletion SimulationRuntime/cpp/Source/System/Interfaces/IContinous.h
Expand Up @@ -29,7 +29,7 @@ class IContinous
DIFF_INDEX3 = 0x00008, ///< Differentiation Index 3 (constraints on position level only)
DIFF_INDEX2 = 0x00010, ///< Differentiation Index 2 (constraints on velocity level only)
DIFF_INDEX1 = 0x00020, ///< Differentiation Index 1 (constraints on acceleration level only)

ALL_RESIDUES = 0x00040, ///< All residues
ALL_STATES = 0x00007, ///< All states (no order)
ALL_VARS = 0x0003f, ///< All variables (no order)
};
Expand All @@ -42,6 +42,8 @@ class IContinous
DISCRETE = 0x00000001, ///< Sample discrete variables only
CONTINOUS = 0x00000002, ///< Determine continous variables
ALL = 0x00000003, ///< [DISCRETE|CONTINOUS]
RANKING = 0x00000004, ///< Ranking Method

};


Expand Down
34 changes: 24 additions & 10 deletions SimulationRuntime/cpp/Source/System/Modelica/HistoryImpl.h
Expand Up @@ -5,14 +5,14 @@



template< template <unsigned long,unsigned long> class ResultsPolicy,unsigned long dim_1,unsigned long dim_2>
template< template <unsigned long,unsigned long,unsigned long> class ResultsPolicy,unsigned long dim_1,unsigned long dim_2,unsigned long dim_3>
class HistoryImpl: public IHistory,
public ResultsPolicy<dim_1,dim_2>
public ResultsPolicy<dim_1,dim_2,dim_3>
{
public:

HistoryImpl(IGlobalSettings& globalSettings)
:ResultsPolicy<dim_1,dim_2>((globalSettings.getEndTime()-globalSettings.getStartTime())/globalSettings.gethOutput(),globalSettings.getOutputPath())
:ResultsPolicy<dim_1,dim_2,dim_3>((globalSettings.getEndTime()-globalSettings.getStartTime())/globalSettings.gethOutput(),globalSettings.getOutputPath())
{

}
Expand All @@ -26,28 +26,42 @@ class HistoryImpl: public IHistory,

void getSimResults(const double time,ublas::vector<double>& v,ublas::vector<double>& dv)
{
ResultsPolicy<dim_1,dim_2>::read(time,v,dv);
ResultsPolicy<dim_1,dim_2,dim_3>::read(time,v,dv);

}


void getSimResults(ublas::matrix<double>& R,ublas::matrix<double>& dR)
{

ResultsPolicy<dim_1,dim_2>::read(R,dR);
ResultsPolicy<dim_1,dim_2,dim_3>::read(R,dR);

}

void getSimResults(ublas::matrix<double>& R,ublas::matrix<double>& dR,ublas::matrix<double>& Re)
{

ResultsPolicy<dim_1,dim_2,dim_3>::read(R,dR,Re);

}

virtual void getOutputResults(ublas::matrix<double>& Ro)
{
ResultsPolicy<dim_1,dim_2>::read(Ro,_var_outputs);
ResultsPolicy<dim_1,dim_2,dim_3>::read(Ro,_var_outputs);
}

unsigned long getSize()
{
return ResultsPolicy<dim_1,dim_2>::size();
return ResultsPolicy<dim_1,dim_2,dim_3>::size();
}



unsigned long getDimRe()
{
return dim_3;
}


unsigned long getDimdR()
{
return dim_2;
Expand All @@ -64,13 +78,13 @@ class HistoryImpl: public IHistory,
vector<double> getTimeEntries()
{
vector<double> time;
ResultsPolicy<dim_1,dim_2>::getTime(time);
ResultsPolicy<dim_1,dim_2,dim_3>::getTime(time);
return time;
}

void clear()
{
ResultsPolicy<dim_1,dim_2>::eraseAll();
ResultsPolicy<dim_1,dim_2,dim_3>::eraseAll();
};
private:
//List of indices of all output variables
Expand Down
Expand Up @@ -15,6 +15,7 @@ Modelica::Modelica(IGlobalSettings& globalSettings)
// Number of equations
_dimODE1stOrder = 0; // ordinary differential equations of 1st order
_dimODE2ndOrder = 0; // ordinary differential equations of 2nd order
_dimResidues = 0;
//DAE's are not supported yet, Index reduction is enabled
_dimAE = 0; // algebraic equations
// Initialize the state vector
Expand Down
Expand Up @@ -17,7 +17,7 @@
* System class Modelica implements the Interface IDAESystem
*
*****************************************************************************/
typedef HistoryImpl<TextFileWriter,0,0> HistoryImplType;
typedef HistoryImpl<TextFileWriter,0,0,0> HistoryImplType;


class Modelica: public IDAESystem ,public IContinous ,public IEvent ,public ISystemProperties, public SystemDefaultImplementation
Expand Down
Expand Up @@ -7,7 +7,7 @@ using std::ios;
/**
Policy class to write simulation results in a text file
*/
template <unsigned long dim_1,unsigned long dim_2 >
template <unsigned long dim_1,unsigned long dim_2,unsigned long dim_3>
struct TextFileWriter
{
public:
Expand All @@ -30,7 +30,12 @@ struct TextFileWriter
//not supported for file output

}


void read(ublas::matrix<double>& R,ublas::matrix<double>& dR,ublas::matrix<double>& Re)
{
//not supported for file output

}

void read(const double& time,ublas::vector<double>& dv,ublas::vector<double>& v)
{
Expand Down

0 comments on commit 7f04f5f

Please sign in to comment.