Files
FESADev/tests/reference/mitc4_drilling_report.h

59 lines
1.7 KiB
C++

#ifndef FESA_TESTS_REFERENCE_MITC4_DRILLING_REPORT_H_
#define FESA_TESTS_REFERENCE_MITC4_DRILLING_REPORT_H_
#include <array>
#include <cstddef>
#include <cstdint>
#include <optional>
#include <ostream>
#include <string>
#include <vector>
namespace fesa::test {
struct Mitc4DrillingFrameReport {
std::string storage_step;
std::uint64_t frame_index;
std::array<double, 6> raw_equilibrium;
std::array<double, 3> drilling_moment;
std::array<double, 6> equilibrium_with_drilling;
};
struct Mitc4DrillingDiagnosticsReport {
std::string formulation;
std::uint64_t version;
std::vector<Mitc4DrillingFrameReport> frames;
};
inline void WriteDrillingDiagnosticsJson(
std::ostream& stream, const std::optional<Mitc4DrillingDiagnosticsReport>& report) {
if (!report) { stream << "null"; return; }
stream << "{\"formulation\":\"" << report->formulation
<< "\",\"version\":" << report->version << ",\"frames\":[";
const auto numbers = [&](const auto& values) {
stream << '[';
for (std::size_t i = 0; i < values.size(); ++i) {
if (i != 0U) stream << ',';
stream << values[i];
}
stream << ']';
};
for (std::size_t i = 0; i < report->frames.size(); ++i) {
if (i != 0U) stream << ',';
const auto& frame = report->frames[i];
stream << "{\"storage_step\":\"Step-1\",\"frame_index\":" << frame.frame_index
<< ",\"raw_equilibrium\":";
numbers(frame.raw_equilibrium);
stream << ",\"drilling_moment\":";
numbers(frame.drilling_moment);
stream << ",\"equilibrium_with_drilling\":";
numbers(frame.equilibrium_with_drilling);
stream << '}';
}
stream << "]}";
}
} // namespace fesa::test
#endif // FESA_TESTS_REFERENCE_MITC4_DRILLING_REPORT_H_