59 lines
1.7 KiB
C++
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_
|