Skip to content

Commit

Permalink
Removing stand alone solver from the runtime
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@10550 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
fbergero committed Nov 18, 2011
1 parent 287ba6b commit d088e81
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 23 deletions.
4 changes: 2 additions & 2 deletions c_runtime/Makefile.common
Expand Up @@ -42,8 +42,8 @@ SIM_OBJS = $(OBJS) simulation_runtime.o

QSS_OBJS = $(OBJS) \
simulation_runtime_qss.o \
solver_qss/solver_qss.o \
solver_qss/sampler.o \
solver_qss/solver_qss.o
#solver_qss/sampler.o \
solver_qss/integrator.o \
solver_qss/qss_signal.o \
solver_qss/static_function.o \
Expand Down
2 changes: 2 additions & 0 deletions c_runtime/solver_qss/cross_detector.cpp
Expand Up @@ -36,9 +36,11 @@ void CrossDetector::makeStep(Time t)

void CrossDetector::update(Time t)
{
/*
if (zc[index].value()>0)
set_condition_to(index,false);
else
set_condition_to(index,true);
*/
}

2 changes: 1 addition & 1 deletion c_runtime/solver_qss/integrator.cpp
Expand Up @@ -14,7 +14,7 @@ void IntegratorQSS::init(Time t, unsigned int i)
for (int j=0;j<inputRows;j++)
{
if (inputMatrix[j*2]==index) {
cout << "Integrator " << index << " computes state " << stateNumber(inputMatrix[j*2+1]) <<endl;
//cout << "Integrator " << index << " computes state " << stateNumber(inputMatrix[j*2+1]) <<endl;
state = stateNumber(inputMatrix[j*2+1]);
break;
}
Expand Down
19 changes: 13 additions & 6 deletions c_runtime/solver_qss/solver_qss.cpp
Expand Up @@ -226,31 +226,31 @@ int qss_main( int argc, char** argv,double &start, double &stop, double &step,
// Create one integrator for each state
for (int i=0;i<globalData->nStates;i++)
{
childs[i] = new IntegratorQSS(dQmin,dQrel);
//childs[i] = new IntegratorQSS(dQmin,dQrel);
childs[i]->init(globalData->timeValue,i);
tn[i] = globalData->timeValue+childs[i]->ta();
}
// Init static functions and zero crossings functions
for (int i=0;i<staticBlocks;i++)
{
childs[i+globalData->nStates] = new StaticFunction(1,dQmin,dQrel,i+globalData->nStates);
//childs[i+globalData->nStates] = new StaticFunction(1,dQmin,dQrel,i+globalData->nStates);
childs[i+globalData->nStates]->init(globalData->timeValue,i);
if (i >= staticPureBlocks) // if it is a crossing function
dynamic_cast<StaticFunction*>(childs[i+globalData->nStates])->setCrossing(i-staticPureBlocks);
//if (i >= staticPureBlocks) // if it is a crossing function
// dynamic_cast<StaticFunction*>(childs[i+globalData->nStates])->setCrossing(i-staticPureBlocks);
tn[i+globalData->nStates] = globalData->timeValue+childs[i+globalData->nStates]->ta();
}

// Zero crossings detectors - One per zero crossings
for (int i=0;i<zeroCrossings;i++)
{
const int index=i+globalData->nStates+staticBlocks;
childs[index] = new CrossDetector(1,dQmin,dQrel);
//childs[index] = new CrossDetector(1,dQmin,dQrel);
childs[index]->init(globalData->timeValue,i);
tn[index] = globalData->timeValue+childs[index]->ta();
}

// Periodic sampler for outputs
childs[size-1] = new Sampler(outputSteps,start,stop);
//childs[size-1] = new Sampler(outputSteps,start,stop);
childs[size-1]->init(globalData->timeValue,0);
tn[size-1] = globalData->timeValue+childs[size-1]->ta();

Expand Down Expand Up @@ -306,6 +306,9 @@ int qss_main( int argc, char** argv,double &start, double &stop, double &step,
return 0;
}

#ifdef __cplusplus
extern "C" {
#endif

void init_ompd()
{
Expand Down Expand Up @@ -455,6 +458,10 @@ void clean_ompd()
free(globalData);
}

#ifdef __cplusplus
}
#endif

int
main_qss(int argc, char**argv)
{
Expand Down
28 changes: 14 additions & 14 deletions c_runtime/solver_qss/static_function.cpp
Expand Up @@ -95,17 +95,17 @@ void StaticFunction::writeOutputs(Time t)
{
if (isState(*it))
{
cout << "Block " << devsIndex << " writes der " << stateNumber(*it) << endl;
derX[stateNumber(*it)].sampledAt(t);
derX[stateNumber(*it)].setCoeff(0,out[i]);
if (order>1)
derX[stateNumber(*it)].setCoeff(1,(outdt[i]-out_dt[i])/(dt*2));
//cout << "Block " << devsIndex << " writes der " << stateNumber(*it) << endl;
//derX[stateNumber(*it)].sampledAt(t);
//derX[stateNumber(*it)].setCoeff(0,out[i]);
//if (order>1)
//derX[stateNumber(*it)].setCoeff(1,(outdt[i]-out_dt[i])/(dt*2));
} else {
cout << "Block " << devsIndex << " writes algebraic " << algNumber(*it) << endl;
alg[algNumber(*it)].sampledAt(t);
alg[algNumber(*it)].setCoeff(0,out[i]);
if (order>1)
alg[algNumber(*it)].setCoeff(1,(outdt[i]-out_dt[i])/(dt*2));
//cout << "Block " << devsIndex << " writes algebraic " << algNumber(*it) << endl;
//alg[algNumber(*it)].sampledAt(t);
//alg[algNumber(*it)].setCoeff(0,out[i]);
//if (order>1)
//alg[algNumber(*it)].setCoeff(1,(outdt[i]-out_dt[i])/(dt*2));
}
if (order==2)
{
Expand All @@ -131,11 +131,11 @@ void StaticFunction::advanceInputs(Time t)
{
if (isState(*it))
{
cout << "Block " << devsIndex << " uses state " << stateNumber(*it) << endl;
inp[i] = q[stateNumber(*it)].valueAt(t);
//cout << "Block " << devsIndex << " uses state " << stateNumber(*it) << endl;
//inp[i] = q[stateNumber(*it)].valueAt(t);
} else {
cout << "Block " << devsIndex << " uses state " << algNumber(*it) << endl;
inp[i] = alg[algNumber(*it)].valueAt(t);
//cout << "Block " << devsIndex << " uses state " << algNumber(*it) << endl;
//inp[i] = alg[algNumber(*it)].valueAt(t);
}
}
}

0 comments on commit d088e81

Please sign in to comment.