Skip to content

Commit af9687a

Browse files
committed
changed A Matrix to ublas matrix in Algloop class
removed template functions in AlgLoop classes to calc A matrix, only one A matrix type can be used now(sparse matrix can be used with a flag later) adapted non linear solvers on new getSystemMatrix method
1 parent f9c741a commit af9687a

File tree

22 files changed

+1608
-1249
lines changed

22 files changed

+1608
-1249
lines changed

Compiler/Template/CodegenCpp.tpl

Lines changed: 123 additions & 49 deletions
Large diffs are not rendered by default.

SimulationRuntime/cpp/Core/Math/SparseMatrix.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <Core/ModelicaDefine.h>
22
#include <Core/Modelica.h>
3-
#include <Core/Math/SparseMatrix.h>
3+
#include <Core/Math/matrix_t.h>
44
#ifdef USE_UMFPACK
55
#include "umfpack.h"
66
#endif

SimulationRuntime/cpp/Core/Modelica/ModelicaSystem.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,12 @@ bool Modelica::checkConditions()
181181
throw ModelicaSimulationError(MODEL_EQ_SYSTEM,"checkConditions is not yet implemented");
182182
}
183183

184-
void Modelica::getJacobian(SparseMatrix& matrix)
184+
void Modelica::getJacobian(matrix_t& matrix)
185185
{
186186
throw ModelicaSimulationError(MODEL_EQ_SYSTEM,"giveJacobian is not yet implemented");
187187
}
188188

189-
void Modelica::getStateSetJacobian(SparseMatrix& matrix)
189+
void Modelica::getStateSetJacobian(matrix_t& matrix)
190190
{
191191
throw ModelicaSimulationError(MODEL_EQ_SYSTEM,"giveStateJacobian is not yet implemented");
192192
}

SimulationRuntime/cpp/Core/Solver/SystemStateSelection.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ return true;
7676
{
7777
boost::shared_array<int> oldColPivot(new int[_dimStateCanditates[i]]);
7878
boost::shared_array<int> oldRowPivot(new int[_dimDummyStates[i]]);
79-
SparseMatrix stateset_matrix;
79+
matrix_t stateset_matrix;
8080
_system->getStateSetJacobian(i,stateset_matrix);
8181

8282
/* call pivoting function to select the states */

SimulationRuntime/cpp/Core/System/SimVars.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,7 @@ bool* SimVars::initBoolArrayVar(size_t size, size_t start_index)
235235
*/
236236
void SimVars::initRealAliasArray(int indices[], size_t n, double* ref_data[])
237237
{
238-
for(int i = 0; i < n; i++)
239-
{
240-
int index = indices[i];
241-
double* refToVar = SimVars::getRealVar(index);
242-
ref_data[i] = refToVar;
243-
}
238+
std::transform(indices,indices+n,ref_data,boost::lambda::bind(&SimVars::getRealVar,this,boost::lambda::_1));
244239
}
245240

246241
void SimVars::initRealAliasArray(std::vector<int> indices, double* ref_data[])

SimulationRuntime/cpp/Include/Core/Modelica.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,11 @@ using std::vector;
8989
//using boost::timer::nanosecond_type;
9090
typedef ublas::shallow_array_adaptor<double> adaptor_t;
9191
typedef ublas::vector<double, adaptor_t> shared_vector_t;
92-
typedef ublas::matrix<double, adaptor_t> shared_matrix_t;
93-
typedef boost::function<bool (unsigned int)> getCondition_type;
94-
typedef boost::function<void (unordered_map<string,unsigned int>&,unordered_map<string,unsigned int>&)> init_prevars_type;
95-
typedef uBlas::compressed_matrix<double, uBlas::row_major, 0, uBlas::unbounded_array<int>, uBlas::unbounded_array<double> > SparseMatrix;
92+
typedef ublas::matrix<double, ublas::column_major,adaptor_t> shared_matrix_t;
93+
//typedef boost::function<bool (unsigned int)> getCondition_type;
94+
//typedef boost::function<void (unordered_map<string,unsigned int>&,unordered_map<string,unsigned int>&)> init_prevars_type;
95+
typedef uBlas::compressed_matrix<double, uBlas::column_major, 0, uBlas::unbounded_array<int>, uBlas::unbounded_array<double> > sparsematrix_t;
96+
typedef ublas::matrix<double, ublas::column_major> matrix_t;
9697
#include <Core/SimulationSettings/ISettingsFactory.h>
9798
#include <SimCoreFactory/Policies/FactoryConfig.h>
9899
#include <Core/Utils/Modelica/ModelicaSimulationError.h>

SimulationRuntime/cpp/Include/Core/Modelica/ModelicaSystem.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ class Modelica : public IMixedSystem, public IContinuous, public IEvent, public
8383
virtual void setTime(const double& t);
8484

8585
// Provide Jacobian
86-
virtual void getJacobian(SparseMatrix& matrix);
87-
virtual void getStateSetJacobian(SparseMatrix& matrix);
86+
virtual void getJacobian(matrix_t& matrix);
87+
virtual void getStateSetJacobian(matrix_t& matrix);
8888
// Provide number (dimension) of zero functions
8989
virtual int getDimZeroFunc() ;
9090

SimulationRuntime/cpp/Include/Core/System/DiscreteEvents.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class BOOST_EXTENSION_EVENTHANDLING_DECL DiscreteEvents
4141
bool changeDiscreteVar(double& var);
4242
bool changeDiscreteVar(int& var);
4343
bool changeDiscreteVar(bool& var);
44-
getCondition_type getCondition;
44+
//getCondition_type getCondition;
4545

4646
private:
4747
boost::shared_ptr<ISimVars> _sim_vars;

SimulationRuntime/cpp/Include/Core/System/IAlgLoop.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ class IAlgLoop
5454
/// Provide the right hand side (according to the index)
5555
virtual void getRHS(double* res) = 0;
5656

57-
virtual void getSystemMatrix(double* A_matrix) = 0;
58-
virtual void getSystemMatrix(SparseMatrix&) = 0;
57+
58+
virtual const matrix_t& getSystemMatrix() = 0;
5959

6060
virtual bool isLinear() = 0;
6161
virtual bool isLinearTearing() = 0;

SimulationRuntime/cpp/Include/Core/System/IMixedSystem.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ class IMixedSystem
2626
public:
2727
virtual ~IMixedSystem() {};
2828
/// Provide Jacobian
29-
virtual void getJacobian(SparseMatrix& matrix) = 0;
30-
virtual void getJacobian(SparseMatrix& matrix,unsigned int index) = 0;
31-
virtual void getStateSetJacobian(unsigned int index, SparseMatrix& matrix) = 0;
29+
virtual const matrix_t& getJacobian() = 0;
30+
virtual const matrix_t& getJacobian(unsigned int index) = 0;
31+
virtual void getStateSetJacobian(unsigned int index, matrix_t& matrix) = 0;
3232
/// Called to handle all events occured at same time
3333
virtual bool handleSystemEvents(bool* events) = 0;
3434

0 commit comments

Comments
 (0)