pub struct SffWire { /* private fields */ }Expand description
An “abstract” wire defined by its material and its slot fill factor(s).
This is a very simple wire type which is fully specified by the following three properties:
slot_fill_factor_conductor: Portion of the winding zone / slot filled with conducting material. Must be between 0 and 1 (0% to 100%).slot_fill_factor_overall: Portion of the winding zone / slot filled with wire material (conductor + insulation). Must be between 0 and 1 (0% to 100%) and must be larger than or equal toslot_fill_factor_conductor.conductor_material: The material of the conductor.
This wire type can be useful when modeling a winding where only its slot fill factor is known and the exact geometry (single conductor? multiple WireGroupd stranded conductor?) is undefined. This also means that the area of the wire depends on the space available to it:
use std::sync::Arc;
use std::f64::consts::PI;
use approx::assert_abs_diff_eq;
use stem_wire::prelude::*;
let wire_round = SffWire::new(
Arc::new(Material::default()),
0.5, // slot_fill_factor_conductor
0.6, // slot_fill_factor_overall
).expect("valid inputs");
// 10 wires in an area of 20 mm² -> Each wire has a space of 2 mm² available for
// it. Since the conductor slot fill factor is 0.5, the effective conductor area
// is 1. Similarily, the total wire area is 1.2
assert_abs_diff_eq!(
wire_round.effective_conductor_area(Area::new::<square_millimeter>(20.0), 10).get::<square_millimeter>(),
1.0,
epsilon = 1e-3
);
assert_abs_diff_eq!(
wire_round.effective_overall_area(Area::new::<square_millimeter>(20.0), 10).get::<square_millimeter>(),
1.2,
epsilon = 1e-3
);
// Now the area is increased -> Area per wire increases proportionally:
assert_abs_diff_eq!(
wire_round.effective_conductor_area(Area::new::<square_millimeter>(40.0), 10).get::<square_millimeter>(),
2.0,
epsilon = 1e-3
);
assert_abs_diff_eq!(
wire_round.effective_overall_area(Area::new::<square_millimeter>(40.0), 10).get::<square_millimeter>(),
2.4,
epsilon = 1e-3
);
// More wires in the same area means less area per wire:
assert_abs_diff_eq!(
wire_round.effective_conductor_area(Area::new::<square_millimeter>(20.0), 20).get::<square_millimeter>(),
0.5,
epsilon = 1e-3
);
assert_abs_diff_eq!(
wire_round.effective_overall_area(Area::new::<square_millimeter>(20.0), 20).get::<square_millimeter>(),
0.6,
epsilon = 1e-3
);Implementations§
Source§impl SffWire
impl SffWire
Sourcepub fn new(
conductor_material: Arc<Material>,
slot_fill_factor_conductor: f64,
slot_fill_factor_overall: f64,
) -> Result<Self, Error>
pub fn new( conductor_material: Arc<Material>, slot_fill_factor_conductor: f64, slot_fill_factor_overall: f64, ) -> Result<Self, Error>
Returns a new instance of SffWire if the given field values fulfill
the following conditions:
outer_diametermust be positive.inner_diametermust be positive or zero.insulation_thicknessmust be positive or zero.
See the struct docstring SffWire for more.
§Examples
use std::sync::Arc;
use stem_wire::prelude::*;
assert!(SffWire::new(Arc::new(Material::default()), 0.5, 0.6).is_ok());
// Conductor slot fill factor negative
assert!(SffWire::new(Arc::new(Material::default()), -0.2, 0.6).is_err());
// Conductor slot fill factor larger than 1
assert!(SffWire::new(Arc::new(Material::default()), 1.1, 0.6).is_err());
// Overall slot fill factor larger than 1
assert!(SffWire::new(Arc::new(Material::default()), 0.5, 1.1).is_err());
// Overall slot fill factor smaller than conductor slot fill factor
assert!(SffWire::new(Arc::new(Material::default()), 0.5, 0.4).is_err());Trait Implementations§
Source§impl<'de> Deserialize<'de> for SffWire
Available on crate feature serde only.
impl<'de> Deserialize<'de> for SffWire
Available on crate feature
serde only.Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Wire for SffWire
impl Wire for SffWire
Source§fn slot_fill_factor_conductor(&self, _zone_area: Area, _turns: usize) -> f64
fn slot_fill_factor_conductor(&self, _zone_area: Area, _turns: usize) -> f64
Returns the electrical slot filling factor. Read more
Source§fn slot_fill_factor_overall(&self, _zone_area: Area, _turns: usize) -> f64
fn slot_fill_factor_overall(&self, _zone_area: Area, _turns: usize) -> f64
Returns the mechanical slot filling factor. Read more
Source§fn material(&self) -> &Material
fn material(&self) -> &Material
Returns a shared reference to the conductor material of the wire.
Source§fn material_arc(&self) -> Arc<Material>
fn material_arc(&self) -> Arc<Material>
Source§fn effective_conductor_area(&self, zone_area: Area, turns: usize) -> Area
fn effective_conductor_area(&self, zone_area: Area, turns: usize) -> Area
Returns the current-carrying cross section of the wire. Read more
Source§fn effective_overall_area(&self, zone_area: Area, turns: usize) -> Area
fn effective_overall_area(&self, zone_area: Area, turns: usize) -> Area
Returns the overall area covered by the wire. Read more
Source§fn resistance(
&self,
length: Length,
zone_area: Area,
turns: usize,
conditions: &[DynQuantity<f64>],
) -> ElectricalResistance
fn resistance( &self, length: Length, zone_area: Area, turns: usize, conditions: &[DynQuantity<f64>], ) -> ElectricalResistance
Returns the resistance of a wire with the given
length under influence of
the specified conditions. Read moreAuto Trait Implementations§
impl Freeze for SffWire
impl !RefUnwindSafe for SffWire
impl Send for SffWire
impl Sync for SffWire
impl Unpin for SffWire
impl UnsafeUnpin for SffWire
impl !UnwindSafe for SffWire
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more