Skip to content

Commit 2e6708e

Browse files
author
x05simel
committed
Added ptolemy plot output.
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@1525 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 21e1e35 commit 2e6708e

File tree

1 file changed

+46
-11
lines changed

1 file changed

+46
-11
lines changed

c_runtime/simulation_runtime.cpp

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
*/
2121

2222
#include <iostream>
23+
#include <limits>
2324
#include "simulation_runtime.h"
2425
#include "options.h"
2526

@@ -130,17 +131,51 @@ int main(int argc, char **argv)
130131

131132
void store_result(char * filename, double*data,long numpoints, long nx, long ny)
132133
{
133-
int num_vars = 1+nx*2+ny;
134-
for(int i=0; i < num_vars; i++) { // forall variables
135-
cerr << "Value " << i << endl;
136-
for (int k = 0 ; k < numpoints; k++) {
137-
cerr << data[k*num_vars+i] << ", ";
138-
}
139-
cerr << endl;
140-
134+
ofstream f(filename);
135+
if (!f)
136+
{
137+
cerr << "Error, couldn't create output file " << filename << endl;
138+
exit(-1);
141139
}
142140

141+
// Rather ugly numbers than unneccessary rounding.
142+
f.precision(numeric_limits<double>::digits10 + 1);
143+
144+
f << "TitleText: OpenModelica simulation plot" << endl;
145+
f << "XLabel: t" << endl << endl;
146+
147+
int num_vars = 1+nx*2+ny;
148+
149+
for(int var = 0; var < nx; ++var)
150+
{
151+
f << "DataSet: x" << var << endl;
152+
for(int i = 0; i < numpoints; ++i)
153+
f << data[i*num_vars] << ", " << data[i*num_vars + 1+var] << endl;
154+
f << endl;
155+
}
156+
157+
for(int var = 0; var < nx; ++var)
158+
{
159+
f << "DataSet: dx" << var << endl;
160+
for(int i = 0; i < numpoints; ++i)
161+
f << data[i*num_vars] << ", " << data[i*num_vars + 1+nx+var] << endl;
162+
f << endl;
163+
}
164+
165+
for(int var = 0; var < ny; ++var)
166+
{
167+
f << "DataSet: y" << var << endl;
168+
for(int i = 0; i < numpoints; ++i)
169+
f << data[i*num_vars] << ", " << data[i*num_vars + 1+2*nx+var] << endl;
170+
f << endl;
171+
}
143172

173+
f.close();
174+
if (!f)
175+
{
176+
cerr << "Error, couldn't write to output file " << filename << endl;
177+
exit(-1);
178+
}
144179
}
145180

146181
/* add_result
@@ -154,9 +189,9 @@ void add_result(double *data, double time,double *x, double *xd, double *y,
154189
static long current_pos = 0;
155190

156191
//save time first
157-
cerr << "adding result for time: " << time;
192+
//cerr << "adding result for time: " << time;
193+
//cerr.flush();
158194
data[current_pos++] = time;
159-
cerr.flush();
160195
// .. then states..
161196
for (int i = 0; i < nx; i++, current_pos++) {
162197
data[current_pos] = x[i];
@@ -169,7 +204,7 @@ void add_result(double *data, double time,double *x, double *xd, double *y,
169204
for (int i = 0; i < ny; i++, current_pos++) {
170205
data[current_pos] = y[i];
171206
}
172-
cerr << " ... done" << endl;
207+
//cerr << " ... done" << endl;
173208

174209
}
175210

0 commit comments

Comments
 (0)