hummingbird
Solving the self-adjoint angular flux transport equation using spectral elements on Cartesian geometry
Loading...
Searching...
No Matches
results.cc
Go to the documentation of this file.
1#include "utils/results.h"
2
3#include <fstream>
4#include <iomanip>
5#include <limits>
6#include <stdexcept>
7
8namespace hummingbird {
9Results::Results(const std::string& name, const OutputFormat output_format,
10 const std::vector<Node>& nodes,
11 const QuadratureBase<Ordinate>& angular_quadrature,
12 const unsigned int dimension)
13 : name_(name),
14 output_format_(output_format),
15 nodes_(nodes),
16 angular_quadrature_(angular_quadrature),
17 dimension_(dimension) {}
18
20 switch (output_format_) {
22 ToCSV();
23 break;
24
25 default:
26 throw std::runtime_error("Output format not yet supported.");
27 break;
28 }
29}
30
32 const std::string file_name = name_ + "_results.csv";
33 std::ofstream out(file_name);
34 if (!out.is_open())
35 throw std::runtime_error("Could not open file for writing: " + file_name);
36
37 const size_t n_ordinates = angular_quadrature_.n_points();
38
39 out << "node_id,x,y,z,scalar_flux";
40 for (size_t i = 0; i < n_ordinates; i++) {
41 out << ",angular_flux_" << i;
42 if (dimension_ == 1)
43 out << ",direction_cosine_" << i;
44 else
45 out << ",azimuth_" << i << ",polar_" << i;
46 }
47 out << "\n";
48
49 out << std::setprecision(std::numeric_limits<double>::max_digits10);
50 for (const auto& node : nodes_) {
51 out << node.id << "," << node.x << "," << node.y << "," << node.z << ","
52 << node.scalar_flux;
53 for (size_t i = 0; i < n_ordinates; i++) {
54 const Ordinate ordinate = angular_quadrature_.GetAbscissa(i);
55 out << "," << node.angular_fluxes.at(i);
56 if (dimension_ == 1)
57 out << "," << ordinate.x();
58 else
59 out << "," << ordinate.azimuth() << "," << ordinate.polar();
60 }
61 out << "\n";
62 }
63}
64} // namespace hummingbird
Defines a solid angle, or ordinate, in spherical geometry.
Definition ordinate.h:15
double polar() const
Getter for polar angle.
Definition ordinate.h:47
double x() const
Evaluate the x-direction cosine.
Definition ordinate.cc:32
double azimuth() const
Getter for azimuthal angle.
Definition ordinate.h:40
Base class for defining a quadrature set.
const std::string & name_
Problem name, used to build the output file name.
Definition results.h:47
const std::vector< Node > & nodes_
Mesh nodes holding the solution values to export.
Definition results.h:53
const OutputFormat output_format_
Format to export results in.
Definition results.h:50
const QuadratureBase< Ordinate > & angular_quadrature_
Angular quadrature set.
Definition results.h:56
const unsigned int dimension_
Spatial dimension of the mesh.
Definition results.h:59
void ToCSV()
Export the results as a CSV file.
Definition results.cc:31
Results(const std::string &name, const OutputFormat output_format, const std::vector< Node > &nodes, const QuadratureBase< Ordinate > &angular_quadrature, const unsigned int dimension)
Construct a new Results object.
Definition results.cc:9
void Export()
Export the results in the format given by output_format_.
Definition results.cc:19
OutputFormat
Output forms available for export.
Definition enums.h:99