18#include "PanelLoadTypes.h"
21#include <fhsim/ISimObjectLogger.h>
24namespace hydrodynamics
28constexpr unsigned kReportedClampFlags = kPanelFlagSolidityClamped | kPanelFlagReynoldsClamped | kPanelFlagFlowNotFinite;
37 void Note(
unsigned flags)
const
39 const unsigned relevant = flags & kReportedClampFlags;
40 if (relevant != 0 && (m_seen.load(std::memory_order_relaxed) | relevant) != m_seen.load(std::memory_order_relaxed))
41 m_seen.fetch_or(relevant, std::memory_order_relaxed);
50 void Report(ISimObjectLogger& logger,
const std::string& name)
52 const unsigned fresh = m_seen.load(std::memory_order_relaxed) & ~m_reported;
53 if (fresh & kPanelFlagSolidityClamped)
54 logger.LogInfo(name +
": Warning: a panel's solidity was clamped into its load law's range, so its load is capped. Check KnotFactor and Solidity, and whether the mesh has closed up. Logged once per run.");
55 if (fresh & kPanelFlagReynoldsClamped)
56 logger.LogInfo(name +
": a panel's Reynolds number was clamped into its load law's fit range, so its drag coefficient is held at the bound. Logged once per run.");
57 if (fresh & kPanelFlagFlowNotFinite)
58 logger.LogInfo(name +
": Warning: a panel's relative water velocity was not finite, so its load was set to zero. The state is diverging; reduce the step size or check the inputs. Logged once per run.");
63 mutable std::atomic<unsigned> m_seen {0};
64 unsigned m_reported = 0;
Definition PanelClampLog.h:31
void Report(ISimObjectLogger &logger, const std::string &name)
Definition PanelClampLog.h:50
void Note(unsigned flags) const
Definition PanelClampLog.h:37