use nalgebra::Vector3;
use crate::base::Float;
#[allow(non_snake_case)]
pub fn B_to_H<T: Float>(B_vector: Vector3<T>) -> Vector3<T> {
B_vector.scale(T::recip_mu0())
}
pub fn mag_to_pol<T: Float>(mag_vector: Vector3<T>) -> Vector3<T> {
mag_vector.scale(T::mu0())
}
crate::crate_utils::need_alloc! {
use alloc::vec::Vec;
#[allow(non_snake_case)]
pub fn B_to_H_batch<T: Float>(B_vectors: &[Vector3<T>]) -> Vec<Vector3<T>> {
B_vectors
.iter()
.map(|vector| vector.scale(T::recip_mu0()))
.collect()
}
pub fn mag_to_pol_batch<T: Float>(
mag_vectors: &[Vector3<T>],
) -> Vec<Vector3<T>> {
mag_vectors
.iter()
.map(|vector| vector.scale(T::mu0()))
.collect()
}
}
#[cfg(test)]
mod tests {
use super::*;
use approx::assert_relative_eq;
use nalgebra::vector;
#[test]
fn test_b_to_h() {
let b = vector![0.0, 0.0, 1.2566370614359173e-6];
let h = B_to_H(b);
assert_relative_eq!(h, vector![0.0, 0.0, 1.0]);
}
#[test]
fn test_mag_to_pol() {
let m = vector![0.0, 0.0, 1.0];
let j = mag_to_pol(m);
assert_relative_eq!(j, vector![0.0, 0.0, 1.2566370614359173e-6]);
}
#[test]
fn test_b_to_h_batch() {
let b = vec![
vector![0.0, 0.0, 1.2566370614359173e-6],
vector![1.2566370614359173e-6, 0.0, 0.0],
];
let h = B_to_H_batch(&b);
assert_relative_eq!(h[0], vector![0.0, 0.0, 1.0]);
assert_relative_eq!(h[1], vector![1.0, 0.0, 0.0]);
}
#[test]
fn test_mag_to_pol_batch() {
let m = vec![vector![0.0, 0.0, 1.0], vector![1.0, 0.0, 0.0]];
let j = mag_to_pol_batch(&m);
assert_relative_eq!(j[0], vector![0.0, 0.0, 1.2566370614359173e-6]);
assert_relative_eq!(j[1], vector![1.2566370614359173e-6, 0.0, 0.0]);
}
}