55 lines
1.9 KiB
C++
55 lines
1.9 KiB
C++
#ifndef FESA_RESULTS_MITC4_DRILLING_EVIDENCE_H_
|
|
#define FESA_RESULTS_MITC4_DRILLING_EVIDENCE_H_
|
|
|
|
#include <array>
|
|
#include <cmath>
|
|
#include <cstddef>
|
|
#include <optional>
|
|
|
|
#include "fesa/results/result_records.h"
|
|
|
|
namespace fesa::results_internal {
|
|
|
|
inline bool ValidDrillingMode(const Mitc4DrillingMode mode) {
|
|
return mode == Mitc4DrillingMode::kDirectSpring ||
|
|
mode == Mitc4DrillingMode::kLegacyCorotatedTwist;
|
|
}
|
|
|
|
/// @brief Validates exact raw-minus-internal diagnostics without a tolerance.
|
|
inline bool ValidDrillingEvidence(
|
|
const std::optional<Mitc4DrillingEvidence>& evidence,
|
|
const std::array<double, 6>& raw) {
|
|
if (!evidence) return true; // Older manually constructed fixtures.
|
|
if (!ValidDrillingMode(evidence->mode)) return false;
|
|
for (std::size_t i = 0U; i < 6U; ++i) {
|
|
const double expected = i < 3U ? raw[i]
|
|
: raw[i] - evidence->drilling_moment[i - 3U];
|
|
if (!std::isfinite(raw[i]) || !std::isfinite(expected) ||
|
|
!std::isfinite(evidence->equilibrium_with_drilling[i]) ||
|
|
evidence->equilibrium_with_drilling[i] != expected)
|
|
return false;
|
|
}
|
|
for (const double value : evidence->drilling_moment)
|
|
if (!std::isfinite(value)) return false;
|
|
return true;
|
|
}
|
|
|
|
inline bool SameDrillingInventory(
|
|
const std::optional<Mitc4DrillingEvidence>& left,
|
|
const std::optional<Mitc4DrillingEvidence>& right) {
|
|
return left.has_value() == right.has_value() &&
|
|
(!left || left->mode == right->mode);
|
|
}
|
|
|
|
/// @brief Keeps force balance raw and subtracts positive artificial moment once.
|
|
inline void CompleteDrillingEvidence(
|
|
const std::array<double, 6>& raw, Mitc4DrillingEvidence* evidence) {
|
|
evidence->equilibrium_with_drilling = raw;
|
|
for (std::size_t i = 0U; i < 3U; ++i)
|
|
evidence->equilibrium_with_drilling[3U + i] -= evidence->drilling_moment[i];
|
|
}
|
|
|
|
} // namespace fesa::results_internal
|
|
|
|
#endif // FESA_RESULTS_MITC4_DRILLING_EVIDENCE_H_
|