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
131132void 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