(git:9ea9339)
Loading...
Searching...
No Matches
atom_pseudo.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
11 USE atom_fit, ONLY: atom_fit_pseudo
18 USE atom_output, ONLY: atom_print_basis,&
23 USE atom_types, ONLY: &
36 USE input_constants, ONLY: do_analytic,&
42 USE kinds, ONLY: default_string_length,&
43 dp
44 USE periodic_table, ONLY: nelem,&
45 ptable
46 USE physcon, ONLY: bohr
48#include "./base/base_uses.f90"
49
50 IMPLICIT NONE
51 PRIVATE
52 PUBLIC :: atom_pseudo_opt
53
54 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'atom_pseudo'
55
56! **************************************************************************************************
57
58CONTAINS
59
60! **************************************************************************************************
61
62! **************************************************************************************************
63!> \brief ...
64!> \param atom_section ...
65! **************************************************************************************************
66 SUBROUTINE atom_pseudo_opt(atom_section)
67 TYPE(section_vals_type), POINTER :: atom_section
68
69 CHARACTER(len=*), PARAMETER :: routinen = 'atom_pseudo_opt'
70
71 CHARACTER(LEN=2) :: elem, refm
72 CHARACTER(LEN=default_string_length), &
73 DIMENSION(:), POINTER :: tmpstringlist
74 INTEGER :: ads, do_eric, do_erie, handle, i, im, &
75 in, iw, k, l, maxl, mb, method, mo, &
76 n_meth, n_rep, nr_gh, reltyp, zcore, &
77 zval, zz
78 INTEGER, DIMENSION(0:lmat) :: maxn
79 INTEGER, DIMENSION(:), POINTER :: cn
80 LOGICAL :: do_gh, do_ppref, eri_c, eri_e, explicit, &
81 graph, pp_calc
82 REAL(kind=dp) :: ne, nm
83 REAL(kind=dp), DIMENSION(0:lmat, 10) :: pocc
84 TYPE(atom_basis_type), POINTER :: ae_basis, pp_basis
85 TYPE(atom_integrals), POINTER :: ae_int, pp_int
86 TYPE(atom_optimization_type) :: optimization
87 TYPE(atom_orbitals), POINTER :: orbitals
88 TYPE(atom_p_type), DIMENSION(:, :), POINTER :: atom_info, atom_refs
89 TYPE(atom_potential_type), POINTER :: ae_pot, p_pot
90 TYPE(atom_state), POINTER :: state, statepp, stateref
91 TYPE(cp_logger_type), POINTER :: logger
92 TYPE(section_vals_type), POINTER :: basis_section, method_section, &
93 opt_section, potential_section, &
94 powell_section, xc_section
95
96 CALL timeset(routinen, handle)
97
98 ! What atom do we calculate
99 CALL section_vals_val_get(atom_section, "ATOMIC_NUMBER", i_val=zval)
100 CALL section_vals_val_get(atom_section, "ELEMENT", c_val=elem)
101 zz = 0
102 DO i = 1, nelem
103 IF (ptable(i)%symbol == elem) THEN
104 zz = i
105 EXIT
106 END IF
107 END DO
108 IF (zz /= 1) zval = zz
109
110 ! read and set up information on the basis sets
111 ALLOCATE (ae_basis, pp_basis)
112 basis_section => section_vals_get_subs_vals(atom_section, "AE_BASIS")
113 NULLIFY (ae_basis%grid)
114 CALL init_atom_basis(ae_basis, basis_section, zval, "AA")
115 NULLIFY (pp_basis%grid)
116 basis_section => section_vals_get_subs_vals(atom_section, "PP_BASIS")
117 CALL init_atom_basis(pp_basis, basis_section, zval, "AP")
118
119 ! print general and basis set information
120 logger => cp_get_default_logger()
121 iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%PROGRAM_BANNER", extension=".log")
122 IF (iw > 0) CALL atom_print_info(zval, "Atomic Energy Calculation", iw)
123 CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%PROGRAM_BANNER")
124 iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%BASIS_SET", extension=".log")
125 IF (iw > 0) THEN
126 CALL atom_print_basis(ae_basis, iw, " All Electron/Reference Basis")
127 CALL atom_print_basis(pp_basis, iw, " Pseudopotential Basis")
128 END IF
129 CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%BASIS_SET")
130
131 ! check on the reference method
132 CALL section_vals_val_get(atom_section, "REFERENCE%METHOD", c_val=refm)
133 CALL uppercase(refm)
134 do_ppref = (refm == "PP")
135
136 ! read and setup information on the pseudopotential
137 NULLIFY (potential_section)
138 potential_section => section_vals_get_subs_vals(atom_section, "POTENTIAL")
139 ALLOCATE (ae_pot, p_pot)
140 CALL init_atom_potential(p_pot, potential_section, zval)
141 IF (do_ppref) THEN
142 potential_section => section_vals_get_subs_vals(atom_section, "REFERENCE%POTENTIAL")
143 CALL section_vals_get(potential_section, explicit=explicit)
144 cpassert(explicit)
145 CALL init_atom_potential(ae_pot, potential_section, zval)
146 ELSE
147 CALL init_atom_potential(ae_pot, potential_section, -1)
148 END IF
149 IF (.NOT. p_pot%confinement .AND. .NOT. ae_pot%confinement) THEN
150 !set default confinement potential
151 p_pot%confinement = .true.
152 p_pot%conf_type = poly_conf
153 p_pot%scon = 2.0_dp
154 p_pot%acon = 0.5_dp
155 ! this seems to be the default in the old code
156 p_pot%rcon = (2._dp*ptable(zval)%covalent_radius*bohr)**2
157 ae_pot%confinement = .true.
158 ae_pot%conf_type = poly_conf
159 ae_pot%scon = 2.0_dp
160 ae_pot%acon = 0.5_dp
161 ! this seems to be the default in the old code
162 ae_pot%rcon = (2._dp*ptable(zval)%covalent_radius*bohr)**2
163 END IF
164
165 ! if the ERI's are calculated analytically, we have to precalculate them
166 eri_c = .false.
167 CALL section_vals_val_get(atom_section, "COULOMB_INTEGRALS", i_val=do_eric)
168 IF (do_eric == do_analytic) eri_c = .true.
169 eri_e = .false.
170 CALL section_vals_val_get(atom_section, "EXCHANGE_INTEGRALS", i_val=do_erie)
171 IF (do_erie == do_analytic) eri_e = .true.
172 CALL section_vals_val_get(atom_section, "USE_GAUSS_HERMITE", l_val=do_gh)
173 CALL section_vals_val_get(atom_section, "GRID_POINTS_GH", i_val=nr_gh)
174
175 ! information on the states to be calculated
176 CALL section_vals_val_get(atom_section, "MAX_ANGULAR_MOMENTUM", i_val=maxl)
177 maxn = 0
178 CALL section_vals_val_get(atom_section, "CALCULATE_STATES", i_vals=cn)
179 DO in = 1, min(SIZE(cn), 4)
180 maxn(in - 1) = cn(in)
181 END DO
182 DO in = 0, lmat
183 maxn(in) = min(maxn(in), ae_basis%nbas(in))
184 END DO
185
186 ! read optimization section
187 opt_section => section_vals_get_subs_vals(atom_section, "OPTIMIZATION")
188 CALL read_atom_opt_section(optimization, opt_section)
189
190 ! Check for the total number of electron configurations to be calculated
191 CALL section_vals_val_get(atom_section, "ELECTRON_CONFIGURATION", n_rep_val=n_rep)
192 ! Check for the total number of method types to be calculated
193 method_section => section_vals_get_subs_vals(atom_section, "METHOD")
194 CALL section_vals_get(method_section, n_repetition=n_meth)
195
196 ! integrals
197 ALLOCATE (ae_int, pp_int)
198
199 ALLOCATE (atom_info(n_rep, n_meth), atom_refs(n_rep, n_meth))
200
201 iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%PROGRAM_BANNER", extension=".log")
202 IF (iw > 0) THEN
203 WRITE (iw, '(/," ",79("*"))')
204 WRITE (iw, '(" ",26("*"),A,25("*"))') " Calculate Reference States "
205 WRITE (iw, '(" ",79("*"))')
206 END IF
207 CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%PROGRAM_BANNER")
208
209 DO in = 1, n_rep
210 DO im = 1, n_meth
211
212 NULLIFY (atom_info(in, im)%atom, atom_refs(in, im)%atom)
213 CALL create_atom_type(atom_info(in, im)%atom)
214 CALL create_atom_type(atom_refs(in, im)%atom)
215
216 atom_info(in, im)%atom%optimization = optimization
217 atom_refs(in, im)%atom%optimization = optimization
218
219 atom_info(in, im)%atom%z = zval
220 atom_refs(in, im)%atom%z = zval
221 xc_section => section_vals_get_subs_vals(method_section, "XC", i_rep_section=im)
222 atom_info(in, im)%atom%xc_section => xc_section
223 atom_refs(in, im)%atom%xc_section => xc_section
224
225 ALLOCATE (state, statepp, stateref)
226
227 ! get the electronic configuration
228 CALL section_vals_val_get(atom_section, "ELECTRON_CONFIGURATION", i_rep_val=in, &
229 c_vals=tmpstringlist)
230 ! all electron configurations have to be with full core
231 pp_calc = index(tmpstringlist(1), "CORE") /= 0
232 cpassert(.NOT. pp_calc)
233
234 ! set occupations for the full electronic configuration
235 CALL atom_set_occupation(tmpstringlist, state%occ, state%occupation, state%multiplicity)
236 state%maxl_occ = get_maxl_occ(state%occ)
237 state%maxn_occ = get_maxn_occ(state%occ)
238 ! set number of states to be calculated
239 state%maxl_calc = max(maxl, state%maxl_occ)
240 state%maxl_calc = min(lmat, state%maxl_calc)
241 state%maxn_calc = 0
242 DO k = 0, state%maxl_calc
243 ads = 2
244 IF (state%maxn_occ(k) == 0) ads = 1
245 state%maxn_calc(k) = max(maxn(k), state%maxn_occ(k) + ads)
246 state%maxn_calc(k) = min(state%maxn_calc(k), ae_basis%nbas(k))
247 END DO
248 state%core = 0._dp
249
250 IF (state%multiplicity /= -1) THEN
251 ! set alpha and beta occupations
252 state%occa = 0._dp
253 state%occb = 0._dp
254 DO l = 0, lmat
255 nm = real((2*l + 1), kind=dp)
256 DO k = 1, 10
257 ne = state%occupation(l, k)
258 IF (ne == 0._dp) THEN !empty shell
259 EXIT !assume there are no holes
260 ELSEIF (ne == 2._dp*nm) THEN !closed shell
261 state%occa(l, k) = nm
262 state%occb(l, k) = nm
263 ELSEIF (state%multiplicity == -2) THEN !High spin case
264 state%occa(l, k) = min(ne, nm)
265 state%occb(l, k) = max(0._dp, ne - nm)
266 ELSE
267 state%occa(l, k) = 0.5_dp*(ne + state%multiplicity - 1._dp)
268 state%occb(l, k) = ne - state%occa(l, k)
269 END IF
270 END DO
271 END DO
272 END IF
273
274 ! set occupations for reference calculation
275 IF (do_ppref) THEN
276 CALL section_vals_val_get(atom_section, "REFERENCE%CORE", explicit=explicit)
277 IF (explicit) THEN
278 CALL section_vals_val_get(atom_section, "REFERENCE%CORE", c_vals=tmpstringlist)
279 ELSE
280 CALL section_vals_val_get(atom_section, "CORE", c_vals=tmpstringlist)
281 END IF
282 CALL atom_set_occupation(tmpstringlist, stateref%core, pocc)
283 zcore = zval - nint(sum(stateref%core))
284 CALL set_atom(atom_refs(in, im)%atom, zcore=zcore, pp_calc=.true.)
285
286 stateref%occ = state%occ - stateref%core
287 stateref%occupation = 0._dp
288 DO l = 0, lmat
289 k = 0
290 DO i = 1, 10
291 IF (stateref%occ(l, i) /= 0._dp) THEN
292 k = k + 1
293 stateref%occupation(l, k) = state%occ(l, i)
294 IF (state%multiplicity /= -1) THEN
295 stateref%occa(l, k) = state%occa(l, i) - stateref%core(l, i)/2
296 stateref%occb(l, k) = state%occb(l, i) - stateref%core(l, i)/2
297 END IF
298 END IF
299 END DO
300 END DO
301
302 stateref%maxl_occ = get_maxl_occ(stateref%occ)
303 stateref%maxn_occ = get_maxn_occ(stateref%occ)
304 stateref%maxl_calc = state%maxl_calc
305 stateref%maxn_calc = 0
306 maxn = get_maxn_occ(stateref%core)
307 DO k = 0, stateref%maxl_calc
308 stateref%maxn_calc(k) = state%maxn_calc(k) - maxn(k)
309 stateref%maxn_calc(k) = min(stateref%maxn_calc(k), ae_basis%nbas(k))
310 END DO
311 stateref%multiplicity = state%multiplicity
312
313 ELSE
314
315 stateref = state
316 CALL set_atom(atom_refs(in, im)%atom, zcore=zval, pp_calc=.false.)
317
318 END IF
319
320 ! set occupations for pseudopotential calculation
321 CALL section_vals_val_get(atom_section, "CORE", c_vals=tmpstringlist)
322 CALL atom_set_occupation(tmpstringlist, statepp%core, pocc)
323 zcore = zval - nint(sum(statepp%core))
324 CALL set_atom(atom_info(in, im)%atom, zcore=zcore, pp_calc=.true.)
325
326 statepp%occ = state%occ - statepp%core
327 statepp%occupation = 0._dp
328 DO l = 0, lmat
329 k = 0
330 DO i = 1, 10
331 IF (statepp%occ(l, i) /= 0._dp) THEN
332 k = k + 1
333 statepp%occupation(l, k) = state%occ(l, i)
334 IF (state%multiplicity /= -1) THEN
335 statepp%occa(l, k) = state%occa(l, i) - statepp%core(l, i)/2
336 statepp%occb(l, k) = state%occb(l, i) - statepp%core(l, i)/2
337 END IF
338 END IF
339 END DO
340 END DO
341
342 statepp%maxl_occ = get_maxl_occ(statepp%occ)
343 statepp%maxn_occ = get_maxn_occ(statepp%occ)
344 statepp%maxl_calc = state%maxl_calc
345 statepp%maxn_calc = 0
346 maxn = get_maxn_occ(statepp%core)
347 DO k = 0, statepp%maxl_calc
348 statepp%maxn_calc(k) = state%maxn_calc(k) - maxn(k)
349 statepp%maxn_calc(k) = min(statepp%maxn_calc(k), pp_basis%nbas(k))
350 END DO
351 statepp%multiplicity = state%multiplicity
352
353 CALL section_vals_val_get(method_section, "METHOD_TYPE", i_val=method, i_rep_section=im)
354 CALL section_vals_val_get(method_section, "RELATIVISTIC", i_val=reltyp, i_rep_section=im)
355 CALL set_atom(atom_info(in, im)%atom, method_type=method)
356 IF (do_ppref) THEN
357 CALL set_atom(atom_refs(in, im)%atom, method_type=method)
358 ELSE
359 CALL set_atom(atom_refs(in, im)%atom, method_type=method, relativistic=reltyp)
360 END IF
361
362 ! calculate integrals: pseudopotential basis
363 ! general integrals
364 CALL atom_int_setup(pp_int, pp_basis, potential=p_pot, eri_coulomb=eri_c, eri_exchange=eri_e)
365 !
366 NULLIFY (pp_int%tzora, pp_int%hdkh)
367 ! potential
368 CALL atom_ppint_setup(pp_int, pp_basis, potential=p_pot)
369 !
370 CALL set_atom(atom_info(in, im)%atom, basis=pp_basis, integrals=pp_int, potential=p_pot)
371 statepp%maxn_calc(:) = min(statepp%maxn_calc(:), pp_basis%nbas(:))
372 cpassert(all(state%maxn_calc(:) >= state%maxn_occ))
373
374 ! calculate integrals: all electron basis
375 ! general integrals
376 CALL atom_int_setup(ae_int, ae_basis, potential=ae_pot, &
377 eri_coulomb=eri_c, eri_exchange=eri_e)
378 ! potential
379 CALL atom_ppint_setup(ae_int, ae_basis, potential=ae_pot)
380 IF (do_ppref) THEN
381 NULLIFY (ae_int%tzora, ae_int%hdkh)
382 ELSE
383 ! relativistic correction terms
384 CALL atom_relint_setup(ae_int, ae_basis, reltyp, zcore=real(zval, dp))
385 END IF
386 !
387 CALL set_atom(atom_refs(in, im)%atom, basis=ae_basis, integrals=ae_int, potential=ae_pot)
388 stateref%maxn_calc(:) = min(stateref%maxn_calc(:), ae_basis%nbas(:))
389 cpassert(all(stateref%maxn_calc(:) >= stateref%maxn_occ))
390
391 CALL set_atom(atom_info(in, im)%atom, coulomb_integral_type=do_eric, &
392 exchange_integral_type=do_erie)
393 CALL set_atom(atom_refs(in, im)%atom, coulomb_integral_type=do_eric, &
394 exchange_integral_type=do_erie)
395 atom_info(in, im)%atom%hfx_pot%do_gh = do_gh
396 atom_info(in, im)%atom%hfx_pot%nr_gh = nr_gh
397 atom_refs(in, im)%atom%hfx_pot%do_gh = do_gh
398 atom_refs(in, im)%atom%hfx_pot%nr_gh = nr_gh
399
400 CALL set_atom(atom_info(in, im)%atom, state=statepp)
401 NULLIFY (orbitals)
402 mo = maxval(statepp%maxn_calc)
403 mb = maxval(atom_info(in, im)%atom%basis%nbas)
404 CALL create_atom_orbs(orbitals, mb, mo)
405 CALL set_atom(atom_info(in, im)%atom, orbitals=orbitals)
406
407 CALL set_atom(atom_refs(in, im)%atom, state=stateref)
408 NULLIFY (orbitals)
409 mo = maxval(stateref%maxn_calc)
410 mb = maxval(atom_refs(in, im)%atom%basis%nbas)
411 CALL create_atom_orbs(orbitals, mb, mo)
412 CALL set_atom(atom_refs(in, im)%atom, orbitals=orbitals)
413
414 IF (atom_consistent_method(atom_refs(in, im)%atom%method_type, atom_refs(in, im)%atom%state%multiplicity)) THEN
415 !Print method info
416 iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%METHOD_INFO", extension=".log")
417 CALL atom_print_method(atom_refs(in, im)%atom, iw)
418 CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%METHOD_INFO")
419 !Calculate the electronic structure
420 iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%SCF_INFO", extension=".log")
421 CALL calculate_atom(atom_refs(in, im)%atom, iw)
422 CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%SCF_INFO")
423 END IF
424 DEALLOCATE (state)
425 END DO
426 END DO
427
428 iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%FIT_PSEUDO", extension=".log")
429 IF (iw > 0) THEN
430 WRITE (iw, '(/," ",79("*"))')
431 WRITE (iw, '(" ",21("*"),A,21("*"))') " Optimize Pseudopotential Parameters "
432 WRITE (iw, '(" ",79("*"))')
433 END IF
434 CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%FIT_PSEUDO")
435 iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%POTENTIAL", extension=".log")
436 IF (iw > 0) THEN
437 CALL atom_print_potential(p_pot, iw)
438 END IF
439 CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%POTENTIAL")
440 iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%FIT_PSEUDO", extension=".log")
441 IF (iw > 0) THEN
442 powell_section => section_vals_get_subs_vals(atom_section, "POWELL")
443 CALL atom_fit_pseudo(atom_info, atom_refs, p_pot, iw, powell_section)
444 END IF
445 CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%FIT_PSEUDO")
446 iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%POTENTIAL", extension=".log")
447 IF (iw > 0) THEN
448 CALL atom_print_potential(p_pot, iw)
449 END IF
450 CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%POTENTIAL")
451
452 ! Print out the orbitals if requested
453 iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%ORBITALS", extension=".log")
454 CALL section_vals_val_get(atom_section, "PRINT%ORBITALS%XMGRACE", l_val=graph)
455 IF (iw > 0) THEN
456 DO in = 1, n_rep
457 DO im = 1, n_meth
458 CALL atom_print_orbitals(atom_info(in, im)%atom, iw, xmgrace=graph)
459 END DO
460 END DO
461 END IF
462 CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%ORBITALS")
463
464 ! clean up
465 CALL atom_int_release(ae_int)
466 CALL atom_ppint_release(ae_int)
467 CALL atom_relint_release(ae_int)
468
469 CALL atom_int_release(pp_int)
470 CALL atom_ppint_release(pp_int)
471 CALL atom_relint_release(pp_int)
472
473 CALL release_atom_basis(ae_basis)
474 CALL release_atom_basis(pp_basis)
475
476 CALL release_atom_potential(p_pot)
477 CALL release_atom_potential(ae_pot)
478
479 DO in = 1, n_rep
480 DO im = 1, n_meth
481 CALL release_atom_type(atom_info(in, im)%atom)
482 CALL release_atom_type(atom_refs(in, im)%atom)
483 END DO
484 END DO
485 DEALLOCATE (atom_info, atom_refs)
486
487 DEALLOCATE (ae_pot, p_pot, ae_basis, pp_basis, ae_int, pp_int)
488
489 CALL timestop(handle)
490
491 END SUBROUTINE atom_pseudo_opt
492
493! **************************************************************************************************
494
495END MODULE atom_pseudo
program graph
Program to Map on grid the hills spawned during a metadynamics run.
Definition graph.F:19
subroutine, public calculate_atom(atom, iw, noguess, converged)
General routine to perform electronic structure atomic calculations.
routines that fit parameters for /from atomic calculations
Definition atom_fit.F:11
subroutine, public atom_fit_pseudo(atom_info, atom_refs, ppot, iunit, powell_section)
...
Definition atom_fit.F:504
Calculate the atomic operator matrices.
subroutine, public atom_ppint_release(integrals)
Release memory allocated for atomic integrals (core electrons).
subroutine, public atom_int_setup(integrals, basis, potential, eri_coulomb, eri_exchange, all_nu)
Set up atomic integrals.
subroutine, public atom_relint_setup(integrals, basis, reltyp, zcore, alpha)
...
subroutine, public atom_relint_release(integrals)
Release memory allocated for atomic integrals (relativistic effects).
subroutine, public atom_ppint_setup(integrals, basis, potential)
...
subroutine, public atom_int_release(integrals)
Release memory allocated for atomic integrals (valence electrons).
Routines that print various information about an atomic kind.
Definition atom_output.F:11
subroutine, public atom_print_orbitals(atom, iw, xmgrace)
Print atomic orbitals.
subroutine, public atom_print_basis(atom_basis, iw, title)
Print atomic basis set.
subroutine, public atom_print_method(atom, iw)
Print information about the electronic structure method in use.
subroutine, public atom_print_potential(potential, iw)
Print information about the pseudo-potential.
subroutine, public atom_print_info(zval, info, iw)
Print an information string related to the atomic kind.
Definition atom_output.F:69
subroutine, public atom_pseudo_opt(atom_section)
...
Definition atom_pseudo.F:67
Define the atom type and its sub types.
Definition atom_types.F:15
subroutine, public read_atom_opt_section(optimization, opt_section)
...
subroutine, public create_atom_type(atom)
...
Definition atom_types.F:958
subroutine, public release_atom_type(atom)
...
Definition atom_types.F:982
subroutine, public release_atom_potential(potential)
...
subroutine, public init_atom_basis(basis, basis_section, zval, btyp)
Initialize the basis for the atomic code.
Definition atom_types.F:378
integer, parameter, public lmat
Definition atom_types.F:67
subroutine, public set_atom(atom, basis, state, integrals, orbitals, potential, zcore, pp_calc, do_zmp, doread, read_vxc, method_type, relativistic, coulomb_integral_type, exchange_integral_type, fmat)
...
subroutine, public init_atom_potential(potential, potential_section, zval)
...
subroutine, public release_atom_basis(basis)
...
Definition atom_types.F:924
subroutine, public create_atom_orbs(orbs, mbas, mo)
...
Some basic routines for atomic calculations.
Definition atom_utils.F:15
pure logical function, public atom_consistent_method(method, multiplicity)
Check that the atomic multiplicity is consistent with the electronic structure method.
pure integer function, dimension(0:lmat), public get_maxn_occ(occupation)
Return the maximum principal quantum number of occupied orbitals.
Definition atom_utils.F:301
subroutine, public atom_set_occupation(ostring, occupation, wfnocc, multiplicity)
Set occupation of atomic orbitals.
Definition atom_utils.F:103
pure integer function, public get_maxl_occ(occupation)
Return the maximum orbital quantum number of occupied orbitals.
Definition atom_utils.F:281
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public do_analytic
integer, parameter, public poly_conf
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
Periodic Table related data definitions.
type(atom), dimension(0:nelem), public ptable
integer, parameter, public nelem
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public bohr
Definition physcon.F:147
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
Routines to facilitate writing XMGRACE files.
Definition xmgrace.F:14
Provides all information about a basis set.
Definition atom_types.F:78
Information on optimization procedure.
Definition atom_types.F:283
Holds atomic orbitals and energies.
Definition atom_types.F:237
Provides all information on states and occupation.
Definition atom_types.F:198
type of a logger, at the moment it contains just a print level starting at which level it should be l...