@@ -11,27 +11,80 @@ FieldTimeDependencyStyle(::IdealHomogeneousField) = TimeConstant()
1111
1212value_ (field:: IdealHomogeneousField , r) = field. value
1313
14- # TODO : Define other combinations
15- export IdealXYRotatedHomogeneousField
16- mutable struct IdealXYRotatedHomogeneousField{T} <: AbstractMagneticField where {T <: Number }
14+ export FunctionDefinedHomogeneousField
15+ mutable struct FunctionDefinedHomogeneousField{F} <: AbstractMagneticField where {F <: Function }
16+ function_:: F
17+ end
18+
19+ FieldStyle (:: FunctionDefinedHomogeneousField ) = HomogeneousField ()
20+ FieldDefinitionStyle (:: FunctionDefinedHomogeneousField ) = MethodBasedFieldDefinition ()
21+ FieldTimeDependencyStyle (:: FunctionDefinedHomogeneousField ) = TimeVarying ()
22+
23+ value_ (field:: FunctionDefinedHomogeneousField , t, r) = field. function_ (t)
24+
25+ export OneDimensionalVariableTranslationHomogeneousField
26+ mutable struct OneDimensionalVariableTranslationHomogeneousField <: AbstractMagneticField
27+ direction:: Direction
28+ end
29+
30+ FieldStyle (:: OneDimensionalVariableTranslationHomogeneousField ) = HomogeneousField ()
31+ FieldDefinitionStyle (:: OneDimensionalVariableTranslationHomogeneousField ) = MethodBasedFieldDefinition ()
32+ FieldTimeDependencyStyle (:: OneDimensionalVariableTranslationHomogeneousField ) = TimeVarying ()
33+ FieldMovementStyle (:: OneDimensionalVariableTranslationHomogeneousField ) = TranslationalMovement ()
34+ RotationalDimensionalityStyle (:: OneDimensionalVariableTranslationHomogeneousField ) = RotationalDimensionalityStyle {ZeroDimensional} ()
35+ TranslationalDimensionalityStyle (:: OneDimensionalVariableTranslationHomogeneousField ) = TranslationalDimensionalityStyle {OneDimensional} ()
36+
37+ value_ (field:: OneDimensionalVariableTranslationHomogeneousField , t, r, δ) = value_ (field. direction, field, t, r, δ)
38+ value_ (field:: OneDimensionalVariableTranslationHomogeneousField , t, r, δ:: T ) where {T <: AbstractVector } = [value_ (field, t, r, δ_) for δ_ in δ]
39+ value_ (direction:: XDirection , field:: OneDimensionalVariableTranslationHomogeneousField , t, r, δ) = SVector (δ, zero (eltype (δ)), zero (eltype (δ)))
40+ value_ (direction:: YDirection , field:: OneDimensionalVariableTranslationHomogeneousField , t, r, δ) = SVector (zero (eltype (δ)), δ, zero (eltype (δ)))
41+ value_ (direction:: ZDirection , field:: OneDimensionalVariableTranslationHomogeneousField , t, r, δ) = SVector (zero (eltype (δ)), zero (eltype (δ)), δ)
42+
43+ export IdealRotatedHomogeneousField
44+ mutable struct IdealRotatedHomogeneousField{RT, T} <: AbstractMagneticField where {RT <: RotationPlane , T <: Number }
45+ rotationPlane:: RT
1746 amplitude:: T
1847end
1948
20- FieldStyle (:: IdealXYRotatedHomogeneousField ) = HomogeneousField ()
21- FieldDefinitionStyle (:: IdealXYRotatedHomogeneousField ) = MethodBasedFieldDefinition ()
22- FieldTimeDependencyStyle (:: IdealXYRotatedHomogeneousField ) = TimeConstant ()
23- FieldMovementStyle (:: IdealXYRotatedHomogeneousField ) = RotationalMovement ()
49+ export IdealXYRotatedHomogeneousField
50+ IdealXYRotatedHomogeneousField (amplitude:: T ) where T <: Number = IdealRotatedHomogeneousField (XYRotationPlane (), amplitude)
51+
52+ export IdealXZRotatedHomogeneousField
53+ IdealXZRotatedHomogeneousField (amplitude:: T ) where T <: Number = IdealRotatedHomogeneousField (XZRotationPlane (), amplitude)
54+
55+ export IdealYZRotatedHomogeneousField
56+ IdealYZRotatedHomogeneousField (amplitude:: T ) where T <: Number = IdealRotatedHomogeneousField (YZRotationPlane (), amplitude)
57+
58+ FieldStyle (:: IdealRotatedHomogeneousField ) = HomogeneousField ()
59+ FieldDefinitionStyle (:: IdealRotatedHomogeneousField ) = MethodBasedFieldDefinition ()
60+ FieldTimeDependencyStyle (:: IdealRotatedHomogeneousField ) = TimeConstant ()
61+ FieldMovementStyle (:: IdealRotatedHomogeneousField ) = RotationalMovement ()
2462
25- value_ (field:: IdealXYRotatedHomogeneousField , r, ϕ) = [sin (ϕ), cos (ϕ), 0 ] .* field. amplitude
63+ value_ (field:: IdealRotatedHomogeneousField{XYRotationPlane, T} , r, ϕ) where {T <: Number } = [sin (ϕ), cos (ϕ), 0 ] .* field. amplitude
64+ value_ (field:: IdealRotatedHomogeneousField{XZRotationPlane, T} , r, ϕ) where {T <: Number } = [sin (ϕ), 0 , cos (ϕ)] .* field. amplitude
65+ value_ (field:: IdealRotatedHomogeneousField{YZRotationPlane, T} , r, ϕ) where {T <: Number } = [0 , sin (ϕ), cos (ϕ)] .* field. amplitude
66+
67+ export IdealRotatedTranslatedHomogeneousField
68+ mutable struct IdealRotatedTranslatedHomogeneousField{RT} <: AbstractMagneticField where {RT <: RotationPlane }
69+ rotationPlane:: RT
70+ end
2671
2772export IdealXYRotatedTranslatedHomogeneousField
28- mutable struct IdealXYRotatedTranslatedHomogeneousField <: AbstractMagneticField end
73+ IdealXYRotatedTranslatedHomogeneousField () = IdealRotatedTranslatedHomogeneousField (XYRotationPlane ())
74+
75+ export IdealXZRotatedTranslatedHomogeneousField
76+ IdealXZRotatedTranslatedHomogeneousField () = IdealRotatedTranslatedHomogeneousField (XZRotationPlane ())
77+
78+ export IdealYZRotatedTranslatedHomogeneousField
79+ IdealYZRotatedTranslatedHomogeneousField () = IdealRotatedTranslatedHomogeneousField (YZRotationPlane ())
2980
30- FieldStyle (:: IdealXYRotatedTranslatedHomogeneousField ) = HomogeneousField ()
31- FieldDefinitionStyle (:: IdealXYRotatedTranslatedHomogeneousField ) = MethodBasedFieldDefinition ()
32- FieldTimeDependencyStyle (:: IdealXYRotatedTranslatedHomogeneousField ) = TimeConstant ()
33- FieldMovementStyle (:: IdealXYRotatedTranslatedHomogeneousField ) = RotationalTranslationalMovement ()
34- RotationalDimensionalityStyle (:: IdealXYRotatedTranslatedHomogeneousField ) = RotationalDimensionalityStyle {OneDimensional} ()
35- TranslationalDimensionalityStyle (:: IdealXYRotatedTranslatedHomogeneousField ) = TranslationalDimensionalityStyle {OneDimensional} ()
81+ FieldStyle (:: IdealRotatedTranslatedHomogeneousField ) = HomogeneousField ()
82+ FieldDefinitionStyle (:: IdealRotatedTranslatedHomogeneousField ) = MethodBasedFieldDefinition ()
83+ FieldTimeDependencyStyle (:: IdealRotatedTranslatedHomogeneousField ) = TimeConstant ()
84+ FieldMovementStyle (:: IdealRotatedTranslatedHomogeneousField ) = RotationalTranslationalMovement ()
85+ RotationalDimensionalityStyle (:: IdealRotatedTranslatedHomogeneousField ) = RotationalDimensionalityStyle {OneDimensional} ()
86+ TranslationalDimensionalityStyle (:: IdealRotatedTranslatedHomogeneousField ) = TranslationalDimensionalityStyle {OneDimensional} ()
3687
37- value_ (field:: IdealXYRotatedTranslatedHomogeneousField , r, ϕ, δ) = [sin (ϕ), cos (ϕ), 0 ] .* δ
88+ value_ (field:: IdealRotatedTranslatedHomogeneousField{XYRotationPlane} , r, ϕ, δ) = [sin (ϕ), cos (ϕ), 0 ] .* δ
89+ value_ (field:: IdealRotatedTranslatedHomogeneousField{XZRotationPlane} , r, ϕ, δ) = [sin (ϕ), 0 , cos (ϕ)] .* δ
90+ value_ (field:: IdealRotatedTranslatedHomogeneousField{YZRotationPlane} , r, ϕ, δ) = [0 , sin (ϕ), cos (ϕ)] .* δ
0 commit comments