stem_magnet
===========
[`Magnet`]: https://docs.rs/stem_magnet/0.1.1/stem_magnet/magnet/trait.Magnet.html
[`BlockMagnet`]: https://docs.rs/stem_magnet/0.1.1/stem_magnet/block/struct.BlockMagnet.html
[`BreadLoafMagnet`]: https://docs.rs/stem_magnet/0.1.1/stem_magnet/bread_loaf/struct.BreadLoafMagnet.html
[`ArcParallelMagnet`]: https://docs.rs/stem_magnet/0.1.1/stem_magnet/arc/struct.ArcParallelMagnet.html
[`ArcSegmentMagnet`]: https://docs.rs/stem_magnet/0.1.1/stem_magnet/arc/struct.ArcSegmentMagnet.html
[magnet_types_overview.svg]: https://raw.githubusercontent.com/StefanMathis/stem_magnet/refs/heads/main/docs/img/magnet_types_overview.svg
[](https://docs.rs/stem_magnet)
Permanent magnet definition for stem - a Simulation Toolbox for Electric Motors.
The full API documentation is available at <https://docs.rs/stem_magnet/0.1.1/stem_magnet>.
> **Feedback welcome!**
> Found a bug, missing docs, or have a feature request?
> Please open an issue on [GitHub](https://github.com/StefanMathis/stem_magnet.git).
This crate provides the [`Magnet`] trait for permanent magnets in the stem
(Simulation Toolbox for Electric Motors) framework (see the
[stem book](https://stefanmathis.github.io/stem_book/)). The trait itself has
little logic and mainly specifies an interface for using permanent magnets in
simulation models.
The following predefined implementors of [`Magnet`] are available:
- [`BlockMagnet`]: A cuboid magnet, possibly with fillets.
- [`BreadLoafMagnet`]: A cuboid magnet for surface mounting where the surface
facing the air gap is curved to improve the air gap field.
- [`ArcParallelMagnet`]: A curved magnet for surface mounting in rotary machines
where the sides are parallel to each other.
- [`ArcSegmentMagnet`]: A curved magnet for surface mounting in rotary machines
where the sides are radially oriented.
![Magnet types overview][magnet_types_overview.svg]
If those magnet types do not suffice, it is very easy to define your own magnet
type by implementing [`Magnet`]. See the trait documentation for details.
# Serialization and deserialization
If the `serde` feature is enabled, all magnet types from this crate can be
serialized and deserialized. During deserialization, the invariants are
validated (to e.g. prevent negative length for a [`BlockMagnet`]).
Units and quantities can be deserialized from strings representing SI units via
the [dyn_quantity](https://crates.io/crates/dyn_quantity) crate. Similarily,
it is possible to serialize the quantities of a wire as value-unit strings using
the [serialize_with_units](https://docs.rs/dyn_quantity/latest/dyn_quantity/quantity/serde_impl/fn.serialize_with_units.html) function.
See the chapter [serialization and deserialization](https://stefanmathis.github.io/stem_book/serialization_and_deserialization.html) of the [stem book](https://stefanmathis.github.io/stem_book/)
for details.
# Acknowledgments
The technical drawings used in the docstrings have been created using
LibreCAD (<https://librecad.org/>).