Cantera  2.2.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
plots.cpp
Go to the documentation of this file.
1 /**
2  * @file plots.cpp
3  */
4 // Copyright 2002 California Institute of Technology
5 
6 #include "cantera/base/plots.h"
7 
8 using namespace std;
9 
10 namespace Cantera
11 {
12 
13 void writePlotFile(const std::string& fname, const std::string& fmt,
14  const std::string& plotTitle,
15  const std::vector<std::string> &names,
16  const Array2D& data)
17 {
18  ofstream f(fname.c_str());
19  if (!f) {
20  throw CanteraError("writePlotFile","could not open file "+fname+
21  " for writing.");
22  }
23  if (fmt == "TEC") {
24  outputTEC(f, plotTitle, names, data);
25  f.close();
26  } else if (fmt == "XL" || fmt == "CSV") {
27  outputExcel(f, plotTitle, names, data);
28  f.close();
29  } else {
30  throw CanteraError("writePlotFile",
31  "unsupported plot type:" + fmt);
32  }
33 }
34 
35 void outputTEC(std::ostream& s, const std::string& title,
36  const std::vector<std::string>& names,
37  const Array2D& data)
38 {
39  s << "TITLE = \"" + title + "\"" << endl;
40  s << "VARIABLES = " << endl;
41  for (size_t i = 0; i < data.nRows(); i++) {
42  s << "\"" << names[i] << "\"" << endl;
43  }
44  s << "ZONE T=\"zone1\"" << endl;
45  s << " I=" << data.nColumns() << ",J=1,K=1,F=POINT" << endl;
46  s << "DT=( ";
47  for (size_t i = 0; i < data.nRows(); i++) {
48  s << " SINGLE";
49  }
50  s << " )" << endl;
51  for (size_t i = 0; i < data.nColumns(); i++) {
52  for (size_t j = 0; j < data.nRows(); j++) {
53  s << data(j,i) << " ";
54  }
55  s << endl;
56  }
57 }
58 
59 void outputExcel(std::ostream& s, const std::string& title,
60  const std::vector<std::string>& names,
61  const Array2D& data)
62 {
63  s << title + "," << endl;
64  for (size_t i = 0; i < data.nRows(); i++) {
65  s << names[i];
66  if (i != data.nRows()-1) {
67  s << ",";
68  }
69  }
70  s << endl;
71  for (size_t i = 0; i < data.nColumns(); i++) {
72  for (size_t j = 0; j < data.nRows(); j++) {
73  s << data(j,i);
74  if (j != data.nRows()-1) {
75  s << ",";
76  }
77  }
78  s << endl;
79  }
80 }
81 
82 }
size_t nRows() const
Number of rows.
Definition: Array.h:312
Contains declarations for utility functions for outputing to plotting programs.
static std::string fmt(const std::string &r, size_t n)
void writePlotFile(const std::string &fname, const std::string &fmt, const std::string &plotTitle, const std::vector< std::string > &names, const Array2D &data)
Write a Plotting file.
Definition: plots.cpp:13
A class for 2D arrays stored in column-major (Fortran-compatible) form.
Definition: Array.h:29
void outputExcel(std::ostream &s, const std::string &title, const std::vector< std::string > &names, const Array2D &data)
Write an Excel spreadsheet in 'csv' form.
Definition: plots.cpp:59
size_t nColumns() const
Number of columns.
Definition: Array.h:317
Base class for exceptions thrown by Cantera classes.
Definition: ctexceptions.h:99
void outputTEC(std::ostream &s, const std::string &title, const std::vector< std::string > &names, const Array2D &data)
Write a Tecplot data file.
Definition: plots.cpp:35