(git:0de0cc2)
atom_pseudo.F
Go to the documentation of this file.
1 !--------------------------------------------------------------------------------------------------!
2 ! CP2K: A general program to perform molecular dynamics simulations !
3 ! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4 ! !
5 ! SPDX-License-Identifier: GPL-2.0-or-later !
6 !--------------------------------------------------------------------------------------------------!
7 
8 ! **************************************************************************************************
9 MODULE atom_pseudo
11  USE atom_fit, ONLY: atom_fit_pseudo
12  USE atom_operators, ONLY: atom_int_release,&
18  USE atom_output, ONLY: atom_print_basis,&
22  USE atom_types, ONLY: &
23  atom_basis_type, atom_integrals, atom_optimization_type, atom_orbitals, atom_p_type, &
24  atom_potential_type, atom_state, create_atom_orbs, create_atom_type, init_atom_basis, &
29  get_maxl_occ,&
32  cp_logger_type
35  USE input_constants, ONLY: do_analytic,&
36  poly_conf
39  section_vals_type,&
41  USE kinds, ONLY: default_string_length,&
42  dp
43  USE periodic_table, ONLY: nelem,&
44  ptable
45  USE physcon, ONLY: bohr
46 #include "./base/base_uses.f90"
47 
48  IMPLICIT NONE
49  PRIVATE
50  PUBLIC :: atom_pseudo_opt
51 
52  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'atom_pseudo'
53 
54 ! **************************************************************************************************
55 
56 CONTAINS
57 
58 ! **************************************************************************************************
59 
60 ! **************************************************************************************************
61 !> \brief ...
62 !> \param atom_section ...
63 ! **************************************************************************************************
64  SUBROUTINE atom_pseudo_opt(atom_section)
65  TYPE(section_vals_type), POINTER :: atom_section
66 
67  CHARACTER(len=*), PARAMETER :: routinen = 'atom_pseudo_opt'
68 
69  CHARACTER(LEN=2) :: elem
70  CHARACTER(LEN=default_string_length), &
71  DIMENSION(:), POINTER :: tmpstringlist
72  INTEGER :: ads, do_eric, do_erie, handle, i, im, &
73  in, iw, k, l, maxl, mb, method, mo, &
74  n_meth, n_rep, nr_gh, reltyp, zcore, &
75  zval, zz
76  INTEGER, DIMENSION(0:lmat) :: maxn
77  INTEGER, DIMENSION(:), POINTER :: cn
78  LOGICAL :: do_gh, eri_c, eri_e, pp_calc
79  REAL(kind=dp) :: ne, nm
80  REAL(kind=dp), DIMENSION(0:lmat, 10) :: pocc
81  TYPE(atom_basis_type), POINTER :: ae_basis, pp_basis
82  TYPE(atom_integrals), POINTER :: ae_int, pp_int
83  TYPE(atom_optimization_type) :: optimization
84  TYPE(atom_orbitals), POINTER :: orbitals
85  TYPE(atom_p_type), DIMENSION(:, :), POINTER :: atom_info, atom_refs
86  TYPE(atom_potential_type), POINTER :: ae_pot, p_pot
87  TYPE(atom_state), POINTER :: state, statepp
88  TYPE(cp_logger_type), POINTER :: logger
89  TYPE(section_vals_type), POINTER :: basis_section, method_section, &
90  opt_section, potential_section, &
91  powell_section, xc_section
92 
93  CALL timeset(routinen, handle)
94 
95  ! What atom do we calculate
96  CALL section_vals_val_get(atom_section, "ATOMIC_NUMBER", i_val=zval)
97  CALL section_vals_val_get(atom_section, "ELEMENT", c_val=elem)
98  zz = 0
99  DO i = 1, nelem
100  IF (ptable(i)%symbol == elem) THEN
101  zz = i
102  EXIT
103  END IF
104  END DO
105  IF (zz /= 1) zval = zz
106 
107  ! read and set up information on the basis sets
108  ALLOCATE (ae_basis, pp_basis)
109  basis_section => section_vals_get_subs_vals(atom_section, "AE_BASIS")
110  NULLIFY (ae_basis%grid)
111  CALL init_atom_basis(ae_basis, basis_section, zval, "AA")
112  NULLIFY (pp_basis%grid)
113  basis_section => section_vals_get_subs_vals(atom_section, "PP_BASIS")
114  CALL init_atom_basis(pp_basis, basis_section, zval, "AP")
115 
116  ! print general and basis set information
117  logger => cp_get_default_logger()
118  iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%PROGRAM_BANNER", extension=".log")
119  IF (iw > 0) CALL atom_print_info(zval, "Atomic Energy Calculation", iw)
120  CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%PROGRAM_BANNER")
121  iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%BASIS_SET", extension=".log")
122  IF (iw > 0) THEN
123  CALL atom_print_basis(ae_basis, iw, " All Electron Basis")
124  CALL atom_print_basis(pp_basis, iw, " Pseudopotential Basis")
125  END IF
126  CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%BASIS_SET")
127 
128  ! read and setup information on the pseudopotential
129  NULLIFY (potential_section)
130  potential_section => section_vals_get_subs_vals(atom_section, "POTENTIAL")
131  ALLOCATE (ae_pot, p_pot)
132  CALL init_atom_potential(p_pot, potential_section, zval)
133  CALL init_atom_potential(ae_pot, potential_section, -1)
134  IF (.NOT. p_pot%confinement .AND. .NOT. ae_pot%confinement) THEN
135  !set default confinement potential
136  p_pot%confinement = .true.
137  p_pot%conf_type = poly_conf
138  p_pot%scon = 2.0_dp
139  p_pot%acon = 0.5_dp
140  ! this seems to be the default in the old code
141  p_pot%rcon = (2._dp*ptable(zval)%covalent_radius*bohr)**2
142  ae_pot%confinement = .true.
143  ae_pot%conf_type = poly_conf
144  ae_pot%scon = 2.0_dp
145  ae_pot%acon = 0.5_dp
146  ! this seems to be the default in the old code
147  ae_pot%rcon = (2._dp*ptable(zval)%covalent_radius*bohr)**2
148  END IF
149 
150  ! if the ERI's are calculated analytically, we have to precalculate them
151  eri_c = .false.
152  CALL section_vals_val_get(atom_section, "COULOMB_INTEGRALS", i_val=do_eric)
153  IF (do_eric == do_analytic) eri_c = .true.
154  eri_e = .false.
155  CALL section_vals_val_get(atom_section, "EXCHANGE_INTEGRALS", i_val=do_erie)
156  IF (do_erie == do_analytic) eri_e = .true.
157  CALL section_vals_val_get(atom_section, "USE_GAUSS_HERMITE", l_val=do_gh)
158  CALL section_vals_val_get(atom_section, "GRID_POINTS_GH", i_val=nr_gh)
159 
160  ! information on the states to be calculated
161  CALL section_vals_val_get(atom_section, "MAX_ANGULAR_MOMENTUM", i_val=maxl)
162  maxn = 0
163  CALL section_vals_val_get(atom_section, "CALCULATE_STATES", i_vals=cn)
164  DO in = 1, min(SIZE(cn), 4)
165  maxn(in - 1) = cn(in)
166  END DO
167  DO in = 0, lmat
168  maxn(in) = min(maxn(in), ae_basis%nbas(in))
169  END DO
170 
171  ! read optimization section
172  opt_section => section_vals_get_subs_vals(atom_section, "OPTIMIZATION")
173  CALL read_atom_opt_section(optimization, opt_section)
174 
175  ! Check for the total number of electron configurations to be calculated
176  CALL section_vals_val_get(atom_section, "ELECTRON_CONFIGURATION", n_rep_val=n_rep)
177  ! Check for the total number of method types to be calculated
178  method_section => section_vals_get_subs_vals(atom_section, "METHOD")
179  CALL section_vals_get(method_section, n_repetition=n_meth)
180 
181  ! integrals
182  ALLOCATE (ae_int, pp_int)
183 
184  ALLOCATE (atom_info(n_rep, n_meth), atom_refs(n_rep, n_meth))
185 
186  iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%PROGRAM_BANNER", extension=".log")
187  IF (iw > 0) THEN
188  WRITE (iw, '(/," ",79("*"))')
189  WRITE (iw, '(" ",26("*"),A,25("*"))') " Calculate Reference States "
190  WRITE (iw, '(" ",79("*"))')
191  END IF
192  CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%PROGRAM_BANNER")
193 
194  DO in = 1, n_rep
195  DO im = 1, n_meth
196 
197  NULLIFY (atom_info(in, im)%atom, atom_refs(in, im)%atom)
198  CALL create_atom_type(atom_info(in, im)%atom)
199  CALL create_atom_type(atom_refs(in, im)%atom)
200 
201  atom_info(in, im)%atom%optimization = optimization
202  atom_refs(in, im)%atom%optimization = optimization
203 
204  atom_info(in, im)%atom%z = zval
205  atom_refs(in, im)%atom%z = zval
206  xc_section => section_vals_get_subs_vals(method_section, "XC", i_rep_section=im)
207  atom_info(in, im)%atom%xc_section => xc_section
208  atom_refs(in, im)%atom%xc_section => xc_section
209 
210  ALLOCATE (state, statepp)
211 
212  ! get the electronic configuration
213  CALL section_vals_val_get(atom_section, "ELECTRON_CONFIGURATION", i_rep_val=in, &
214  c_vals=tmpstringlist)
215  ! all electron configurations have to be with full core
216  pp_calc = index(tmpstringlist(1), "CORE") /= 0
217  cpassert(.NOT. pp_calc)
218 
219  ! set occupations
220  CALL atom_set_occupation(tmpstringlist, state%occ, state%occupation, state%multiplicity)
221  state%maxl_occ = get_maxl_occ(state%occ)
222  state%maxn_occ = get_maxn_occ(state%occ)
223  ! set number of states to be calculated
224  state%maxl_calc = max(maxl, state%maxl_occ)
225  state%maxl_calc = min(lmat, state%maxl_calc)
226  state%maxn_calc = 0
227  DO k = 0, state%maxl_calc
228  ads = 2
229  IF (state%maxn_occ(k) == 0) ads = 1
230  state%maxn_calc(k) = max(maxn(k), state%maxn_occ(k) + ads)
231  state%maxn_calc(k) = min(state%maxn_calc(k), ae_basis%nbas(k))
232  END DO
233  state%core = 0._dp
234  CALL set_atom(atom_refs(in, im)%atom, zcore=zval, pp_calc=.false.)
235 
236  IF (state%multiplicity /= -1) THEN
237  ! set alpha and beta occupations
238  state%occa = 0._dp
239  state%occb = 0._dp
240  DO l = 0, lmat
241  nm = real((2*l + 1), kind=dp)
242  DO k = 1, 10
243  ne = state%occupation(l, k)
244  IF (ne == 0._dp) THEN !empty shell
245  EXIT !assume there are no holes
246  ELSEIF (ne == 2._dp*nm) THEN !closed shell
247  state%occa(l, k) = nm
248  state%occb(l, k) = nm
249  ELSEIF (state%multiplicity == -2) THEN !High spin case
250  state%occa(l, k) = min(ne, nm)
251  state%occb(l, k) = max(0._dp, ne - nm)
252  ELSE
253  state%occa(l, k) = 0.5_dp*(ne + state%multiplicity - 1._dp)
254  state%occb(l, k) = ne - state%occa(l, k)
255  END IF
256  END DO
257  END DO
258  END IF
259 
260  ! set occupations for pseudopotential calculation
261  CALL section_vals_val_get(atom_section, "CORE", c_vals=tmpstringlist)
262  CALL atom_set_occupation(tmpstringlist, statepp%core, pocc)
263  zcore = zval - nint(sum(statepp%core))
264  CALL set_atom(atom_info(in, im)%atom, zcore=zcore, pp_calc=.true.)
265 
266  statepp%occ = state%occ - statepp%core
267  statepp%occupation = 0._dp
268  DO l = 0, lmat
269  k = 0
270  DO i = 1, 10
271  IF (statepp%occ(l, i) /= 0._dp) THEN
272  k = k + 1
273  statepp%occupation(l, k) = state%occ(l, i)
274  IF (state%multiplicity /= -1) THEN
275  statepp%occa(l, k) = state%occa(l, i) - statepp%core(l, i)/2
276  statepp%occb(l, k) = state%occb(l, i) - statepp%core(l, i)/2
277  END IF
278  END IF
279  END DO
280  END DO
281 
282  statepp%maxl_occ = get_maxl_occ(statepp%occ)
283  statepp%maxn_occ = get_maxn_occ(statepp%occ)
284  statepp%maxl_calc = state%maxl_calc
285  statepp%maxn_calc = 0
286  maxn = get_maxn_occ(statepp%core)
287  DO k = 0, statepp%maxl_calc
288  statepp%maxn_calc(k) = state%maxn_calc(k) - maxn(k)
289  statepp%maxn_calc(k) = min(statepp%maxn_calc(k), pp_basis%nbas(k))
290  END DO
291  statepp%multiplicity = state%multiplicity
292 
293  CALL section_vals_val_get(method_section, "METHOD_TYPE", i_val=method, i_rep_section=im)
294  CALL section_vals_val_get(method_section, "RELATIVISTIC", i_val=reltyp, i_rep_section=im)
295  CALL set_atom(atom_info(in, im)%atom, method_type=method)
296  CALL set_atom(atom_refs(in, im)%atom, method_type=method, relativistic=reltyp)
297 
298  ! calculate integrals: pseudopotential basis
299  ! general integrals
300  CALL atom_int_setup(pp_int, pp_basis, potential=p_pot, eri_coulomb=eri_c, eri_exchange=eri_e)
301  !
302  NULLIFY (pp_int%tzora, pp_int%hdkh)
303  ! potential
304  CALL atom_ppint_setup(pp_int, pp_basis, potential=p_pot)
305  !
306  CALL set_atom(atom_info(in, im)%atom, basis=pp_basis, integrals=pp_int, potential=p_pot)
307  statepp%maxn_calc(:) = min(statepp%maxn_calc(:), pp_basis%nbas(:))
308  cpassert(all(state%maxn_calc(:) >= state%maxn_occ))
309 
310  ! calculate integrals: all electron basis
311  ! general integrals
312  CALL atom_int_setup(ae_int, ae_basis, potential=ae_pot, &
313  eri_coulomb=eri_c, eri_exchange=eri_e)
314  ! potential
315  CALL atom_ppint_setup(ae_int, ae_basis, potential=ae_pot)
316  ! relativistic correction terms
317  CALL atom_relint_setup(ae_int, ae_basis, reltyp, zcore=real(zval, dp))
318  !
319  CALL set_atom(atom_refs(in, im)%atom, basis=ae_basis, integrals=ae_int, potential=ae_pot)
320  state%maxn_calc(:) = min(state%maxn_calc(:), ae_basis%nbas(:))
321  cpassert(all(state%maxn_calc(:) >= state%maxn_occ))
322 
323  CALL set_atom(atom_info(in, im)%atom, coulomb_integral_type=do_eric, &
324  exchange_integral_type=do_erie)
325  CALL set_atom(atom_refs(in, im)%atom, coulomb_integral_type=do_eric, &
326  exchange_integral_type=do_erie)
327  atom_info(in, im)%atom%hfx_pot%do_gh = do_gh
328  atom_info(in, im)%atom%hfx_pot%nr_gh = nr_gh
329  atom_refs(in, im)%atom%hfx_pot%do_gh = do_gh
330  atom_refs(in, im)%atom%hfx_pot%nr_gh = nr_gh
331 
332  CALL set_atom(atom_info(in, im)%atom, state=statepp)
333  NULLIFY (orbitals)
334  mo = maxval(statepp%maxn_calc)
335  mb = maxval(atom_info(in, im)%atom%basis%nbas)
336  CALL create_atom_orbs(orbitals, mb, mo)
337  CALL set_atom(atom_info(in, im)%atom, orbitals=orbitals)
338 
339  CALL set_atom(atom_refs(in, im)%atom, state=state)
340  NULLIFY (orbitals)
341  mo = maxval(state%maxn_calc)
342  mb = maxval(atom_refs(in, im)%atom%basis%nbas)
343  CALL create_atom_orbs(orbitals, mb, mo)
344  CALL set_atom(atom_refs(in, im)%atom, orbitals=orbitals)
345 
346  IF (atom_consistent_method(atom_refs(in, im)%atom%method_type, atom_refs(in, im)%atom%state%multiplicity)) THEN
347  !Print method info
348  iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%METHOD_INFO", extension=".log")
349  CALL atom_print_method(atom_refs(in, im)%atom, iw)
350  CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%METHOD_INFO")
351  !Calculate the electronic structure
352  iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%SCF_INFO", extension=".log")
353  CALL calculate_atom(atom_refs(in, im)%atom, iw)
354  CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%SCF_INFO")
355  END IF
356  END DO
357  END DO
358 
359  iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%FIT_PSEUDO", extension=".log")
360  IF (iw > 0) THEN
361  WRITE (iw, '(/," ",79("*"))')
362  WRITE (iw, '(" ",21("*"),A,21("*"))') " Optimize Pseudopotential Parameters "
363  WRITE (iw, '(" ",79("*"))')
364  END IF
365  CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%FIT_PSEUDO")
366  iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%POTENTIAL", extension=".log")
367  IF (iw > 0) THEN
368  CALL atom_print_potential(p_pot, iw)
369  END IF
370  CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%POTENTIAL")
371  iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%FIT_PSEUDO", extension=".log")
372  IF (iw > 0) THEN
373  powell_section => section_vals_get_subs_vals(atom_section, "POWELL")
374  CALL atom_fit_pseudo(atom_info, atom_refs, p_pot, iw, powell_section)
375  END IF
376  CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%FIT_PSEUDO")
377  iw = cp_print_key_unit_nr(logger, atom_section, "PRINT%POTENTIAL", extension=".log")
378  IF (iw > 0) THEN
379  CALL atom_print_potential(p_pot, iw)
380  END IF
381  CALL cp_print_key_finished_output(iw, logger, atom_section, "PRINT%POTENTIAL")
382 
383  ! clean up
384  CALL atom_int_release(ae_int)
385  CALL atom_ppint_release(ae_int)
386  CALL atom_relint_release(ae_int)
387 
388  CALL atom_int_release(pp_int)
389  CALL atom_ppint_release(pp_int)
390  CALL atom_relint_release(pp_int)
391 
392  CALL release_atom_basis(ae_basis)
393  CALL release_atom_basis(pp_basis)
394 
395  CALL release_atom_potential(p_pot)
396  CALL release_atom_potential(ae_pot)
397 
398  DO in = 1, n_rep
399  DO im = 1, n_meth
400  CALL release_atom_type(atom_info(in, im)%atom)
401  CALL release_atom_type(atom_refs(in, im)%atom)
402  END DO
403  END DO
404  DEALLOCATE (atom_info, atom_refs)
405 
406  DEALLOCATE (ae_pot, p_pot, ae_basis, pp_basis, ae_int, pp_int)
407 
408  CALL timestop(handle)
409 
410  END SUBROUTINE atom_pseudo_opt
411 
412 ! **************************************************************************************************
413 
414 END MODULE atom_pseudo
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:488
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_basis(atom_basis, iw, title)
Print atomic basis set.
Definition: atom_output.F:292
subroutine, public atom_print_method(atom, iw)
Print information about the electronic structure method in use.
Definition: atom_output.F:503
subroutine, public atom_print_potential(potential, iw)
Print information about the pseudo-potential.
Definition: atom_output.F:639
subroutine, public atom_print_info(zval, info, iw)
Print an information string related to the atomic kind.
Definition: atom_output.F:63
subroutine, public atom_pseudo_opt(atom_section)
...
Definition: atom_pseudo.F:65
Define the atom type and its sub types.
Definition: atom_types.F:15
subroutine, public read_atom_opt_section(optimization, opt_section)
...
Definition: atom_types.F:2395
subroutine, public create_atom_type(atom)
...
Definition: atom_types.F:944
subroutine, public release_atom_type(atom)
...
Definition: atom_types.F:968
subroutine, public release_atom_potential(potential)
...
Definition: atom_types.F:2521
subroutine, public init_atom_basis(basis, basis_section, zval, btyp)
Initialize the basis for the atomic code.
Definition: atom_types.F:375
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)
...
Definition: atom_types.F:1009
subroutine, public init_atom_potential(potential, potential_section, zval)
...
Definition: atom_types.F:2421
subroutine, public release_atom_basis(basis)
...
Definition: atom_types.F:910
subroutine, public create_atom_orbs(orbs, mbas, mo)
...
Definition: atom_types.F:1055
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.
Definition: atom_utils.F:2189
pure integer function, dimension(0:lmat), public get_maxn_occ(occupation)
Return the maximum principal quantum number of occupied orbitals.
Definition: atom_utils.F:302
subroutine, public atom_set_occupation(ostring, occupation, wfnocc, multiplicity)
Set occupation of atomic orbitals.
Definition: atom_utils.F:104
pure integer function, public get_maxl_occ(occupation)
Return the maximum orbital quantum number of occupied orbitals.
Definition: atom_utils.F:282
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