Conversion

Conversion from Arrays

pconvert is smart enough to handle 2D and 3D vectors at same time:

julia> using PhysicalParticles
julia> pconvert([1.0, 2.0])PVector2D{Float64}(1.0, 2.0)
julia> pconvert([1.0, 2.0, 3.0])PVector{Float64}(1.0, 2.0, 3.0)
julia> pconvert([1.0, 2.0, 3.0, 4.0])ERROR: [1.0, 2.0, 3.0, 4.0] Not supported dimension! Use 2D and 3D vectors
julia> a = pconvert([1.0 3.0; 2.0 4.0])2-element StructArray(::Vector{Float64}, ::Vector{Float64}) with eltype PVector2D: PVector2D{Float64}(1.0, 2.0) PVector2D{Float64}(3.0, 4.0)
julia> pconvert([1.0 4.0; 2.0 5.0; 3.0 6.0])2-element StructArray(::Vector{Float64}, ::Vector{Float64}, ::Vector{Float64}) with eltype PVector: PVector{Float64}(1.0, 2.0, 3.0) PVector{Float64}(4.0, 5.0, 6.0)

Assign from Arrays

assign_particles takes in three paremeters: particles, symbol and points. Assignment of :Pos, :Vel and :Acc is enough for simulation tasks:

julia> ppoints = rand(PVector{Float64}, 3) * u"m"3-element Vector{PVector{Unitful.Quantity{Float64, ๐‹, Unitful.FreeUnits{(m,), ๐‹, nothing}}}}:
 PVector(0.19748015215563697 m, 0.8624213962269038 m, 0.20347609789064325 m)
 PVector(0.09331677404649219 m, 0.3799158504570348 m, 0.8123938024441695 m)
 PVector(0.7896411847567459 m, 0.21166309868894384 m, 0.1552104324443836 m)
julia> p_Ball = [Ball(uSI) for i=1:3]3-element Vector{Ball{Unitful.Quantity{Float64, ๐‹, Unitful.FreeUnits{(m,), ๐‹, nothing}}, Unitful.Quantity{Float64, ๐‹ ๐“^-1, Unitful.FreeUnits{(m, s^-1), ๐‹ ๐“^-1, nothing}}, Unitful.Quantity{Float64, ๐‹ ๐“^-2, Unitful.FreeUnits{(m, s^-2), ๐‹ ๐“^-2, nothing}}, Unitful.Quantity{Float64, ๐Œ, Unitful.FreeUnits{(kg,), ๐Œ, nothing}}, Int64}}: Ball 0: Pos = PVector(0.0 m, 0.0 m, 0.0 m), Vel = PVector(0.0 m s^-1, 0.0 m s^-1, 0.0 m s^-1), Acc = PVector(0.0 m s^-2, 0.0 m s^-2, 0.0 m s^-2), Mass = 0.0 kg Ball 0: Pos = PVector(0.0 m, 0.0 m, 0.0 m), Vel = PVector(0.0 m s^-1, 0.0 m s^-1, 0.0 m s^-1), Acc = PVector(0.0 m s^-2, 0.0 m s^-2, 0.0 m s^-2), Mass = 0.0 kg Ball 0: Pos = PVector(0.0 m, 0.0 m, 0.0 m), Vel = PVector(0.0 m s^-1, 0.0 m s^-1, 0.0 m s^-1), Acc = PVector(0.0 m s^-2, 0.0 m s^-2, 0.0 m s^-2), Mass = 0.0 kg
julia> assign_particles(p_Ball, :Pos, pu)ERROR: UndefVarError: `pu` not defined in `Main` Suggestion: check for spelling errors or missing imports.
julia> p_Ball3-element Vector{Ball{Unitful.Quantity{Float64, ๐‹, Unitful.FreeUnits{(m,), ๐‹, nothing}}, Unitful.Quantity{Float64, ๐‹ ๐“^-1, Unitful.FreeUnits{(m, s^-1), ๐‹ ๐“^-1, nothing}}, Unitful.Quantity{Float64, ๐‹ ๐“^-2, Unitful.FreeUnits{(m, s^-2), ๐‹ ๐“^-2, nothing}}, Unitful.Quantity{Float64, ๐Œ, Unitful.FreeUnits{(kg,), ๐Œ, nothing}}, Int64}}: Ball 0: Pos = PVector(0.0 m, 0.0 m, 0.0 m), Vel = PVector(0.0 m s^-1, 0.0 m s^-1, 0.0 m s^-1), Acc = PVector(0.0 m s^-2, 0.0 m s^-2, 0.0 m s^-2), Mass = 0.0 kg Ball 0: Pos = PVector(0.0 m, 0.0 m, 0.0 m), Vel = PVector(0.0 m s^-1, 0.0 m s^-1, 0.0 m s^-1), Acc = PVector(0.0 m s^-2, 0.0 m s^-2, 0.0 m s^-2), Mass = 0.0 kg Ball 0: Pos = PVector(0.0 m, 0.0 m, 0.0 m), Vel = PVector(0.0 m s^-1, 0.0 m s^-1, 0.0 m s^-1), Acc = PVector(0.0 m s^-2, 0.0 m s^-2, 0.0 m s^-2), Mass = 0.0 kg