16#include <boost/serialization/access.hpp>
17#include <boost/serialization/array.hpp>
47 : fB({utils::simd::Cast<I, T>(bx), utils::simd::Cast<I, T>(by), utils::simd::Cast<I, T>(bz)})
70 void Set(
const I& bx,
const I& by,
const I& bz)
72 fB[0] = utils::simd::Cast<I, T>(bx);
73 fB[1] = utils::simd::Cast<I, T>(by);
74 fB[2] = utils::simd::Cast<I, T>(bz);
82 for (
size_t iD = 0; iD < fB.size(); ++iD) {
83 this->fB[iD] = kf::utils::iif(mask, other.
fB[iD], this->fB[iD]);
89 [[gnu::always_inline]] std::tuple<T, T, T>
Get()
const {
return std::make_tuple(fB[0], fB[1], fB[2]); }
92 [[gnu::always_inline]] T
GetAbsSq()
const {
return fB[0] * fB[0] + fB[1] * fB[1] + fB[2] * fB[2]; }
95 [[gnu::always_inline]] T
GetAbs()
const {
return std::sqrt(this->GetAbsSq()); }
99 [[gnu::always_inline]] T
GetComponent(
int iD)
const {
return fB[iD]; }
102 [[gnu::always_inline]] T
GetBx()
const {
return fB[0]; }
105 [[gnu::always_inline]] T
GetBy()
const {
return fB[1]; }
108 [[gnu::always_inline]] T
GetBz()
const {
return fB[2]; }
111 [[gnu::always_inline]]
bool IsZero()
const
113 auto bZero = this->GetAbsSq() <= defs::MinField<T> * defs::MinField<T>;
114 if constexpr (std::is_same_v<T, fvec>) {
115 return bZero.isFull();
123 void CheckConsistency()
const;
132 [[gnu::always_inline]]
void SetSimdEntry(
double bx,
double by,
double bz,
size_t i)
134 utils::simd::SetEntry(fB[0], bx, i);
135 utils::simd::SetEntry(fB[1], by, i);
136 utils::simd::SetEntry(fB[2], bz, i);
140 std::string
ToString(
int indentLevel = 0)
const;
144 friend class boost::serialization::access;
145 template<
class Archive>
153 {utils::simd::Cast<float, T>(0.F), utils::simd::Cast<float, T>(0.F), utils::simd::Cast<float, T>(0.F)}};
std::string ToString(ECbmModuleId modId)
Common constant definitions for the Kalman Filter library.
Collection of generic mathematical methods.
Magnetic flux density vector.
FieldValue()=default
Default constructor.
void serialize(Archive &ar, const unsigned int)
FieldValue & operator=(const FieldValue &other)=default
Copy assignment operator.
FieldValue(const I &bx, const I &by, const I &bz)
Constructor from components.
T GetComponent(int iD) const
Gets component by index.
GeoVector_t< T > fB
Magnetic flux vector [kG].
T GetBz() const
Gets magnetic flux density z-component [kG].
FieldValue(const FieldValue< I > &other)
Copy constructor.
T GetAbsSq() const
Gets squared absolute magnetic flux [kG2].
void SetSimdEntries(const FieldValue &other, const kf::utils::masktype< T > &mask)
Combines the current magnetic field value with another one using a mask.
T GetBx() const
Gets magnetic flux x-component [kG].
std::tuple< T, T, T > Get() const
Gets magnetic flux density x, y, z-components [kG].
T GetBy() const
Gets magnetic flux density y-component [kG].
bool IsZero() const
Checks, if the field value is zero (negligible)
~FieldValue()=default
Destructor.
void Set(const I &bx, const I &by, const I &bz)
Constructor from components.
void SetSimdEntry(double bx, double by, double bz, size_t i)
Sets magnetic flux density components to the field function.
T GetAbs() const
Gets absolute magnetic flux [kG].
typename std::conditional< std::is_same< T, fvec >::value, fmask, bool >::type masktype
std::array< T, 3 > GeoVector_t
Geometry (spatial) vector.