CppNoddy  0.92
Loading...
Searching...
No Matches
TrackerFile.cpp
Go to the documentation of this file.
1/// \file TrackerFile.cpp
2/// Implementation details for the TrackerFile object.
3
4#include <iomanip>
5
6#include <TrackerFile.h>
7#include <Utility.h>
8#include <OneD_Node_Mesh.h>
9
10namespace CppNoddy {
11
13 this -> m_precision = prec;
14 }
15
16 TrackerFile::TrackerFile(std::string filename, int prec) {
17 m_dumpFile.open(filename.c_str());
18 this -> m_precision = prec;
19 m_dumpFile.precision(prec);
20 m_dumpFile << std::scientific;
21 }
22
24 m_dumpFile.close();
25 }
26
27 void TrackerFile::push_ptr(double* scalar, std::string desc) {
28 p_doubles.push_back(scalar);
29 m_doubleDesc.push_back(desc);
30 }
31
32 void TrackerFile::push_ptr(D_complex* scalar, std::string desc) {
33 //p_Doubles.push_back( &( scalar -> real() ) );
34 //p_Doubles.push_back( &( scalar -> imag() ) );
35 // above is no longer valid for g++-7.2
36 p_doubles.push_back(&reinterpret_cast<double(&)[2]>(*scalar)[0]);
37 p_doubles.push_back(&reinterpret_cast<double(&)[2]>(*scalar)[1]);
38 m_doubleDesc.push_back(desc + " (real)");
39 m_doubleDesc.push_back(desc + " (imag)");
40 }
41
42 void TrackerFile::push_ptr(DenseVector<double>* ptr_to_vector, std::string desc) {
43 p_doubleVectors.push_back(ptr_to_vector);
44 m_doubleVectorDesc.push_back(desc);
45 }
46
47 void TrackerFile::push_ptr(DenseVector<D_complex>* ptr_to_vector, std::string desc) {
48 p_complexVectors.push_back(ptr_to_vector);
49 m_complexVectorDesc.push_back(desc);
50 }
51
52 void TrackerFile::push_ptr(OneD_Node_Mesh<double>* ptr_to_mesh, std::string desc) {
53 p_doubleMesh.push_back(ptr_to_mesh);
54 m_doubleMeshDesc.push_back(desc);
55 }
56
57 void TrackerFile::push_ptr(OneD_Node_Mesh<D_complex>* ptr_to_mesh, std::string desc) {
58 p_complexMesh.push_back(ptr_to_mesh);
59 m_complexMeshDesc.push_back(desc);
60 }
61
62 void TrackerFile::push_ptr(OneD_Node_Mesh<D_complex, D_complex>* ptr_to_mesh, std::string desc) {
63 p_complexComplexMesh.push_back(ptr_to_mesh);
64 m_complexMeshDesc.push_back(desc);
65 }
67 m_dumpFile << "\n";
68 }
69
70 void TrackerFile::set_filename(std::string filename) {
71 m_dumpFile.close();
72 m_dumpFile.open(filename.c_str());
73 m_dumpFile.precision(m_precision);
74 }
75
76 void TrackerFile::precision(unsigned prec) {
77 this -> m_precision = prec;
78 m_dumpFile.precision(prec);
79 }
80
82 // write the header
83 m_dumpFile << " # Header : \n # ";
84 for(std::size_t i = 0; i < m_doubleDesc.size(); ++i) {
85 m_dumpFile << m_doubleDesc[ i ] << " | ";
86 }
87 for(std::size_t i = 0; i < m_doubleVectorDesc.size(); ++i) {
88 m_dumpFile << m_doubleVectorDesc[ i ] << " | ";
89 }
90 for(std::size_t i = 0; i < m_complexVectorDesc.size(); ++i) {
91 m_dumpFile << m_complexVectorDesc[ i ] + " (Real)" << " | ";
92 m_dumpFile << m_complexVectorDesc[ i ] + " (Imag)" << " | ";
93 }
94 for(std::size_t i = 0; i < m_doubleMeshDesc.size(); ++i) {
95 m_dumpFile << m_doubleMeshDesc[ i ] + " (nodes)" << " | ";
96 for(unsigned var = 0; var < (*p_doubleMesh[ i ]).get_nvars(); ++var) {
97 m_dumpFile << m_doubleMeshDesc[ i ] + " var#" + Utility::stringify(var) + " | ";
98 }
99 }
100 for(std::size_t i = 0; i < m_complexMeshDesc.size(); ++i) {
101 m_dumpFile << m_complexMeshDesc[ i ] + "(nodes)" << " | ";
102 for(unsigned var = 0; var < (*p_complexMesh[ i ]).get_nvars(); ++var) {
103 m_dumpFile << m_complexMeshDesc[ i ] + " var#" + Utility::stringify(var) + " (Real) | ";
104 m_dumpFile << m_complexMeshDesc[ i ] + " var#" + Utility::stringify(var) + " (Imag) | ";
105 }
106 }
107 for(std::size_t i = 0; i < m_complexComplexMeshDesc.size(); ++i) {
108 m_dumpFile << m_complexComplexMeshDesc[ i ] + "(nodes)_real" << " | ";
109 m_dumpFile << m_complexComplexMeshDesc[ i ] + "(nodes)_imag" << " | ";
110 for(unsigned var = 0; var < (*p_complexComplexMesh[ i ]).get_nvars(); ++var) {
111 m_dumpFile << m_complexComplexMeshDesc[ i ] + " var#" + Utility::stringify(var) + " (Real) | ";
112 m_dumpFile << m_complexComplexMeshDesc[ i ] + " var#" + Utility::stringify(var) + " (Imag) | ";
113 }
114 }
115 m_dumpFile << "\n";
116 }
117
119 unsigned block_size(1);
120 if(!p_doubleVectors.empty()) {
121 block_size = p_doubleVectors[ 0 ] -> size();
122 }
123 if(!p_complexVectors.empty()) {
124 block_size = p_complexVectors[ 0 ] -> size();
125 }
126 if(!p_doubleMesh.empty()) {
127 block_size = p_doubleMesh[ 0 ] -> get_nnodes();
128 }
129 if(!p_complexMesh.empty()) {
130 block_size = p_complexMesh[ 0 ] -> get_nnodes();
131 }
132 if(!p_complexComplexMesh.empty()) {
133 block_size = p_complexComplexMesh[ 0 ] -> get_nnodes();
134 }
135
136 for(unsigned line = 0; line < block_size; ++line) {
137 dump_scalar_data();
138 if(!p_doubleVectors.empty()) {
139 // for each vector ptr
140 for(std::size_t i = 0; i < p_doubleVectors.size(); ++i) {
141 m_dumpFile << (*p_doubleVectors[ i ]) [ line ] << " ";
142 }
143 }
144 if(!p_complexVectors.empty()) {
145 // for each vector ptr
146 for(std::size_t i = 0; i < p_complexVectors.size(); ++i) {
147 m_dumpFile << (*p_complexVectors[ i ]) [ line ].real() << " ";
148 m_dumpFile << (*p_complexVectors[ i ]) [ line ].imag() << " ";
149 }
150 }
151 if(!p_doubleMesh.empty()) {
152 // for each mesh ptr
153 for(std::size_t i = 0; i < p_doubleMesh.size(); ++i) {
154 m_dumpFile << (*p_doubleMesh[ i ]).coord(line) << " ";
155 for(unsigned var = 0; var < p_doubleMesh[ i ] -> get_nvars(); ++var) {
156 m_dumpFile << (*p_doubleMesh[ i ])(line, var) << " ";
157 }
158 }
159 }
160 if(!p_complexMesh.empty()) {
161 // for each mesh ptr
162 for(std::size_t i = 0; i < p_complexMesh.size(); ++i) {
163 m_dumpFile << (*p_complexMesh[ i ]).coord(line) << " ";
164 for(unsigned var = 0; var < p_complexMesh[ i ] -> get_nvars(); ++var) {
165 m_dumpFile << (*p_complexMesh[ i ])(line, var).real() << " ";
166 m_dumpFile << (*p_complexMesh[ i ])(line, var).imag() << " ";
167 }
168 }
169 }
170 if(!p_complexComplexMesh.empty()) {
171 // for each mesh ptr
172 for(std::size_t i = 0; i < p_complexComplexMesh.size(); ++i) {
173 m_dumpFile << (*p_complexComplexMesh[ i ]).coord(line).real() << " ";
174 m_dumpFile << (*p_complexComplexMesh[ i ]).coord(line).imag() << " ";
175 for(unsigned var = 0; var < p_complexComplexMesh[ i ] -> get_nvars(); ++var) {
176 m_dumpFile << (*p_complexComplexMesh[ i ])(line, var).real() << " ";
177 m_dumpFile << (*p_complexComplexMesh[ i ])(line, var).imag() << " ";
178 }
179 }
180 }
181 m_dumpFile << "\n";
182 }
183 // flush the buffer
184 m_dumpFile.flush();
185 }
186
187 void TrackerFile::dump_scalar_data() {
188 if(!p_doubles.empty()) {
189 // simple flat data file
190 for(std::size_t i = 0; i < p_doubles.size(); ++i) {
191 m_dumpFile << *p_doubles[ i ] << " ";
192 }
193 }
194 }
195
196} //end namepsace
A specification for a one dimensional mesh object.
A class that can be passed pointers to scalar/vector/mesh objects, then their contents are written to...
A spec for a collection of utility functions.
An DenseVector class – a dense vector object.
Definition: DenseVector.h:34
A one dimensional mesh utility object.
std::ofstream m_dumpFile
Definition: TrackerFile.h:52
TrackerFile(int prec=12)
Definition: TrackerFile.cpp:12
void precision(unsigned prec)
Definition: TrackerFile.cpp:76
void push_ptr(double *scalar, std::string desc="")
Definition: TrackerFile.cpp:27
void set_filename(std::string filename)
Definition: TrackerFile.cpp:70
std::string stringify(const int &val)
Return an integer value as a string - useful for file naming.
Definition: Utility.cpp:193
A collection of OO numerical routines aimed at simple (typical) applied problems in continuum mechani...
std::complex< double > D_complex
A complex double precision number using std::complex.
Definition: Types.h:98

© 2012

R.E. Hewitt