Cartesius Library
orbitals_base Module Reference

Procedures for creating and manipulating atomic and hybrid orbitals. More...

Data Types

interface  addhybridorbital
 
type  angularpart
 Angular parts of orbitals. More...
 
type  angularpart_ptr
 
interface  changehybridcoefficients
 
type  hybridatomicorbital
 
interface  makehybridatomicorbital
 
type  orbital
 All the data fields necessary for orbitals. More...
 
type  orbital_ptr
 
type  orbitalbasis
 
type  orbitalexpansioncoefficient
 Orbital and its expansion coefficient. More...
 
type  slaterradialpart
 Radial parts of orbitals. More...
 
type  spinorbital
 
type  spinorbital_ptr
 
type  spinorbitalbasis
 
interface  trfmd_hybs_same
 
interface  trfmd_hybs_same_ordered
 

Functions/Subroutines

type(angularpart) function, pointer pangularpart (l, m)
 
integer function l_and_m_index_sp (l, m)
 Returns an array index corresponding to the order s, px, py, pz, starting from 0. More...
 
subroutine createatomicorbital (atom, idnum, n, l, m, set_of_primitives, ao)
 Function to make atomic orbital. More...
 
subroutine setatomicorbitalexpansion (set_of_primitives, ao)
 Adds an orbital expansion to a basis in an atomic basis set based on the provided set_of_primitives More...
 
subroutine addcreatedatomicorbital_ptr (atom, orb_ptr)
 Supplementary procedure to add an already created atomic orbital (given as a pointer to an orbital_ptr) to the hybrid list of the atom. More...
 
recursive subroutine createsameorbitalattachedtonewatom (old, new, newAtom)
 Copies all of the data of the given orbital to the new orbital, changing the pAtom pointer. All coefficient pointers in the orbital expansions point to the location of the old expansion coefficients. More...
 
subroutine createsameatomicorbitalsattachedtonewatom (old_orbitals_list, new_atom)
 Copies all orbitals in the list to the new atom, changing the pAtom pointer. All coefficient pointers in the orbital expansions point to the location of the old expansion coefficients. More...
 
recursive real function eval_orbital_radial_part (orbital1, r)
 Find the value of the radial part of an orbital at given r value. More...
 
subroutine getsizeofbasis (part, sizeOfBasis)
 Function which allows to get size of basis of AOs for some polyatomic particles in valence approximation. More...
 
subroutine getatomicvalenceorbitals (atom, shell)
 Returns an array of orbitals of atoms lighter than Na. More...
 
subroutine makeorbitalexpansioncoefficient (someOrbital, coef, oec)
 Generates a variable of type orbitalExpansionCoefficient. More...
 
subroutine makemolecularorbital (id, orbitals, coefficients, mo)
 Creates a molecular orbital with an expansion over input orbitals with their coefficients. More...
 
subroutine makespinorbitalwithspinalpha (num, someOrbital, AlphaSpinOrbital)
 
subroutine makespinorbitalwithspinbeta (num, someOrbital, BetaSpinOrbital)
 
subroutine generatespinorbitalsfrombasis (basis, spinOrbitals)
 Assigns every odd orbital in the basis spin alpha, and every even one - beta. More...
 
subroutine sortorbitalarraybynumbers (orbitals)
 Sorts array of orbitals by ID's in ascending order. More...
 
subroutine sortorbitallistbynumbers (orbitals)
 Sorts linked list of orbitals by ID's in ascending order. More...
 
logical function sortkeyfororbitals (x1, x2)
 Returns TRUE of the ID of x1 is less than the ID of x2. More...
 
logical function sortkeyfororbitalpointers (x1, x2)
 Returns TRUE of the ID of x1 is less than the ID of x2. More...
 
logical function sortkeyforspinorbitals (x1, x2)
 
logical function sortkeyforexpansioncoefficients (x1, x2)
 
subroutine whatisorbitaltype (someOrbital, typeName)
 
logical function isatomicorbital (someOrbital)
 If pAtom and pY pointers are associated, returns true. More...
 
logical function ismolecularorbital (someOrbital)
 If pAtom pointer is not associated, but the orbital expansion is, returns true. More...
 
logical function ishybridatomicorbital (someOrbital)
 Is the pAtom and orbital exoansion pointers are associated, but the pY is not, returns true. More...
 
subroutine whatisspinorbitaltype (someSpinOrbital, typeName)
 
logical function isspinatomicorbital (someSpinOrbital)
 
logical function isspinmolecularorbital (someSpinOrbital)
 
logical function issameorbitals (orbital1, orbital2)
 
logical function issamespinorbitals (spinOrbital1, spinOrbital2)
 
logical function do_aos_belong_to_same_particle (orbital1, orbital2)
 Checks if atomic orbitals belong to the same particles or different. More...
 
subroutine orbitallisttoarrayptr (orbital_list, orbital_array)
 Converts list of orbitals to allocatable array of type orbital_ptr. More...
 
subroutine orbitallisttoarray (orbital_list, orbital_array)
 Converts list of orbitals to type orbitalsBasis. More...
 
subroutine orbitalarrayptrtolist (orbital_array, orbital_list)
 Converts array of type orbital_ptr to list. More...
 
subroutine orbitalarraytolist (orbital_array, orbital_list)
 Converts orbitalBasis to list of orbitals. More...
 
type(orbital) function, pointer orbital_from_polymorphic (x)
 Converts a polymorphic pointer to an orbital pointer if possible, else returns a null-pointer. More...
 
type(orbital_ptr) function, pointer orbital_ptr_from_polymorphic (x)
 Converts a polymorphic pointer to an orbital_ptr pointer if possible, else returns a null-pointer. More...
 
type(orbitalexpansioncoefficient) function, pointer orbital_expansion_coef_from_polymorphic (x)
 Converts a polymorphic pointer to an OrbitalExpansionCoefficient pointer if possible, else returns a null-pointer. More...
 
logical function isorbitalprimitive (orb)
 Checks if orbital is atomic primitive (not a linear combination of STOs or others). More...
 
type(list) function, pointer getorbitals (someParticle)
 Returns the particle's orbitals contained in AttributeList. More...
 
type(list) function, pointer getorbitalswithangularnumber (someParticle, l)
 From the list returned by GetOrbitals, creates a list of orbitals with given angular number l. More...
 
type(orbital) function, pointer getorbitalwithquantumnumbers (someParticle, n, l, m)
 
type(list) function, pointer getsorbitals (someParticle)
 From the list returned by GetOrbitals, creates a list of orbitals with angular number zero. More...
 
type(list) function, pointer getporbitals (someParticle)
 From the list returned by GetOrbitals, creates a list of orbitals with angular number one. More...
 
type(list) function, pointer getdorbitals (someParticle)
 From the list returned by GetOrbitals, creates a list of orbitals with angular number two. More...
 
type(list) function, pointer getforbitals (someParticle)
 From the list returned by GetOrbitals, creates a list of orbitals with angular number three. More...
 
type(orbital_ptr) function, dimension(0:3) getsandporbitals_array_fn (someParticle)
 Returns an array of orbital pointers to s, px, py, pz. If any of the orbitals are not present, the corresponding pointer is null. More...
 
type(list) function, pointer gethybridorbitals (someParticle)
 Returns the hybrid orbitals of the atom in the form a list. More...
 
type(orbitalbasis) function gethybridorbitalsarray (someParticle)
 Returns the hybrid orbitals of the atom in the form of an array (type orbitalBasis). More...
 
type(orbital) function, pointer gethybridorbital_from_coeffs (someParticle, coeffs)
 
subroutine makehybridatomicorbital_from_array_noid (coefs, atom, hybridOrbital)
 Creates a new hybrid orbital with the expansion coefficients (in an array). More...
 
subroutine makehybridatomicorbital_from_array_ptr_noid (coefs, atom, hybridOrbital)
 Creates a new hybrid orbital with the expansion coefficients pointing to the given data locations. More...
 
subroutine makehybridatomicorbital_from_array (id, coefs, atom, hybridOrbital)
 Creates a new hybrid orbital with the given expansion coefficients (in an array). Contains an id field for backwards compatibility. More...
 
subroutine makehybridatomicorbital_from_vals (id, s, px, py, pz, atom, hybridOrbital)
 Creates a new hybrid orbital with the given expansion coefficients. Contains an id field for backwards compatibility. More...
 
subroutine addhybridorbital_from_array (atom, coefs, outputHybrid)
 Creates a new hybrid with given coefficients (in an array) and adds it to the hybrid list of the atom. More...
 
subroutine addhybridorbital_from_vals (atom, s, px, py, pz, outputHybrid)
 Creates a new hybrid with given coefficients and adds it to the hybrid list of the atom. More...
 
subroutine addhybridorbital_from_array_ptr (atom, coefs, outputHybrid)
 Creates a new hyrbid with coefficients pointing to the given data locations and adds it to the hybrid list of the atom. More...
 
subroutine addcreatedhybridorbital_ptr (atom, hybrid_ptr)
 Supplementary procedure to add an already created hybrid (given as a pointer to an orbital_ptr) to the hybrid list of the atom. More...
 
subroutine createsamehybridorbitalsattachedtonewatom (old_hybrids_list, new_atom)
 Creates hybrids on the new atom with coefficients pointing to the old data locations. More...
 
real function, dimension(0:3) gethybridorbitalcoeffs (hybrid)
 Returns an array of coefficients of the given hybrid. More...
 
type(real_ptr) function, dimension(0:3) gethybridorbitalcoeffs_ptr (hybrid)
 Returns an array of pointers to the data locations of the coefficients of the given hybrid. More...
 
type(quaternion) function, pointer gethybridorbitalquaternion (hybrid)
 Returns the coefficients of the hybrid in quaternion form. More...
 
subroutine changehybridcoefficients_from_array (hybrid, new_coefs)
 Changes the coeffiecients of the given hybrid. More...
 
subroutine changehybridcoefficients_from_array_ptr (hybrid, new_coefs)
 Changes the data location of the coeffiecients of the given hybrid. More...
 
subroutine changehybridcoefficients_from_vals (hybrid, s, px, py, pz)
 Changes the coeffiecients of the given hybrid. More...
 
subroutine deallocatehybridcoefficients (hybrid)
 
subroutine normalize_hybrid_order (atom)
 If the determinant of the hybridization matrix is negative, rotates the order of hybrids, which changes the sign. More...
 
subroutine set_image_hybrid_coeffs_explicit_list (trfm, pim_hybs, im_hybs)
 
subroutine set_image_hybrid_coeffs_implicit (pim_atom, im_atom)
 
logical function trfmd_hybs_same_explicit_list (trfm, pim_hyblist, im_hyblist)
 Given the explicit transformation matrix, returns true if the image hybrid list contains every image of the preimage hybrids (in any order) More...
 
logical function trfmd_hybs_same_explicit (trfm, preim_atom, im_atom)
 Given the explicit transformation matrix, returns true if the image atom's hybrid list contains every image of the preimage atom's hybrids (in any order) More...
 
logical function trfmd_hybs_same_implicit (preim_atom, im_atom)
 Same as above, but computes the transformation matrix from the spaceTree. More...
 
subroutine reorder_hyblist_for_transform_list (trfm, pim_hyblist, im_hyblist)
 Reorders the elements of the image list so that applying the given transform to preimage hybrids results gives the image hybrids in the same order. More...
 
logical function trfmd_hybs_same_ordered_explicit_list (trfm, pim_hyblist, im_hyblist)
 Given the explicit transformation matrix, returns true if the image hybrid list contains every image of the preimage hybrids (in the same order). More...
 
logical function trfmd_hybs_same_ordered_explicit (trfm, preim_atom, im_atom)
 Given the explicit transformation matrix, returns true if the image atom's hybrid list contains every image of the preimage atom's hybrids (in the same order). More...
 
logical function trfmd_hybs_same_ordered_implicit (preim_atom, im_atom)
 Same as above, but computes the transformation matrix from the spaceTree. More...
 
subroutine writehybridstoatom (atom, hybridMatrix, carbonHybrids)
 
subroutine rewritehybridscoefficients (atom, hyb)
 Changes all of the hybrid coefficients of this atom based on the given matrix. More...
 
subroutine writehybridizationmatrixtoatom (atom)
 Adds the hybridization matrix (taken from the already present hybrid expansions) to the attribute list of the atom. More...
 
real function, dimension(4, 4) gethybridizationmatrix_from_list (hybrids_list)
 Returns the hybridization matrix defined in the given hybrids list. More...
 
subroutine getatomichybridizationmatrix (atom, hybMatrix)
 Returns the hybridization matrix of the atom. More...
 
subroutine getatomichybridizationmatrix_lab (atom, hybMatrix)
 Returns the hybridization matrix in the laboratory frame. More...
 
recursive subroutine deallocate_orbital (pOrbital)
 Deallocates a non-hybrid orbital or orbital_ptr. An orbital is assumed to be dependent only on primitives (or itself be a primitive), so its orbital expansion is completely deallocated. More...
 
subroutine deallocate_hybrid (pOrbital)
 Deallocates a hybrid orbital. Does not deallocate its non-hybrid orbitals. More...
 
subroutine deallocate_molecular_orbital (pOrbital)
 Deallocates a molecular orbital. Does not deallocate its consituent orbitals. More...
 
subroutine deallocate_spinorbital (pSpinOrbital)
 Deallocates a spinOrbital or a spinOrbital_ptr. More...
 
subroutine deallocate_orbitalexpansioncoefficient (pOEC)
 Deallocates an orbital expansion coefficient. Deallocation of the orbital it points to should be done on its own. More...
 

Variables

character(len=3), public typeofbasis
 
type(angularpart), dimension(0:0), target, save, public sangularparts = [AngularPart(0,0)]
 
type(angularpart), dimension(-1:1), target, save, public pangularparts = [AngularPart(1,-1), AngularPart(1,0), AngularPart(1,1)]
 
type(angularpart), dimension(-2:2), target, save, public dangularparts = [AngularPart(2,-2), AngularPart(2,-1), AngularPart(2,0), AngularPart(2,1), AngularPart(2,2)]
 
type(angularpart), dimension(-3:3), target, save, public fangularparts = [AngularPart(3,-3), AngularPart(3,-2), AngularPart(3,-1), AngularPart(3,0), AngularPart(3,1), AngularPart(3,2), AngularPart(3,3)]
 
type(angularpart_ptr), dimension(:), allocatable, protected allangularparts
 
integer, target, save, public spinalpha = 1
 
integer, target, save, public spinbeta = -1
 

Detailed Description

Procedures for creating and manipulating atomic and hybrid orbitals.

Author
Andrei Tchougreeff and Ilya Popov.

Function/Subroutine Documentation

◆ addcreatedatomicorbital_ptr()

subroutine orbitals_base::addcreatedatomicorbital_ptr ( type(particle), intent(inout)  atom,
type(orbital_ptr), intent(in), pointer  orb_ptr 
)

Supplementary procedure to add an already created atomic orbital (given as a pointer to an orbital_ptr) to the hybrid list of the atom.

Here is the call graph for this function:

◆ addcreatedhybridorbital_ptr()

subroutine orbitals_base::addcreatedhybridorbital_ptr ( type(particle), intent(inout)  atom,
type(orbital_ptr), intent(in), pointer  hybrid_ptr 
)

Supplementary procedure to add an already created hybrid (given as a pointer to an orbital_ptr) to the hybrid list of the atom.

Here is the call graph for this function:

◆ addhybridorbital_from_array()

subroutine orbitals_base::addhybridorbital_from_array ( type (particle), intent(inout), target  atom,
real, dimension(0:3), intent(in)  coefs,
type(orbital_ptr), optional, pointer  outputHybrid 
)

Creates a new hybrid with given coefficients (in an array) and adds it to the hybrid list of the atom.

◆ addhybridorbital_from_array_ptr()

subroutine orbitals_base::addhybridorbital_from_array_ptr ( type (particle), intent(inout), target  atom,
type(real_ptr), dimension(0:3), intent(in)  coefs,
type(orbital_ptr), optional, pointer  outputHybrid 
)

Creates a new hyrbid with coefficients pointing to the given data locations and adds it to the hybrid list of the atom.

◆ addhybridorbital_from_vals()

subroutine orbitals_base::addhybridorbital_from_vals ( type (particle), intent(inout), target  atom,
real, intent(in)  s,
real, intent(in)  px,
real, intent(in)  py,
real, intent(in)  pz,
type(orbital_ptr), optional, pointer  outputHybrid 
)

Creates a new hybrid with given coefficients and adds it to the hybrid list of the atom.

◆ changehybridcoefficients_from_array()

subroutine orbitals_base::changehybridcoefficients_from_array ( type(orbital), intent(inout), pointer  hybrid,
real, dimension(0:3), intent(in)  new_coefs 
)

Changes the coeffiecients of the given hybrid.

◆ changehybridcoefficients_from_array_ptr()

subroutine orbitals_base::changehybridcoefficients_from_array_ptr ( type(orbital), intent(inout), pointer  hybrid,
type(real_ptr), dimension(0:3), intent(in)  new_coefs 
)

Changes the data location of the coeffiecients of the given hybrid.

◆ changehybridcoefficients_from_vals()

subroutine orbitals_base::changehybridcoefficients_from_vals ( type(orbital), intent(inout), pointer  hybrid,
real, intent(in)  s,
real, intent(in)  px,
real, intent(in)  py,
real, intent(in)  pz 
)

Changes the coeffiecients of the given hybrid.

◆ createatomicorbital()

subroutine orbitals_base::createatomicorbital ( type(particle), intent(in), target  atom,
integer, intent(in)  idnum,
integer, intent(in)  n,
integer, intent(in)  l,
integer, intent(in)  m,
type(primitive), dimension(:), intent(in)  set_of_primitives,
type(orbital), intent(out), target  ao 
)

Function to make atomic orbital.

Here is the call graph for this function:

◆ createsameatomicorbitalsattachedtonewatom()

subroutine orbitals_base::createsameatomicorbitalsattachedtonewatom ( type(list), intent(inout)  old_orbitals_list,
type(particle), intent(inout), target  new_atom 
)

Copies all orbitals in the list to the new atom, changing the pAtom pointer. All coefficient pointers in the orbital expansions point to the location of the old expansion coefficients.

Here is the call graph for this function:

◆ createsamehybridorbitalsattachedtonewatom()

subroutine orbitals_base::createsamehybridorbitalsattachedtonewatom ( type(list), intent(inout)  old_hybrids_list,
type(particle), intent(inout), target  new_atom 
)

Creates hybrids on the new atom with coefficients pointing to the old data locations.

Here is the call graph for this function:

◆ createsameorbitalattachedtonewatom()

recursive subroutine orbitals_base::createsameorbitalattachedtonewatom ( type(orbital), intent(inout)  old,
type(orbital), intent(inout)  new,
type(particle), intent(inout), target  newAtom 
)

Copies all of the data of the given orbital to the new orbital, changing the pAtom pointer. All coefficient pointers in the orbital expansions point to the location of the old expansion coefficients.

Here is the call graph for this function:

◆ deallocate_hybrid()

subroutine orbitals_base::deallocate_hybrid ( class(*), intent(inout), pointer  pOrbital)

Deallocates a hybrid orbital. Does not deallocate its non-hybrid orbitals.

◆ deallocate_molecular_orbital()

subroutine orbitals_base::deallocate_molecular_orbital ( class(*), intent(inout), pointer  pOrbital)

Deallocates a molecular orbital. Does not deallocate its consituent orbitals.

◆ deallocate_orbital()

recursive subroutine orbitals_base::deallocate_orbital ( class(*), intent(inout), pointer  pOrbital)

Deallocates a non-hybrid orbital or orbital_ptr. An orbital is assumed to be dependent only on primitives (or itself be a primitive), so its orbital expansion is completely deallocated.

Here is the call graph for this function:

◆ deallocate_orbitalexpansioncoefficient()

subroutine orbitals_base::deallocate_orbitalexpansioncoefficient ( class(*), intent(inout), pointer  pOEC)

Deallocates an orbital expansion coefficient. Deallocation of the orbital it points to should be done on its own.

◆ deallocate_spinorbital()

subroutine orbitals_base::deallocate_spinorbital ( class(*), intent(inout), pointer  pSpinOrbital)

Deallocates a spinOrbital or a spinOrbital_ptr.

Todo:
DR 14.10.1021 Don't know how to correctly deallocate this. Please someone check this.

◆ deallocatehybridcoefficients()

subroutine orbitals_base::deallocatehybridcoefficients ( type(orbital), intent(inout), pointer  hybrid)
Here is the call graph for this function:

◆ do_aos_belong_to_same_particle()

logical function orbitals_base::do_aos_belong_to_same_particle ( type(orbital), intent(inout)  orbital1,
type(orbital), intent(inout)  orbital2 
)

Checks if atomic orbitals belong to the same particles or different.

◆ eval_orbital_radial_part()

recursive real function orbitals_base::eval_orbital_radial_part ( type(orbital), intent(in)  orbital1,
real, intent(in)  r 
)

Find the value of the radial part of an orbital at given r value.

Here is the call graph for this function:

◆ generatespinorbitalsfrombasis()

subroutine orbitals_base::generatespinorbitalsfrombasis ( type (orbitalbasis), intent(in)  basis,
type(spinorbital), dimension(:), intent(inout), allocatable  spinOrbitals 
)

Assigns every odd orbital in the basis spin alpha, and every even one - beta.

Here is the call graph for this function:

◆ getatomichybridizationmatrix()

subroutine orbitals_base::getatomichybridizationmatrix ( type(particle), intent(inout)  atom,
real, dimension(4,4), intent(out)  hybMatrix 
)

Returns the hybridization matrix of the atom.

Here is the call graph for this function:

◆ getatomichybridizationmatrix_lab()

subroutine orbitals_base::getatomichybridizationmatrix_lab ( type(particle), intent(inout)  atom,
real, dimension(4,4), intent(out)  hybMatrix 
)

Returns the hybridization matrix in the laboratory frame.

Here is the call graph for this function:

◆ getatomicvalenceorbitals()

subroutine orbitals_base::getatomicvalenceorbitals ( type(particle), intent(inout), target  atom,
type(orbital), dimension(:), intent(out), allocatable  shell 
)

Returns an array of orbitals of atoms lighter than Na.

Warning
In the shell, the radial part is only allocated, but not assigned.
Here is the call graph for this function:

◆ getdorbitals()

type(list) function, pointer orbitals_base::getdorbitals ( type(particle someParticle)

From the list returned by GetOrbitals, creates a list of orbitals with angular number two.

Here is the call graph for this function:

◆ getforbitals()

type(list) function, pointer orbitals_base::getforbitals ( type(particle someParticle)

From the list returned by GetOrbitals, creates a list of orbitals with angular number three.

Here is the call graph for this function:

◆ gethybridizationmatrix_from_list()

real function, dimension(4,4) orbitals_base::gethybridizationmatrix_from_list ( type(list), intent(inout)  hybrids_list)

Returns the hybridization matrix defined in the given hybrids list.

Here is the call graph for this function:

◆ gethybridorbital_from_coeffs()

type(orbital) function, pointer orbitals_base::gethybridorbital_from_coeffs ( type(particle), intent(in)  someParticle,
real, dimension(4), intent(in)  coeffs 
)
Here is the call graph for this function:

◆ gethybridorbitalcoeffs()

real function, dimension(0:3) orbitals_base::gethybridorbitalcoeffs ( type(orbital), intent(in)  hybrid)

Returns an array of coefficients of the given hybrid.

Here is the call graph for this function:

◆ gethybridorbitalcoeffs_ptr()

type(real_ptr) function, dimension(0:3) orbitals_base::gethybridorbitalcoeffs_ptr ( type(orbital), intent(in)  hybrid)

Returns an array of pointers to the data locations of the coefficients of the given hybrid.

Here is the call graph for this function:

◆ gethybridorbitalquaternion()

type(quaternion) function, pointer orbitals_base::gethybridorbitalquaternion ( type(orbital hybrid)

Returns the coefficients of the hybrid in quaternion form.

Here is the call graph for this function:

◆ gethybridorbitals()

type(list) function, pointer orbitals_base::gethybridorbitals ( type(particle someParticle)

Returns the hybrid orbitals of the atom in the form a list.

Here is the call graph for this function:

◆ gethybridorbitalsarray()

type(orbitalbasis) function orbitals_base::gethybridorbitalsarray ( type(particle someParticle)

Returns the hybrid orbitals of the atom in the form of an array (type orbitalBasis).

Here is the call graph for this function:

◆ getorbitals()

type(list) function, pointer orbitals_base::getorbitals ( type(particle someParticle)

Returns the particle's orbitals contained in AttributeList.

Here is the call graph for this function:

◆ getorbitalswithangularnumber()

type(list) function, pointer orbitals_base::getorbitalswithangularnumber ( type(particle), intent(in)  someParticle,
integer, intent(in)  l 
)

From the list returned by GetOrbitals, creates a list of orbitals with given angular number l.

Here is the call graph for this function:

◆ getorbitalwithquantumnumbers()

type(orbital) function, pointer orbitals_base::getorbitalwithquantumnumbers ( type(particle), intent(in)  someParticle,
integer, intent(in)  n,
integer, intent(in)  l,
integer, intent(in)  m 
)
Here is the call graph for this function:

◆ getporbitals()

type(list) function, pointer orbitals_base::getporbitals ( type(particle someParticle)

From the list returned by GetOrbitals, creates a list of orbitals with angular number one.

Here is the call graph for this function:

◆ getsandporbitals_array_fn()

type(orbital_ptr) function, dimension(0:3) orbitals_base::getsandporbitals_array_fn ( type(particle), intent(in)  someParticle)

Returns an array of orbital pointers to s, px, py, pz. If any of the orbitals are not present, the corresponding pointer is null.

Here is the call graph for this function:

◆ getsizeofbasis()

subroutine orbitals_base::getsizeofbasis ( type(node), intent(inout)  part,
integer, intent(out)  sizeOfBasis 
)

Function which allows to get size of basis of AOs for some polyatomic particles in valence approximation.

◆ getsorbitals()

type(list) function, pointer orbitals_base::getsorbitals ( type(particle someParticle)

From the list returned by GetOrbitals, creates a list of orbitals with angular number zero.

Here is the call graph for this function:

◆ isatomicorbital()

logical function orbitals_base::isatomicorbital ( type(orbital someOrbital)

If pAtom and pY pointers are associated, returns true.

Here is the call graph for this function:

◆ ishybridatomicorbital()

logical function orbitals_base::ishybridatomicorbital ( type(orbital someOrbital)

Is the pAtom and orbital exoansion pointers are associated, but the pY is not, returns true.

Here is the call graph for this function:

◆ ismolecularorbital()

logical function orbitals_base::ismolecularorbital ( type(orbital someOrbital)

If pAtom pointer is not associated, but the orbital expansion is, returns true.

Here is the call graph for this function:

◆ isorbitalprimitive()

logical function orbitals_base::isorbitalprimitive ( type(orbital), intent(in)  orb)

Checks if orbital is atomic primitive (not a linear combination of STOs or others).

Here is the call graph for this function:

◆ issameorbitals()

logical function orbitals_base::issameorbitals ( type(orbital orbital1,
type(orbital orbital2 
)
Here is the call graph for this function:

◆ issamespinorbitals()

logical function orbitals_base::issamespinorbitals ( type(spinorbital spinOrbital1,
type(spinorbital spinOrbital2 
)
Here is the call graph for this function:

◆ isspinatomicorbital()

logical function orbitals_base::isspinatomicorbital ( type(spinorbital someSpinOrbital)
Here is the call graph for this function:

◆ isspinmolecularorbital()

logical function orbitals_base::isspinmolecularorbital ( type(spinorbital someSpinOrbital)
Here is the call graph for this function:

◆ l_and_m_index_sp()

integer function orbitals_base::l_and_m_index_sp ( integer, intent(in)  l,
integer, intent(in)  m 
)

Returns an array index corresponding to the order s, px, py, pz, starting from 0.

Here is the call graph for this function:

◆ makehybridatomicorbital_from_array()

subroutine orbitals_base::makehybridatomicorbital_from_array ( integer, intent(in)  id,
real, dimension(0:3), intent(in)  coefs,
type(particle), intent(in), target  atom,
type(orbital), intent(out)  hybridOrbital 
)

Creates a new hybrid orbital with the given expansion coefficients (in an array). Contains an id field for backwards compatibility.

◆ makehybridatomicorbital_from_array_noid()

subroutine orbitals_base::makehybridatomicorbital_from_array_noid ( real, dimension(0:3), intent(in)  coefs,
type(particle), intent(in), target  atom,
type(orbital), intent(out)  hybridOrbital 
)

Creates a new hybrid orbital with the expansion coefficients (in an array).

◆ makehybridatomicorbital_from_array_ptr_noid()

subroutine orbitals_base::makehybridatomicorbital_from_array_ptr_noid ( type(real_ptr), dimension(0:3), intent(in)  coefs,
type(particle), intent(in), target  atom,
type(orbital), intent(out)  hybridOrbital 
)

Creates a new hybrid orbital with the expansion coefficients pointing to the given data locations.

◆ makehybridatomicorbital_from_vals()

subroutine orbitals_base::makehybridatomicorbital_from_vals ( integer, intent(in)  id,
real, intent(in)  s,
real, intent(in)  px,
real, intent(in)  py,
real, intent(in)  pz,
type(particle), intent(in), target  atom,
type(orbital), intent(out)  hybridOrbital 
)

Creates a new hybrid orbital with the given expansion coefficients. Contains an id field for backwards compatibility.

Todo:
Finish commenting for hybrid atomic orbitals.

◆ makemolecularorbital()

subroutine orbitals_base::makemolecularorbital ( integer, intent(in)  id,
type (orbital_ptr), dimension(:), intent(in), target  orbitals,
real, dimension(:), intent(in)  coefficients,
type(orbital), intent(out)  mo 
)

Creates a molecular orbital with an expansion over input orbitals with their coefficients.

Here is the call graph for this function:

◆ makeorbitalexpansioncoefficient()

subroutine orbitals_base::makeorbitalexpansioncoefficient ( class(*), intent(in), pointer  someOrbital,
real, intent(in), optional  coef,
type(orbitalexpansioncoefficient), intent(out)  oec 
)

Generates a variable of type orbitalExpansionCoefficient.

Here is the call graph for this function:

◆ makespinorbitalwithspinalpha()

subroutine orbitals_base::makespinorbitalwithspinalpha ( integer, intent(in), optional, target  num,
type(orbital), intent(in), target  someOrbital,
type(spinorbital), intent(out)  AlphaSpinOrbital 
)

◆ makespinorbitalwithspinbeta()

subroutine orbitals_base::makespinorbitalwithspinbeta ( integer, intent(in), optional, target  num,
type(orbital), intent(in), target  someOrbital,
type(spinorbital), intent(out)  BetaSpinOrbital 
)

◆ normalize_hybrid_order()

subroutine orbitals_base::normalize_hybrid_order ( type(particle), intent(inout)  atom)

If the determinant of the hybridization matrix is negative, rotates the order of hybrids, which changes the sign.

Here is the call graph for this function:

◆ orbital_expansion_coef_from_polymorphic()

type(orbitalexpansioncoefficient) function, pointer orbitals_base::orbital_expansion_coef_from_polymorphic ( class(*), intent(in), pointer  x)

Converts a polymorphic pointer to an OrbitalExpansionCoefficient pointer if possible, else returns a null-pointer.

◆ orbital_from_polymorphic()

type(orbital) function, pointer orbitals_base::orbital_from_polymorphic ( class(*), intent(in), pointer  x)

Converts a polymorphic pointer to an orbital pointer if possible, else returns a null-pointer.

◆ orbital_ptr_from_polymorphic()

type(orbital_ptr) function, pointer orbitals_base::orbital_ptr_from_polymorphic ( class(*), intent(in), pointer  x)

Converts a polymorphic pointer to an orbital_ptr pointer if possible, else returns a null-pointer.

◆ orbitalarrayptrtolist()

subroutine orbitals_base::orbitalarrayptrtolist ( type(orbital_ptr), dimension(:), intent(in)  orbital_array,
type(list), intent(out)  orbital_list 
)

Converts array of type orbital_ptr to list.

Here is the call graph for this function:

◆ orbitalarraytolist()

subroutine orbitals_base::orbitalarraytolist ( type(orbitalbasis), intent(in)  orbital_array,
type(list), intent(out)  orbital_list 
)

Converts orbitalBasis to list of orbitals.

Here is the call graph for this function:

◆ orbitallisttoarray()

subroutine orbitals_base::orbitallisttoarray ( type(list), intent(inout)  orbital_list,
type(orbitalbasis), intent(out)  orbital_array 
)

Converts list of orbitals to type orbitalsBasis.

Here is the call graph for this function:

◆ orbitallisttoarrayptr()

subroutine orbitals_base::orbitallisttoarrayptr ( type(list), intent(inout)  orbital_list,
type(orbital_ptr), dimension(:), intent(out), allocatable  orbital_array 
)

Converts list of orbitals to allocatable array of type orbital_ptr.

Here is the call graph for this function:

◆ pangularpart()

type(angularpart) function, pointer orbitals_base::pangularpart ( integer, intent(in)  l,
integer, intent(in)  m 
)

◆ reorder_hyblist_for_transform_list()

subroutine orbitals_base::reorder_hyblist_for_transform_list ( real, dimension(3,3), intent(in)  trfm,
type(list), intent(inout)  pim_hyblist,
type(list), intent(inout)  im_hyblist 
)

Reorders the elements of the image list so that applying the given transform to preimage hybrids results gives the image hybrids in the same order.

Warning
Does not check whether the the hybrids correspond to one another. Check that with trfmd_hybs_same_explicit_list.
Here is the call graph for this function:

◆ rewritehybridscoefficients()

subroutine orbitals_base::rewritehybridscoefficients ( type(particle), intent(inout)  atom,
real, dimension(4,4), intent(in)  hyb 
)

Changes all of the hybrid coefficients of this atom based on the given matrix.

Here is the call graph for this function:

◆ set_image_hybrid_coeffs_explicit_list()

subroutine orbitals_base::set_image_hybrid_coeffs_explicit_list ( real, dimension(3,3), intent(in)  trfm,
type(list), intent(inout)  pim_hybs,
type(list), intent(inout)  im_hybs 
)
Here is the call graph for this function:

◆ set_image_hybrid_coeffs_implicit()

subroutine orbitals_base::set_image_hybrid_coeffs_implicit ( type(particle), intent(inout)  pim_atom,
type(particle), intent(inout)  im_atom 
)
Here is the call graph for this function:

◆ setatomicorbitalexpansion()

subroutine orbitals_base::setatomicorbitalexpansion ( type(primitive), dimension(:), intent(in)  set_of_primitives,
type(orbital), intent(inout), target  ao 
)

Adds an orbital expansion to a basis in an atomic basis set based on the provided set_of_primitives

Here is the call graph for this function:

◆ sortkeyforexpansioncoefficients()

logical function orbitals_base::sortkeyforexpansioncoefficients ( class(*), pointer  x1,
class(*), pointer  x2 
)
Here is the call graph for this function:

◆ sortkeyfororbitalpointers()

logical function orbitals_base::sortkeyfororbitalpointers ( class(*), pointer  x1,
class(*), pointer  x2 
)

Returns TRUE of the ID of x1 is less than the ID of x2.

Here is the call graph for this function:

◆ sortkeyfororbitals()

logical function orbitals_base::sortkeyfororbitals ( class(*), pointer  x1,
class(*), pointer  x2 
)

Returns TRUE of the ID of x1 is less than the ID of x2.

Here is the call graph for this function:

◆ sortkeyforspinorbitals()

logical function orbitals_base::sortkeyforspinorbitals ( class(*), pointer  x1,
class(*), pointer  x2 
)
Here is the call graph for this function:

◆ sortorbitalarraybynumbers()

subroutine orbitals_base::sortorbitalarraybynumbers ( type (orbital_ptr), dimension(:), intent(inout)  orbitals)

Sorts array of orbitals by ID's in ascending order.

Bug:
This sorting loop will not work.

◆ sortorbitallistbynumbers()

subroutine orbitals_base::sortorbitallistbynumbers ( type(list), intent(inout)  orbitals)

Sorts linked list of orbitals by ID's in ascending order.

Here is the call graph for this function:

◆ trfmd_hybs_same_explicit()

logical function orbitals_base::trfmd_hybs_same_explicit ( real, dimension(3,3), intent(in)  trfm,
type(particle), intent(in)  preim_atom,
type(particle), intent(in)  im_atom 
)

Given the explicit transformation matrix, returns true if the image atom's hybrid list contains every image of the preimage atom's hybrids (in any order)

◆ trfmd_hybs_same_explicit_list()

logical function orbitals_base::trfmd_hybs_same_explicit_list ( real, dimension(3,3), intent(in)  trfm,
type(list), intent(inout)  pim_hyblist,
type(list), intent(inout)  im_hyblist 
)

Given the explicit transformation matrix, returns true if the image hybrid list contains every image of the preimage hybrids (in any order)

◆ trfmd_hybs_same_implicit()

logical function orbitals_base::trfmd_hybs_same_implicit ( type(particle), intent(in)  preim_atom,
type(particle), intent(in)  im_atom 
)

Same as above, but computes the transformation matrix from the spaceTree.

◆ trfmd_hybs_same_ordered_explicit()

logical function orbitals_base::trfmd_hybs_same_ordered_explicit ( real, dimension(3,3), intent(in)  trfm,
type(particle), intent(in)  preim_atom,
type(particle), intent(in)  im_atom 
)

Given the explicit transformation matrix, returns true if the image atom's hybrid list contains every image of the preimage atom's hybrids (in the same order).

◆ trfmd_hybs_same_ordered_explicit_list()

logical function orbitals_base::trfmd_hybs_same_ordered_explicit_list ( real, dimension(3,3), intent(in)  trfm,
type(list), intent(inout)  pim_hyblist,
type(list), intent(inout)  im_hyblist 
)

Given the explicit transformation matrix, returns true if the image hybrid list contains every image of the preimage hybrids (in the same order).

◆ trfmd_hybs_same_ordered_implicit()

logical function orbitals_base::trfmd_hybs_same_ordered_implicit ( type(particle), intent(in)  preim_atom,
type(particle), intent(in)  im_atom 
)

Same as above, but computes the transformation matrix from the spaceTree.

◆ whatisorbitaltype()

subroutine orbitals_base::whatisorbitaltype ( type(orbital), intent(in)  someOrbital,
character(len=*), intent(out)  typeName 
)
Here is the call graph for this function:

◆ whatisspinorbitaltype()

subroutine orbitals_base::whatisspinorbitaltype ( type(spinorbital), intent(in)  someSpinOrbital,
character(len=*), intent(out)  typeName 
)
Here is the call graph for this function:

◆ writehybridizationmatrixtoatom()

subroutine orbitals_base::writehybridizationmatrixtoatom ( type(particle), intent(inout)  atom)

Adds the hybridization matrix (taken from the already present hybrid expansions) to the attribute list of the atom.

Here is the call graph for this function:

◆ writehybridstoatom()

subroutine orbitals_base::writehybridstoatom ( type(particle), intent(inout)  atom,
real, dimension(4,4), intent(inout)  hybridMatrix,
type(orbital_ptr), dimension(4), target  carbonHybrids 
)
Here is the call graph for this function:

Variable Documentation

◆ allangularparts

type(angularpart_ptr), dimension(:), allocatable, protected orbitals_base::allangularparts

◆ dangularparts

type(angularpart), dimension(-2:2), target, save, public orbitals_base::dangularparts = [AngularPart(2,-2), AngularPart(2,-1), AngularPart(2,0), AngularPart(2,1), AngularPart(2,2)]

◆ fangularparts

type(angularpart), dimension(-3:3), target, save, public orbitals_base::fangularparts = [AngularPart(3,-3), AngularPart(3,-2), AngularPart(3,-1), AngularPart(3,0), AngularPart(3,1), AngularPart(3,2), AngularPart(3,3)]

◆ pangularparts

type(angularpart), dimension(-1:1), target, save, public orbitals_base::pangularparts = [AngularPart(1,-1), AngularPart(1,0), AngularPart(1,1)]

◆ sangularparts

type(angularpart), dimension(0:0), target, save, public orbitals_base::sangularparts = [AngularPart(0,0)]
Warning
DR At some point, (SPDF)AngularParts will not be enough. We should discuss what to do when this happens.

◆ spinalpha

integer, target, save, public orbitals_base::spinalpha = 1

◆ spinbeta

integer, target, save, public orbitals_base::spinbeta = -1

◆ typeofbasis

character(len=3), public orbitals_base::typeofbasis
Attention
Would it make sense to give the freedom to choose the basis for every atom?