32 use precisn,
only: longint, wp
33 use const_gbl,
only: stdout
45 integer :: num_one_electron_integrals
46 integer :: num_two_electron_integrals
47 integer :: symmetry_type
48 integer :: matrix_io_unit
49 integer :: num_symmetry
50 real(wp) :: exotic_mass
51 integer :: hamiltonian_unit
52 integer,
allocatable :: num_orbitals_sym(:)
53 real(wp),
allocatable :: xnuc(:), ynuc(:), znuc(:), charge(:)
54 character(len=8),
allocatable,
dimension(:) :: cname
72 class(
options),
intent(in) :: option
74 write (stdout,
"('Using UKRMOL+ integrals')")
76 this % num_csf = option % num_csfs
77 this % num_symmetry = option % num_syms
79 allocate(this % num_orbitals_sym(this % num_symmetry))
81 this % num_orbitals_sym(:) = option % num_electronic_orbitals_sym(:)
82 this % hamiltonian_unit = option % hamiltonian_unit
83 this % exotic_mass = option % exotic_mass
84 this % matrix_io_unit = option % hamiltonian_unit
85 this % name = option % name
98 use ukrmol_interface_gbl,
only: destroy_ukrmolp
102 if (
allocated(this % num_orbitals_sym))
deallocate (this % num_orbitals_sym)
103 if (
allocated(this % xnuc))
deallocate (this % xnuc)
104 if (
allocated(this % ynuc))
deallocate (this % ynuc)
105 if (
allocated(this % znuc))
deallocate (this % znuc)
106 if (
allocated(this % charge))
deallocate (this % charge)
107 if (
allocated(this % cname))
deallocate (this % cname)
121 use ukrmol_interface_gbl,
only: read_ukrmolp_ints, get_geom
124 integer,
intent(in) :: iounit
125 integer :: nalm = 0, lembf, matrix_size = 0,dummy_int
127 this % num_one_electron_integrals = -1
128 this % num_two_electron_integrals = -1
130 call read_ukrmolp_ints(this % matrix_io_unit, iounit, this % number_of_matrix_records, &
131 this % num_one_electron_integrals, this % num_two_electron_integrals, &
132 this % num_csf, stdout, this % symmetry_type, this % num_symmetry, this % num_orbitals_sym, &
133 this % positron_flag, 1.0_wp, this % name, &
137 call get_geom(this % nnuc, this % cname, this % xnuc, this % ynuc, this % znuc, this % charge)
140 rewind(this % matrix_io_unit)
141 read (this % matrix_io_unit) matrix_size, this % number_of_matrix_records , dummy_int, matrix_size, &
142 dummy_int, this % num_symmetries, dummy_int, dummy_int, dummy_int, dummy_int, this % nnuc, &
143 dummy_int, this % NAME, this % NHE, this % DTNUC
144 this % core_energy = this % DTNUC(1)
145 close (this % matrix_io_unit)
157 use ukrmol_interface_gbl,
only: get_integral
160 integer,
intent(in) :: i, j, k, l, m
161 integer :: a, b, c, d
165 a = this % orbital_mapping(j)
166 b = this % orbital_mapping(l)
167 coeff = get_integral(a, b, 0, 0, m)
169 a = this % orbital_mapping(i)
170 b = this % orbital_mapping(j)
171 c = this % orbital_mapping(k)
172 d = this % orbital_mapping(l)
173 coeff = get_integral(a, b, c, d, m)
186 integer,
intent(in) :: iounit
187 integer :: ido, ifail, i
189 do ido = 1, this % nnuc
190 write (iounit) this % cname(ido), this % xnuc(ido), this % ynuc(ido), this % znuc(ido), this % charge(ido)
193 write (stdout, 120) (this % cname(i), this % xnuc(i), this % ynuc(i), this % znuc(i), this % charge(i), i = 1, this % nnuc)
194 120
FORMAT(/,
' Nuclear data X Y Z Charge',/,(3x,a8,2x,4f10.6))
204 use ukrmol_interface_gbl,
only: destroy_ukrmolp
210 call destroy_ukrmolp()