Cartesius Library
basis_set_creator Module Reference

Functions/Subroutines

subroutine createbasisofatomicorbitals (system, basis, typeOfBasis, parameters)
 
subroutine createbasisofatomicorbitals_new (system, basis, typeOfBasis, parameters)
 Procedure creates basis set of atomic valence orbitals for the particle. User needs to specify type of basis ('STO', 'H-2', 'H-3', 'Bunge' or 'Koga') by using global variable "typeOfBasis" (see 'orbitals.f90'). 'Parameters' is an optional array used in the case of user specified values of orbital exponents. More...
 
subroutine createbasisofatomicorbitals_full (system, basis, typeOfBasis, parameters)
 Procedure creates basis set of atomic orbitals for the particle. User needs to specify type of basis ('STO', 'H-2', 'H-3', 'Bunge' or 'Koga') by using global variable "typeOfBasis" (see 'orbitals.f90'). 'Parameters' is an optional array used in the case of undefault (specified by user) values of orbital exponents. More...
 
subroutine initallatomicorbitals_node (atomicNode)
 Wrapper to interface the initialization of all atomic orbitals with DoSomethingToTree More...
 
subroutine initvalenceatomicorbitals_node (atomicNode)
 Wrapper to interface the initialization of valence atomic orbitals with DoSomethingToTree More...
 
subroutine initallatomicorbitals (atom)
 Initializes the full set of atomic orbitals without defining their orbital expansions. More...
 
subroutine initvalenceatomicorbitals (atom)
 Initializes the set of valence atomic orbitals without defining their orbital expansions. More...
 
subroutine read_atomic_basis_set (atomicNumber, s, p, d, f)
 
subroutine printradialparts (input_basis, r_max, io, file_name)
 Routine to print radial parts of atomic orbitals for visualization: More...
 
subroutine printradialpartforhybridorbital (s, p, x, r_max, io, file_name)
 Routine to print hybrid atomic orbitals for visualization: More...
 
subroutine getquantumnumbersofatomicvalenceorbitals (atomicNumber, sizeOfBasis, principal, angular, azimuthal)
 Returns arrays of quantum numbers (principal, angular, azimuthal) of valence electrons based on the atomic number. More...
 
subroutine getquantumnumbersofatomicorbitals (atomicNumber, sizeOfBasis, principal, angular, azimuthal)
 Builds the atomic orbital quantum numbers. The order is based on the aufbau principle. More...
 
subroutine set_of_primitives_for_h3_orbital (exponents, n, l, set_of_primitives)
 
subroutine reset_h3_basis_set (basis, new_exponents)
 
subroutine resetoccupationnumbers (basis, ns, ls, occupations)
 
subroutine find_nodes_of_ao (ao, nodes)
 Subroutine to find nodes of radial part of atomic orbital numerically. More...
 
real function value_of_ao_radial_part (ao, R)
 Function to calculate value of rR_nl(r) for atomic orbital at point R (in a.u.). More...
 

Variables

real, dimension(:), allocatable, public s_exponents_h3
 
real, dimension(:), allocatable, public p_exponents_h3
 
real, dimension(:), allocatable, public d_exponents_h3
 
real, dimension(:), allocatable, public f_exponents_h3
 

Function/Subroutine Documentation

◆ createbasisofatomicorbitals()

subroutine basis_set_creator::createbasisofatomicorbitals ( type(node), intent(inout)  system,
type(orbital_ptr), dimension(:), intent(out), allocatable, target  basis,
character(len=*), intent(in)  typeOfBasis,
real, dimension(:), optional  parameters 
)
Note
DR 27.04.2021 Deprecated and should be removed?
Remarks
ALT 11.03.2020 I am not sure why it is done this way below. I meant that the spherical parts of all atomic orbitals are generated once somewhere at the intialization like mathematical objects and throughout the generation of the basis the pointers are set to them rather than the integer values assigned to the orbitals.
Note
H-3 an old name for MAP basis
Todo:
rename H-3 to MAP throughout program
Here is the call graph for this function:

◆ createbasisofatomicorbitals_full()

subroutine basis_set_creator::createbasisofatomicorbitals_full ( type(node), intent(inout)  system,
type(orbital_ptr), dimension(:), intent(out), allocatable, target  basis,
character(len=*), intent(in)  typeOfBasis,
real, dimension(:), optional  parameters 
)

Procedure creates basis set of atomic orbitals for the particle. User needs to specify type of basis ('STO', 'H-2', 'H-3', 'Bunge' or 'Koga') by using global variable "typeOfBasis" (see 'orbitals.f90'). 'Parameters' is an optional array used in the case of undefault (specified by user) values of orbital exponents.

Author
?
Todo:
Rewrite in terms of tree structure with initAllAtomicOrbitals and setRadialPartsForAtomicOrbitals
Remarks
Better to create an atomicNumber array so as not to call this function mutiple times. D.Raenko.
Todo:
ALT 11.03.2020: Author! please reply to DR remark
Warning
ALT 11.03.2020 Author! please check how the division of integers does work in fortran. Does the code below really does what you want?
Note
DR 27.03.2020 Yes, I checked, everything works the way it should, assuming all m-values for orbitals are assigned correctly.
Here is the call graph for this function:

◆ createbasisofatomicorbitals_new()

subroutine basis_set_creator::createbasisofatomicorbitals_new ( type(node), intent(inout)  system,
type(orbital_ptr), dimension(:), intent(out), allocatable, target  basis,
character(len=*), intent(in)  typeOfBasis,
real, dimension(:), optional  parameters 
)

Procedure creates basis set of atomic valence orbitals for the particle. User needs to specify type of basis ('STO', 'H-2', 'H-3', 'Bunge' or 'Koga') by using global variable "typeOfBasis" (see 'orbitals.f90'). 'Parameters' is an optional array used in the case of user specified values of orbital exponents.

Author
Todo:
Rewrite in terms of tree structure with initValenceAtomicOrbitals and setRadialPartsForAtomicOrbitals
Here is the call graph for this function:

◆ find_nodes_of_ao()

subroutine basis_set_creator::find_nodes_of_ao ( type(orbital), intent(inout)  ao,
real, dimension(:), intent(out), allocatable  nodes 
)

Subroutine to find nodes of radial part of atomic orbital numerically.

Remarks
ALT 11.03.2020 I think it belongs to atoms not to the general library
Here is the call graph for this function:

◆ getquantumnumbersofatomicorbitals()

subroutine basis_set_creator::getquantumnumbersofatomicorbitals ( integer, intent(inout)  atomicNumber,
integer, intent(out)  sizeOfBasis,
integer, dimension(:), intent(out), allocatable  principal,
integer, dimension(:), intent(out), allocatable  angular,
integer, dimension(:), intent(out), allocatable  azimuthal 
)

Builds the atomic orbital quantum numbers. The order is based on the aufbau principle.

Remarks
ALT 11.03.2020 I would do it differently. Why do we assign the quantum numbers? They describe some abstract mathematical objects and each specific orbital contains a pointer to this abstract object. Then there is no risk to make any error by assigning a wrong value. Let us discuss, if necessary.
DR 27.03.2020 In answer: we do not necessarily need the numbers, but the basis creation procedure uses them afterwards. We either need to rewrite basis creation or keep this one as is.
Todo:
DR 27.03.2020 On another note, the orbitals for, say Zn will not have (even empty) p-orbitals available for calcualtions of excited states. We need to make sure this is dealt with.

◆ getquantumnumbersofatomicvalenceorbitals()

subroutine basis_set_creator::getquantumnumbersofatomicvalenceorbitals ( integer, intent(in)  atomicNumber,
integer, intent(out)  sizeOfBasis,
integer, dimension(:), intent(out), allocatable  principal,
integer, dimension(:), intent(out), allocatable  angular,
integer, dimension(:), intent(out), allocatable  azimuthal 
)

Returns arrays of quantum numbers (principal, angular, azimuthal) of valence electrons based on the atomic number.

Author
???
Todo:
DR So what is the final verdict on which orbitals are which?
Remarks
ALT 11.03.2020: Author! please comment what bool1, etc do mean?
Authors! Have a look at the tables in the ValenceApproximation.f90 module, if needs discussion let us discuss ALT 11.03.2020
Attention
Why is this commented out? Where is Rb and Sr? DR ALT 11.03.2020 - in principle there were attempts to ascribe d-orbitals to Ga..Kr; but I would uncomment it. It requires some keyword manipulation how to treat these or other elements.
Warning
ALT 11.03.2020 Zn and Cd are NOT d-elements Fixed(?) DR
ALT 11.03.2020 and where are p-orbitals for transition elements?

◆ initallatomicorbitals()

subroutine basis_set_creator::initallatomicorbitals ( type(particle), intent(in), pointer  atom)

Initializes the full set of atomic orbitals without defining their orbital expansions.

Here is the call graph for this function:

◆ initallatomicorbitals_node()

subroutine basis_set_creator::initallatomicorbitals_node ( type(node), intent(inout)  atomicNode)

Wrapper to interface the initialization of all atomic orbitals with DoSomethingToTree

See also
DoSomethingToTree
Here is the call graph for this function:

◆ initvalenceatomicorbitals()

subroutine basis_set_creator::initvalenceatomicorbitals ( type(particle), intent(in), pointer  atom)

Initializes the set of valence atomic orbitals without defining their orbital expansions.

Here is the call graph for this function:

◆ initvalenceatomicorbitals_node()

subroutine basis_set_creator::initvalenceatomicorbitals_node ( type(node), intent(inout)  atomicNode)

Wrapper to interface the initialization of valence atomic orbitals with DoSomethingToTree

See also
DoSomethingToTree
Here is the call graph for this function:

◆ printradialpartforhybridorbital()

subroutine basis_set_creator::printradialpartforhybridorbital ( type(orbital_ptr), intent(inout)  s,
type(orbital_ptr), intent(inout)  p,
real, intent(in)  x,
real, intent(in)  r_max,
integer, intent(in)  io,
character(len=*), intent(in)  file_name 
)

Routine to print hybrid atomic orbitals for visualization:

Author
???

◆ printradialparts()

subroutine basis_set_creator::printradialparts ( type(orbital_ptr), dimension(:), intent(inout)  input_basis,
real, intent(in)  r_max,
integer, intent(in)  io,
character(len=*), intent(in)  file_name 
)

Routine to print radial parts of atomic orbitals for visualization:

Author
???

◆ read_atomic_basis_set()

subroutine basis_set_creator::read_atomic_basis_set ( integer, intent(in)  atomicNumber,
type(primitive), dimension(:,:), intent(inout), allocatable  s,
type(primitive), dimension(:,:), intent(inout), allocatable  p,
type(primitive), dimension(:,:), intent(inout), allocatable  d,
type(primitive), dimension(:,:), intent(inout), allocatable  f 
)

◆ reset_h3_basis_set()

subroutine basis_set_creator::reset_h3_basis_set ( type(orbital_ptr), dimension(:), intent(inout)  basis,
real, dimension(:), intent(inout)  new_exponents 
)
Here is the call graph for this function:

◆ resetoccupationnumbers()

subroutine basis_set_creator::resetoccupationnumbers ( type(orbital_ptr), dimension(:), intent(inout)  basis,
integer, dimension(:), intent(in)  ns,
integer, dimension(:), intent(in)  ls,
integer, dimension(:), intent(in)  occupations 
)

◆ set_of_primitives_for_h3_orbital()

subroutine basis_set_creator::set_of_primitives_for_h3_orbital ( real, dimension(:), intent(in)  exponents,
integer, intent(in)  n,
integer, intent(in)  l,
type(primitive), dimension(:), intent(out), allocatable  set_of_primitives 
)
Remarks
If n is bigger than l+1, the coeff matrix is an (n-l)-by-(n-l) square matrix. Since we already assumed, during allocation, that n-l is bigger than zero, we can use n-l instead of the size of coeff and cp_exponents in the following lines.
Attention
We use only the last column of the coeff matrix and recalculate the same matrix for every different n with the same l. If we take the maximum n (nmax, as in calculate_coefficients_h3) we can greatly reduce the amount of time the program takes to calculate the H3 orbitals.
Here is the call graph for this function:

◆ value_of_ao_radial_part()

real function basis_set_creator::value_of_ao_radial_part ( type(orbital), intent(inout)  ao,
real, intent(in)  R 
)

Function to calculate value of rR_nl(r) for atomic orbital at point R (in a.u.).

Remarks
ALT 11.03.2020 I think it belongs to atoms not to the general library
Here is the call graph for this function:

Variable Documentation

◆ d_exponents_h3

real, dimension(:), allocatable, public basis_set_creator::d_exponents_h3

◆ f_exponents_h3

real, dimension(:), allocatable, public basis_set_creator::f_exponents_h3

◆ p_exponents_h3

real, dimension(:), allocatable, public basis_set_creator::p_exponents_h3

◆ s_exponents_h3

real, dimension(:), allocatable, public basis_set_creator::s_exponents_h3