Add MITC4 drilling diagnostics output and comparison contract

This commit is contained in:
KOKO\Mimi
2026-10-20 09:45:58 +09:00
parent 3d5c296651
commit a73d3fc9ca
31 changed files with 1175 additions and 45 deletions
+58
View File
@@ -0,0 +1,58 @@
#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_