# Atom types

`AtomicStructure.Atom`

— Type`Atom(radial_orbitals, orbitals, configurations, mix_coeffs, potential)`

An atom constitutes a set of single-electron `orbitals`

with associated `radial_orbitals`

, `configurations`

which are `ManyElectronWavefunction`

:s, comprising of anti-symmetrized combinations of such orbitals. The expansion coefficients `mix_coeffs`

determine the linear combination of the `configurations`

for multi-configurational atoms.

The `potential`

can be used to model either the nucleus by itself (a point charge or a nucleus of finite extent) or the core orbitals (i.e. a pseudo-potential).

`AtomicStructure.Atom`

— Method`Atom(undef, ::Type{T}, R::AbstractQuasiMatrix, configurations, potential, ::Type{C}[, mix_coeffs])`

Create an `Atom`

on the space spanned by `R`

, from the list of electronic `configurations`

, with a nucleus modelled by `potential`

, and leave the orbitals uninitialized. `T`

determines the `eltype`

of the radial orbitals and `C`

the mixing coefficients, which by default, are initialized to `[1,0,0,...]`

.

`AtomicStructure.Atom`

— Method`Atom(init, ::Type{T}, R::AbstractQuasiMatrix, configurations, potential, ::Type{C})`

Create an `Atom`

on the space spanned by `R`

, from the list of electronic `configurations`

, with a nucleus modelled by `potential`

, and initialize the orbitals according to `init`

. `T`

determines the `eltype`

of the radial orbitals and `C`

the mixing coefficients.

`AtomicStructure.Atom`

— Method`Atom(init, R::AbstractQuasiMatrix, configurations, potential, ::Type{C})`

Create an `Atom`

on the space spanned by `R`

, from the list of electronic `configurations`

, with a nucleus modelled by `potential`

, and initialize the orbitals according to `init`

. `C`

determines the `eltype`

of the mixing coefficients.

`AtomicStructure.Atom`

— Method`Atom(R::AbstractQuasiMatrix, configurations, potential[, ::Type{C}=eltype(R)])`

Create an `Atom`

on the space spanned by `R`

, from the list of electronic `configurations`

, with a nucleus modelled by `potential`

, and initialize the orbitals to their hydrogenic values.

`AtomicStructure.Atom`

— Method`Atom(other_atom::Atom, configurations)`

Create a new atom using the same basis and nuclear potential as `other_atom`

, but with a different set of `configurations`

. The orbitals of `other_atom`

are copied over as starting guess.

`AtomicStructure.DiracAtom`

— Type`DiracAtom`

A `DiracAtom`

is a specialization of `Atom`

for the relativistic case.

`Base.getindex`

— Function`getindex(atom, j)`

Returns a copy of the `j`

:th radial orbital.

`getindex(atom, orb)`

Returns a copy of the radial orbital corresponding to `orb`

.

`getindex(atom, js)`

Returns a copy of all radial orbitals with index `∈ js`

.

`getindex(atom, orbs)`

Returns a copy of the radial orbitals corresponding to `orbs`

.

`Base.view`

— Function`view(atom, j)`

Returns a `view`

of the `j`

:th radial orbital.

`view(atom, orb)`

Returns a `view`

of the radial orbital corresponding to `orb`

.

`view(atom, j)`

Returns a `view`

of all radial orbitals with index `∈ js`

.

`AtomicLevels.num_electrons`

— Function`num_electrons(atom)`

Return number of electrons in `atom`

.

## Internals

`AtomicStructure.ManyElectronWavefunction`

— Type`ManyElectronWavefunction`

A many-electron wave function configuration can either be given as a CSF (summed over spins) or a configuration of spin-orbitals (where all quantum numbers are specified).

`AtomicStructure.outsidecoremodel`

— Function`outsidecoremodel(configuration::Configuration, potential::P)`

Return the part of the electronic `configuration`

that is not part of the the configuration modelled by the `potential`

. For a point charge, this is the same as the `configuration`

itself, but for pseudo-potentials, typically only the outer shells remain.

`AtomicStructure.all_bound`

— Function`all_bound(atom)`

Returns `true`

if all orbitals in `atom`

are bound orbitals.

`AtomicStructure.SCF.coefficients`

— Function`SCF.coefficients(atom)`

Returns a `view`

of the mixing coefficients.

`coefficients(quantum_system)`

Retrieves the mixing coefficients of `quantum_system`

. Must return a `view`

that the `scf!`

routine can modify. To be overloaded by the implementation of `AbstractQuantumSystem`

.

`AtomicStructure.SCF.orbitals`

— Function`SCF.orbitals(atom)`

Returns a `view`

of the radial orbital coefficients (NB, it does *not* return the `MulQuasiMatrix`

, but the actual underlying expansion coefficients, since `SCF`

operates on them in the self-consistent iteration).

`orbitals(quantum_system)`

Retrieves the orbitals of `quantum_system`

. Must return a `view`

that the `scf!`

routine can modify. To be overloaded by the implementation of `AbstractQuantumSystem`

.