Atom Structure
New atom structure SimpleAtom is a bits type structure that aims to be a simple small structure.
The main advantage of SimpleAtom over the default atom type of AtomsBase is that it is bitstype. The second advantage is that it does not have Dict to hold custom data, thus making it a lot more smaller data structure.
Create SimpleAtoms
You can create SimpleAtom in one of the following ways
julia> SimpleAtom(:H, [0.0, 0.0, 0.0]u"Å")SimpleAtom(H, Z = 1, m = 1.008 u): position : [0,0,0]u"Å" species : Hjulia> SimpleAtom( 1, [0.0, 0.0, 0.0]u"Å") # same as aboveSimpleAtom(H, Z = 1, m = 1.008 u): position : [0,0,0]u"Å" species : Hjulia> SimpleAtom(:O, [1.0, 0.0, 0.0]u"Å", [0.1, 0.0, 0.0]u"Å/s"; mass = 16.0u"u", charge = -1.0u"q")SimpleAtom(O, Z = 8, m = 16.0 u): position : [1,0,0]u"Å" velocity : [0.1,0,0]u"Å s^-1" species : O charge : -1.602176634e-19 Cjulia> SimpleAtom(ChemicalSpecies(:H), [0.0, 0.0, 0.0]u"Å")SimpleAtom(H, Z = 1, m = 1.008 u): position : [0,0,0]u"Å" species : Hjulia> SimpleAtom( :O => [1.0, 0.0, 0.0]u"Å" )SimpleAtom(O, Z = 8, m = 15.999 u): position : [1,0,0]u"Å" species : O
You can add extra atomkeys to an existing atom, by creating a new SimpleAtom and adding a keyword argument
sa = SimpleAtom(:H, [0.0, 0.0, 0.0]u"Å")
SimpleAtom(sa; charge = 1.0u"q" ) # add chargeVector of SimpleAtoms
Vector os SimpleAtoms has basic AtomsBase interface implemented
julia> va = [ SimpleAtom(i, i * ones(3)u"Å") for i in 1:5 ]5-element Vector{SimpleAtom{3, @NamedTuple{species::ChemicalSpecies, position::StaticArraysCore.SVector{3, Quantity{Float64, 𝐋, Unitful.FreeUnits{(Å,), 𝐋, nothing}}}}, Quantity{Float64, 𝐋, Unitful.FreeUnits{(Å,), 𝐋, nothing}}}}: SimpleAtom(H, [ 1, 1, 1]u"Å") SimpleAtom(He, [ 2, 2, 2]u"Å") SimpleAtom(Li, [ 3, 3, 3]u"Å") SimpleAtom(Be, [ 4, 4, 4]u"Å") SimpleAtom(B, [ 5, 5, 5]u"Å")julia> species(va, 3)Lijulia> position(va, 4)3-element StaticArraysCore.SVector{3, Quantity{Float64, 𝐋, Unitful.FreeUnits{(Å,), 𝐋, nothing}}} with indices SOneTo(3): 4.0 Å 4.0 Å 4.0 Åjulia> mass(va, :)5-element Vector{Quantity{Float64, 𝐌, Unitful.FreeUnits{(u,), 𝐌, nothing}}}: 1.008 u 4.002602 u 6.94 u 9.0121831 u 10.81 ujulia> hasatomkey(va, :velocity)falsejulia> cell(va)IsolatedCell{3, Quantity{Float64, 𝐋, Unitful.FreeUnits{(Å,), 𝐋, nothing}}}()