Skip to content

Commit

Permalink
- Ported BackendDAEExt to OMC runtime
Browse files Browse the repository at this point in the history
  - Note: This might also be a fix for some weird bugs, or stuff that just accidently worked before (the old code would use the second argument of functions taking only 1 argument)


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@7203 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Nov 26, 2010
1 parent 0a27d7e commit bb059c3
Show file tree
Hide file tree
Showing 3 changed files with 373 additions and 289 deletions.
175 changes: 175 additions & 0 deletions Compiler/runtime/BackendDAEEXT.cpp
Expand Up @@ -47,3 +47,178 @@
#include <set>
#include <string>
#include <vector>
#include <cassert>


static std::set<int> e_mark;
static std::set<int> differentiated_mark;
static std::set<int> v_mark;

static std::vector<int> number;
static std::vector<int> lowlink;
static std::vector<int> v;
static std::vector<int> f;

using namespace std;

extern "C" {

void BackendDAEEXTImpl__initMarks(int nvars, int neqns)
{
// Why are the inputs not even used?
v_mark.clear();
e_mark.clear();
}

void BackendDAEEXTImpl__eMark(int i)
{
e_mark.insert(e_mark.begin(),i);
}

void BackendDAEEXTImpl__vMark(int i)
{
v_mark.insert(v_mark.begin(),i);
}

int BackendDAEEXTImpl__getVMark(int i)
{
return v_mark.find(i) != v_mark.end();
}

int BackendDAEEXTImpl__getEMark(int i)
{
//cout << "get_e_mark[" << i << "] == " << e_mark[i-1] << endl;
return e_mark.find(i) != e_mark.end();
}

void* BackendDAEEXTImpl__getMarkedEqns()
{
std::set<int>::iterator it;
void *res = mk_nil();
for (it=e_mark.begin(); it != e_mark.end(); it++) {
res = mk_cons(mk_icon(*it),res);
}
return res;
}

void BackendDAEEXTImpl__markDifferentiated(int i)
{
differentiated_mark.insert(differentiated_mark.begin(),i);
}

void BackendDAEEXTImpl__clearDifferentiated()
{
differentiated_mark.clear();
}

void* BackendDAEEXTImpl__getDifferentiatedEqns()
{
std::set<int>::iterator it;
void *res = mk_nil();
for (it=differentiated_mark.begin(); it != differentiated_mark.end(); it++) {
res = mk_cons(mk_icon(*it),res);
}
return res;
}

void* BackendDAEEXTImpl__getMarkedVariables()
{
std::set<int>::iterator it;
void *res = mk_nil();
for (it=v_mark.begin(); it != v_mark.end(); it++) {
res = mk_cons(mk_icon(*it),res);
}
return res;
}

void BackendDAEEXTImpl__initLowLink(int nvars)
{
//cout << "init lowlink n= " << nvars << endl;
lowlink.reserve(nvars);

while (lowlink.size() < (unsigned int)nvars)
lowlink.push_back(0);
for (int i =0; i < nvars; i++)
lowlink[i]=0;
}

void BackendDAEEXTImpl__initNumber(int nvars)
{
//cout << "init number n= " << nvars << endl;
number.reserve(nvars);

while (number.size() < (unsigned int)nvars)
number.push_back(0);
for (int i =0; i < nvars; i++)
number[i]=0;
}

void BackendDAEEXTImpl__setLowLink(int i, int val)
{
lowlink[i-1]=val;
}

void BackendDAEEXTImpl__setNumber(int i, int val)
{
number[i-1]=val;
}

int BackendDAEEXTImpl__getNumber(int i)
{
return number[i-1];
}

int BackendDAEEXTImpl__getLowLink(int i)
{
return lowlink[i-1];
}

void BackendDAEEXTImpl__dumpMarkedEquations(int nvars)
{
cout << "marked equations" << endl << "================" << endl;
for (std::set<int>::iterator i =e_mark.begin() ; i != e_mark.end(); i++)
cout << "eqn " << *i << endl;
}

void BackendDAEEXTImpl__dumpMarkedVariables(int nvars)
{
cout << "marked variables" << endl << "================" << endl;
for (std::set<int>::iterator i =v_mark.begin() ; i != v_mark.end(); i++)
cout << "var " << *i << endl;
}

void BackendDAEEXTImpl__initV(int size)
{
v.reserve(size);
}

void BackendDAEEXTImpl__initF(int size)
{
f.reserve(size);
}

void BackendDAEEXTImpl__setF(int i, int val)
{
if (i > f.size()) { f.resize(i); }
f[i-1]=val;
}

int BackendDAEEXTImpl__getF(int i)
{
assert(i <= f.size());
return f[i-1];
}

void BackendDAEEXTImpl__setV(int i, int val)
{
if ( i > v.size() ) { v.resize(i); }
v[i-1]=val;
}

int BackendDAEEXTImpl__getV(int i)
{
assert(i <= v.size());
return v[i-1];
}

}
47 changes: 17 additions & 30 deletions Compiler/runtime/BackendDAEEXT_omc.cpp
Expand Up @@ -41,85 +41,72 @@
*
*/

#include "meta_modelica.h"
#include "rml_compatibility.h"
#include "BackendDAEEXT.cpp"
#include <stdlib.h>

extern "C" {

extern int BackendDAEEXT_getVMark(int _inInteger)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
return BackendDAEEXTImpl__getVMark(_inInteger);
}
extern void* BackendDAEEXT_getMarkedEqns()
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
return BackendDAEEXTImpl__getMarkedEqns();
}
extern void BackendDAEEXT_eMark(int _inInteger)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
BackendDAEEXTImpl__eMark(_inInteger);
}
extern void BackendDAEEXT_clearDifferentiated()
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
BackendDAEEXTImpl__clearDifferentiated();
}
extern void* BackendDAEEXT_getDifferentiatedEqns()
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
return BackendDAEEXTImpl__getDifferentiatedEqns();
}
extern int BackendDAEEXT_getLowLink(int _inInteger)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
return BackendDAEEXTImpl__getLowLink(_inInteger);
}
extern void* BackendDAEEXT_getMarkedVariables()
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
return BackendDAEEXTImpl__getMarkedVariables();
}
extern int BackendDAEEXT_getNumber(int _inInteger)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
return BackendDAEEXTImpl__getNumber(_inInteger);
}
extern void BackendDAEEXT_setNumber(int _inInteger1, int _inInteger2)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
BackendDAEEXTImpl__setNumber(_inInteger1, _inInteger2);
}
extern void BackendDAEEXT_initMarks(int _inInteger1, int _inInteger2)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
BackendDAEEXTImpl__initMarks(_inInteger1, _inInteger2);
}
extern void BackendDAEEXT_initLowLink(int _inInteger)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
BackendDAEEXTImpl__initLowLink(_inInteger);
}
extern void BackendDAEEXT_markDifferentiated(int _inInteger)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
BackendDAEEXTImpl__markDifferentiated(_inInteger);
}
extern void BackendDAEEXT_initNumber(int _inInteger)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
BackendDAEEXTImpl__initNumber(_inInteger);
}
extern void BackendDAEEXT_setLowLink(int _inInteger1, int _inInteger2)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
BackendDAEEXTImpl__setLowLink(_inInteger1, _inInteger2);
}
extern void BackendDAEEXT_vMark(int _inInteger)
{
fprintf(stderr, "BackendDAEEXT NYI\n");
exit(1);
BackendDAEEXTImpl__vMark(_inInteger);
}

}

0 comments on commit bb059c3

Please sign in to comment.