55 CHARACTER(LEN=default_string_length) :: bsname
56 INTEGER,
INTENT(IN) :: nsets
57 INTEGER,
DIMENSION(:),
INTENT(IN) :: lmin, lmax
58 INTEGER,
DIMENSION(0:, :),
INTENT(IN) :: nl
59 INTEGER,
DIMENSION(:),
INTENT(IN) :: npgf
60 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: zet
62 INTEGER :: i, ico, info, iset, ishell, j, l, &
63 lshell, m, maxco, maxpgf, maxshell, &
65 REAL(kind=
dp) :: za, zb, zetab
66 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: so
68 cpassert(.NOT.
ASSOCIATED(aux_basis))
71 aux_basis%name = bsname
72 aux_basis%aliases = bsname
73 aux_basis%nset = nsets
75 ALLOCATE (aux_basis%npgf(nsets), aux_basis%nshell(nsets), &
76 aux_basis%lmax(nsets), aux_basis%lmin(nsets))
77 aux_basis%lmax(1:nsets) = lmax(1:nsets)
78 aux_basis%lmin(1:nsets) = lmin(1:nsets)
79 aux_basis%npgf(1:nsets) = npgf(1:nsets)
81 aux_basis%nshell(iset) = 0
82 DO l = lmin(iset), lmax(iset)
83 aux_basis%nshell(iset) = aux_basis%nshell(iset) + nl(l, iset)
86 maxpgf = maxval(npgf(1:nsets))
87 maxshell = maxval(aux_basis%nshell(1:nsets))
88 ALLOCATE (aux_basis%zet(maxpgf, nsets))
89 aux_basis%zet(1:maxpgf, 1:nsets) = zet(1:maxpgf, 1:nsets)
91 ALLOCATE (aux_basis%n(maxshell, nsets))
92 ALLOCATE (aux_basis%l(maxshell, nsets))
93 ALLOCATE (aux_basis%gcc(maxpgf, maxshell, nsets))
97 DO l = lmin(iset), lmax(iset)
100 aux_basis%l(ns, iset) = l
101 aux_basis%n(ns, iset) = l + i
107 aux_basis%gcc = 0.0_dp
110 DO l = lmin(iset), lmax(iset)
111 nx = aux_basis%npgf(iset)
112 ALLOCATE (so(nx, nx))
113 cpassert(nx >= nl(l, iset))
115 za = (2.0_dp*zet(i, iset))**(0.25_dp*(2*l + 3))
117 zb = (2.0_dp*zet(j, iset))**(0.25_dp*(2*l + 3))
118 zetab = zet(i, iset) + zet(j, iset)
119 so(i, j) = za*zb/zetab**(l + 1.5_dp)
120 IF (i .NE. j) so(j, i) = so(i, j)
125 CALL dpotrf(
'U', nx, so, nx, info)
127 CALL dtrtri(
'U',
"N", nx, so, nx, info)
129 DO i = ns + 1, ns + nl(l, iset)
131 aux_basis%gcc(j, i, iset) = so(j, i - ns)
134 IF (nl(l, iset) < nx)
THEN
136 DO j = nl(l, iset) + 1, nx
137 aux_basis%gcc(j, i, iset) = 1.0_dp
140 ns = ns + nl(l, iset)
146 ALLOCATE (aux_basis%first_cgf(maxshell, nsets))
147 ALLOCATE (aux_basis%first_sgf(maxshell, nsets))
148 ALLOCATE (aux_basis%last_cgf(maxshell, nsets))
149 ALLOCATE (aux_basis%last_sgf(maxshell, nsets))
150 ALLOCATE (aux_basis%ncgf_set(nsets))
151 ALLOCATE (aux_basis%nsgf_set(nsets))
157 aux_basis%ncgf_set(iset) = 0
158 aux_basis%nsgf_set(iset) = 0
159 DO ishell = 1, aux_basis%nshell(iset)
160 lshell = aux_basis%l(ishell, iset)
161 aux_basis%first_cgf(ishell, iset) = ncgf + 1
162 ncgf = ncgf +
nco(lshell)
163 aux_basis%last_cgf(ishell, iset) = ncgf
164 aux_basis%ncgf_set(iset) = &
165 aux_basis%ncgf_set(iset) +
nco(lshell)
166 aux_basis%first_sgf(ishell, iset) = nsgf + 1
167 nsgf = nsgf +
nso(lshell)
168 aux_basis%last_sgf(ishell, iset) = nsgf
169 aux_basis%nsgf_set(iset) = &
170 aux_basis%nsgf_set(iset) +
nso(lshell)
172 maxco = max(maxco, npgf(iset)*
ncoset(lmax(iset)))
174 aux_basis%ncgf = ncgf
175 aux_basis%nsgf = nsgf
177 ALLOCATE (aux_basis%lx(ncgf))
178 ALLOCATE (aux_basis%ly(ncgf))
179 ALLOCATE (aux_basis%lz(ncgf))
180 ALLOCATE (aux_basis%m(nsgf))
181 ALLOCATE (aux_basis%cgf_symbol(ncgf))
182 ALLOCATE (aux_basis%sgf_symbol(nsgf))
188 DO ishell = 1, aux_basis%nshell(iset)
189 lshell = aux_basis%l(ishell, iset)
192 aux_basis%lx(ncgf) =
indco(1, ico)
193 aux_basis%ly(ncgf) =
indco(2, ico)
194 aux_basis%lz(ncgf) =
indco(3, ico)
195 aux_basis%cgf_symbol(ncgf) = &
196 cgf_symbol(aux_basis%n(ishell, iset), (/aux_basis%lx(ncgf), &
197 aux_basis%ly(ncgf), &
198 aux_basis%lz(ncgf)/))
200 DO m = -lshell, lshell
202 aux_basis%m(nsgf) = m
203 aux_basis%sgf_symbol(nsgf) = &
204 sgf_symbol(aux_basis%n(ishell, iset), lshell, m)
210 aux_basis%kind_radius = 0.0_dp
211 aux_basis%short_kind_radius = 0.0_dp
212 ALLOCATE (aux_basis%set_radius(nsets))
213 ALLOCATE (aux_basis%pgf_radius(maxpgf, nsets))
214 aux_basis%set_radius = 0.0_dp
215 aux_basis%pgf_radius = 0.0_dp
218 ALLOCATE (aux_basis%cphi(maxco, ncgf))
219 ALLOCATE (aux_basis%sphi(maxco, nsgf))
220 ALLOCATE (aux_basis%scon(maxco, nsgf))
221 ALLOCATE (aux_basis%norm_cgf(ncgf))
222 aux_basis%norm_type = 2