(git:24d69ee)
Loading...
Searching...
No Matches
qcschema.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! **************************************************************************************************
9!> \brief The module to read/write QCSchema HDF5 files for interfacing CP2K with other programs
10!> \par History
11!> 10.2022 created [SB]
12!> \author Stefano Battaglia
13! **************************************************************************************************
15
18 USE cp2k_info, ONLY: cp2k_version
23#ifdef __HDF5
24 USE hdf5_wrapper, ONLY: &
25 h5aread_double_scalar, h5awrite_boolean, h5awrite_double_scalar, h5awrite_double_simple, &
26 h5awrite_fixlen_string, h5awrite_integer_scalar, h5awrite_integer_simple, &
27 h5awrite_string_simple, h5close, h5dread_double_simple, h5dwrite_double_simple, h5fclose, &
28 h5fcreate, h5fopen, h5gclose, h5gcreate, h5gopen, h5open, hdf5_id
29#endif
33 USE kinds, ONLY: default_path_length, &
35 dp, &
36 int_8
37 USE mp2_types, ONLY: mp2_type
47 USE qs_kind_types, ONLY: get_qs_kind, &
51#include "./base/base_uses.f90"
52
53 IMPLICIT NONE
54
55 PRIVATE
56
57 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qcschema'
58
59 PUBLIC :: qcschema_type
61
62! **************************************************************************************************
63!> \brief A derived type to store the program information that generated the QCSchema file.
64!> For more information refer to:
65!> https://molssi-qc-schema.readthedocs.io/en/latest/spec_components.html#provenance
66! **************************************************************************************************
67 TYPE qcschema_provenance
68 CHARACTER(LEN=default_string_length) :: creator = "" ! The name of the creator of this object
69 CHARACTER(LEN=default_string_length) :: version = "" ! The version of the creator of this object
70 CHARACTER(LEN=default_string_length) :: routine = "" ! The routine that was used to create this object
71 END TYPE qcschema_provenance
72
73! **************************************************************************************************
74!> \brief A derived type to store the topological information of the physical system.
75!> For more information refer to:
76!> https://molssi-qc-schema.readthedocs.io/en/latest/spec_components.html#topology
77! **************************************************************************************************
78 TYPE qcschema_topology
79 CHARACTER(LEN=default_string_length) :: name = "" ! of the molecule
80 CHARACTER(LEN=2), DIMENSION(:), ALLOCATABLE :: symbols ! of the atoms
81 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: geometry ! row major, in bohr
82 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: masses
83 INTEGER, DIMENSION(:), ALLOCATABLE :: atomic_numbers
84 INTEGER :: molecular_charge = 0
85 INTEGER :: molecular_multiplicity = 1
86 CHARACTER(LEN=default_string_length) :: schema_name = ""
87 INTEGER :: schema_version = 0
88 TYPE(qcschema_provenance) :: provenance = qcschema_provenance()
89 END TYPE qcschema_topology
90
91! **************************************************************************************************
92!> \brief A derived type to store the information of a single electron shell in a basis set.
93!> For more information refer to:
94!> https://github.com/MolSSI/QCSchema/blob/1d5ff3baa5/qcschema/dev/definitions.py#L43
95! **************************************************************************************************
96 TYPE qcschema_electron_shell
97 ! The angular momenta of this electron shell as a list of integers
98 INTEGER, DIMENSION(:), POINTER :: angular_momentum => null()
99 ! The type of this shell: spherical or cartesian
100 CHARACTER(LEN=9) :: harmonic_type = ""
101 ! The exponents of this contracted shell. The official spec stores these values as strings
102 REAL(KIND=dp), DIMENSION(:), POINTER :: exponents => null()
103 ! The general contraction coefficients of this contracted shell
104 REAL(KIND=dp), DIMENSION(:, :), POINTER :: coefficients => null()
105 END TYPE qcschema_electron_shell
106
107! **************************************************************************************************
108!> \brief A derived type to store the information of an ECP in a basis set.
109!> For more information refer to:
110!> https://github.com/MolSSI/QCSchema/blob/1d5ff3baa5/qcschema/dev/definitions.py#L90
111! **************************************************************************************************
112 TYPE qcschema_ecp
113 ! The type of this potential
114 CHARACTER(LEN=default_string_length) :: ecp_type = ""
115 ! The angular momenta of this potential as a list of integers
116 INTEGER, DIMENSION(:), POINTER :: angular_momentum => null()
117 ! The exponents of the r terms
118 INTEGER, DIMENSION(:), POINTER :: r_exponents => null()
119 ! The exponents of the Gaussian terms
120 REAL(KIND=dp), DIMENSION(:), POINTER :: gaussian_exponents => null()
121 ! The general contraction coefficients of this potential
122 REAL(KIND=dp), DIMENSION(:, :), POINTER :: coefficients => null()
123 END TYPE qcschema_ecp
124
125! **************************************************************************************************
126!> \brief A derived type to store the information of a single atom/center in the basis.
127!> For more information refer to:
128!> https://github.com/MolSSI/QCSchema/blob/1d5ff3baa5/qcschema/dev/definitions.py#L146
129! **************************************************************************************************
130 TYPE qcschema_center_basis
131 ! The list of electronic shells for this element
132 TYPE(qcschema_electron_shell), DIMENSION(:), POINTER :: electron_shells => null()
133 ! The list of effective core potentials for this element
134 TYPE(qcschema_ecp), DIMENSION(:), POINTER :: ecp_potentials => null()
135 ! The number of electrons replaced by an ECP
136 INTEGER :: ecp_electrons = 0
137 END TYPE qcschema_center_basis
138
139! **************************************************************************************************
140!> \brief A derived type to store the information of the basis set used in the calculation.
141!> For more information refer to:
142!> https://molssi-qc-schema.readthedocs.io/en/latest/auto_basis.html#basis-set-schema
143! **************************************************************************************************
144 TYPE qcschema_basis_set
145 ! The name of the basis set
146 CHARACTER(LEN=default_string_length) :: name = ""
147 ! A dictionary mapping the keys provided by `atom_map` to their basis center data
148 TYPE(qcschema_center_basis), DIMENSION(:), POINTER :: center_data => null()
149 ! The list of atomic kinds, indicating the keys used to store the basis in `center_data`
150 ! Not clear if this will be of the length of the basis set size, or rather just one
151 ! entry for atomic kind. E.g. only one entry for hydrogen even though there might be
152 ! many hydrogen atoms in the molecule. If this is the case, then we really need a
153 ! hash table for `center_data`
154 CHARACTER(LEN=2), DIMENSION(:), POINTER :: atom_map => null()
155 ! The version of this specific schema
156 INTEGER :: schema_version = -1
157 ! The name of this schema. This value is expected to be `qcschema_basis`
158 CHARACTER(LEN=default_string_length) :: schema_name = ""
159 ! A description of this basis set
160 CHARACTER(LEN=default_string_length) :: description = ""
161 END TYPE qcschema_basis_set
162
163! **************************************************************************************************
164!> \brief A derived type to store any additional computed wavefunction properties.
165!> Matrix quantities are stored as flat, column-major arrays.
166!> For more information refer to:
167!> https://molssi-qc-schema.readthedocs.io/en/latest/auto_wf.html#wavefunction-schema
168! **************************************************************************************************
169 TYPE qcschema_wavefunction
170
171 ! The name of the method used to obtain the wf
172 CHARACTER(LEN=default_string_length) :: method = ""
173
174 ! The basis set used during the computation
175 TYPE(qcschema_basis_set) :: basis_set = qcschema_basis_set()
176
177 ! SCF quantities in AO or MO basis
178 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_orbitals_a
179 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_orbitals_b
180 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_eigenvalues_a
181 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_eigenvalues_b
182 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_occupations_a
183 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_occupations_b
184 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_density_mo_a
185 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_density_mo_b
186 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_fock_mo_a
187 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_fock_mo_b
188
189 ! Electron repulsion integrals
190 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_eri
191 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_eri_mo_aa
192 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_eri_mo_ab
193 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: scf_eri_mo_bb
194
195 ! Quantities with localized orbitals. All `nmo` orbitals are included,
196 ! even if only a subset were localized
197 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: localized_orbitals_a
198 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: localized_orbitals_b
199 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: localized_fock_a
200 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: localized_fock_b
201
202 ! Whether the computation used restricted spin orbitals
203 LOGICAL :: restricted = .false.
204
205 END TYPE qcschema_wavefunction
206
207! **************************************************************************************************
208!> \brief A derived type to store the computed properties of the original calculation.
209!> For more information refer to:
210!> https://molssi-qc-schema.readthedocs.io/en/latest/auto_props.html#properties-schema
211! **************************************************************************************************
212 TYPE qcschema_properties
213
214 REAL(KIND=dp) :: return_energy = 0.0_dp
215
216 INTEGER :: calcinfo_nbasis = 0 ! AO basis size
217 INTEGER :: calcinfo_nmo = 0 ! MO basis size
218 INTEGER :: calcinfo_nalpha = 0 ! # of alpha electrons
219 INTEGER :: calcinfo_nbeta = 0 ! # of beta electrons
220 INTEGER :: calcinfo_natom = 0
221
222 ! SCF results
223 INTEGER :: scf_iterations = 0
224 REAL(KIND=dp) :: scf_one_electron_energy = 0.0_dp
225 REAL(KIND=dp) :: scf_two_electron_energy = 0.0_dp
226 REAL(KIND=dp) :: nuclear_repulsion_energy = 0.0_dp
227 REAL(KIND=dp) :: scf_vv10_energy = 0.0_dp
228 REAL(KIND=dp) :: scf_xc_energy = 0.0_dp
229 REAL(KIND=dp) :: scf_dispersion_correction_energy = 0.0_dp
230 REAL(KIND=dp) :: scf_total_energy = 0.0_dp
231 ! the dipole moment is calculated on the fly and not stored
232 REAL(KIND=dp), DIMENSION(3) :: scf_dipole_moment = 0.0_dp
233
234 ! MP2 results
235 REAL(KIND=dp) :: mp2_same_spin_correlation_energy = 0.0_dp
236 REAL(KIND=dp) :: mp2_opposite_spin_correlation_energy = 0.0_dp
237 REAL(KIND=dp) :: mp2_singles_energy = 0.0_dp
238 REAL(KIND=dp) :: mp2_doubles_energy = 0.0_dp
239 ! these are the only two that are saved
240 REAL(KIND=dp) :: mp2_correlation_energy = 0.0_dp
241 REAL(KIND=dp) :: mp2_total_energy = 0.0_dp
242
243 ! internal flags to know the type of calculation
244 LOGICAL :: mp2 = .false.
245
246 END TYPE qcschema_properties
247
248! **************************************************************************************************
249!> \brief The full QCSchema output type.
250!> For more information refer to:
251!> https://molssi-qc-schema.readthedocs.io/en/latest/spec_components.html#output-components
252! **************************************************************************************************
254 TYPE(qcschema_topology) :: topology = qcschema_topology()
255 TYPE(qcschema_provenance) :: provenance = qcschema_provenance()
256 TYPE(qcschema_properties) :: properties = qcschema_properties()
257 TYPE(qcschema_wavefunction) :: wavefunction = qcschema_wavefunction()
258 TYPE(qcschema_basis_set) :: basis = qcschema_basis_set()
259 REAL(kind=dp), DIMENSION(:), ALLOCATABLE :: return_result
260 CHARACTER(LEN=default_string_length) :: driver = ""
261 LOGICAL :: success = .false.
262 END TYPE qcschema_type
263
264CONTAINS
265
266! **************************************************************************************************
267!> \brief Create and initialize a qcschema object from a quickstep environment
268!> \param qcschema_env the qcschema environment to populate
269!> \param qs_env the qs environment with all the info of the computation
270! **************************************************************************************************
271 SUBROUTINE qcschema_env_create(qcschema_env, qs_env)
272 TYPE(qcschema_type), INTENT(INOUT) :: qcschema_env
273 TYPE(qs_environment_type), INTENT(IN), POINTER :: qs_env
274
275 CHARACTER(LEN=*), PARAMETER :: routinen = 'qcschema_env_create'
276
277 CHARACTER(LEN=2) :: atomic_symbol
278 CHARACTER(LEN=default_string_length) :: basis_set_name, method
279 INTEGER :: atomic_number, handle, i, i_glb, iatom, &
280 ikind, nalpha, nao, natoms, nbeta, &
281 nel, nmo, nspins, output_unit
282 LOGICAL :: do_hfx
283 REAL(kind=dp) :: dispersion, mass, one_el_en, two_el_en
284 TYPE(active_space_type), POINTER :: active_space_env
285 TYPE(cp_logger_type), POINTER :: logger
286 TYPE(dft_control_type), POINTER :: dft_control
287 TYPE(gto_basis_set_type), POINTER :: basis_set
288 TYPE(mp2_type), POINTER :: mp2_env
289 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
290 TYPE(qs_energy_type), POINTER :: energy
291 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
292 TYPE(qs_kind_type), DIMENSION(:), POINTER :: kind_set
293 TYPE(qs_ks_env_type), POINTER :: ks_env
294 TYPE(qs_scf_env_type), POINTER :: scf_env
295 TYPE(section_vals_type), POINTER :: hfx_sections, input
296
297 CALL timeset(routinen, handle)
298
299 logger => cp_get_default_logger()
300 output_unit = cp_logger_get_default_io_unit(logger)
301
302 ! reset everything
303 CALL qcschema_env_release(qcschema_env)
304
305 ! collect environment info
306 IF (ASSOCIATED(qs_env)) THEN
307 CALL get_qs_env(qs_env, ks_env=ks_env, energy=energy, &
308 dft_control=dft_control, force=force, &
309 particle_set=particle_set, &
310 scf_env=scf_env, mp2_env=mp2_env, &
311 input=input, qs_kind_set=kind_set, &
312 active_space=active_space_env)
313 ELSE
314 cpabort("QS environment not associated, QCSchema interface quitting")
315 END IF
316
317 ! we need the AS environemnt to get all the SCF data
318 IF (.NOT. ASSOCIATED(active_space_env)) THEN
319 cpabort("Active space environment not associated, QCSchema interface quitting")
320 END IF
321
322 !========================================================================================!
323 ! *** QCSchema provenance ***
324 !========================================================================================!
325
326 qcschema_env%provenance%creator = 'CP2K'
327 qcschema_env%provenance%version = cp2k_version
328 qcschema_env%provenance%routine = routinen
329
330 !========================================================================================!
331 ! *** QCSchema topology ***
332 !========================================================================================!
333
334 qcschema_env%topology%schema_name = 'qcschema'
335 qcschema_env%topology%schema_version = 3
336
337 natoms = SIZE(particle_set)
338
339 ALLOCATE (qcschema_env%topology%geometry(3*natoms))
340 ALLOCATE (qcschema_env%topology%symbols(natoms))
341 ALLOCATE (qcschema_env%topology%atomic_numbers(natoms))
342 ALLOCATE (qcschema_env%topology%masses(natoms))
343
344 DO iatom = 1, natoms
345 ! set the geometry as a flat array
346 qcschema_env%topology%geometry((iatom - 1)*3 + 1:(iatom)*3) = particle_set(iatom)%r(1:3)
347
348 ! set the atomic symbols
349 CALL get_atomic_kind(particle_set(iatom)%atomic_kind, element_symbol=atomic_symbol)
350 qcschema_env%topology%symbols(iatom) = atomic_symbol
351
352 ! set the atomic numbers and masses
353 CALL get_ptable_info(atomic_symbol, number=atomic_number, amass=mass)
354 qcschema_env%topology%atomic_numbers(iatom) = atomic_number
355 qcschema_env%topology%masses(iatom) = mass
356 END DO
357
358 qcschema_env%topology%molecular_charge = dft_control%charge
359 qcschema_env%topology%molecular_multiplicity = dft_control%multiplicity
360
361 !========================================================================================!
362 ! *** QCSchema properties ***
363 !========================================================================================!
364
365 nspins = active_space_env%nspins
366
367 nao = active_space_env%mos_active(1)%nao
368 nmo = active_space_env%nmo_active
369 nel = active_space_env%nelec_active
370
371 IF (nspins == 1) THEN
372 nalpha = active_space_env%nelec_active/2
373 nbeta = nalpha
374 ELSE
375 nalpha = (active_space_env%nelec_active + active_space_env%multiplicity - 1)/2
376 nbeta = (active_space_env%nelec_active - active_space_env%multiplicity + 1)/2
377 END IF
378
379 qcschema_env%properties%calcinfo_natom = natoms
380 qcschema_env%properties%calcinfo_nbasis = nao
381 qcschema_env%properties%calcinfo_nmo = nmo
382 qcschema_env%properties%calcinfo_nalpha = nalpha
383 qcschema_env%properties%calcinfo_nbeta = nbeta
384
385 ! energy results
386 qcschema_env%properties%return_energy = energy%total
387 qcschema_env%properties%scf_total_energy = energy%total
388 ! here we abuse the nuclear repulsion energy to store the inactive energy
389 qcschema_env%properties%nuclear_repulsion_energy = active_space_env%energy_inactive
390 ! SCF info
391 qcschema_env%properties%scf_iterations = scf_env%iter_count
392 ! one-electron energy is the sum of all core terms
393 one_el_en = energy%core_overlap + energy%core_self + energy%core
394 qcschema_env%properties%scf_two_electron_energy = one_el_en
395 ! two-electron energy is the sum of hartree and exact exchange (if there)
396 two_el_en = energy%hartree + energy%ex + energy%hartree_1c
397 qcschema_env%properties%scf_one_electron_energy = two_el_en
398 ! xc energy
399 qcschema_env%properties%scf_xc_energy = &
400 energy%exc + energy%exc_aux_fit + energy%exc1 + energy%exc1_aux_fit
401 ! dispersion energy
402 dispersion = energy%dispersion + energy%gcp
403 qcschema_env%properties%scf_dispersion_correction_energy = dispersion
404
405 ! Some methods of CP2K are not supported by QCSchema, let's warn the user
406 IF (dft_control%smear) cpabort('WARNING: smearing not supported in QCSchema')
407 IF (dft_control%dft_plus_u) cpabort('WARNING: DFT+U not supported in QCSchema')
408 IF (dft_control%do_sccs) cpabort('WARNING: SCCS not supported in QCSchema')
409 IF (qs_env%qmmm) cpabort('WARNING: QM/MM not supported in QCSchema')
410 IF (dft_control%qs_control%mulliken_restraint) THEN
411 cpabort('WARNING: Mulliken restrains not supported in QCSchema')
412 END IF
413 IF (dft_control%qs_control%semi_empirical) THEN
414 cpabort('WARNING: semi_empirical methods not supported in QCSchema')
415 END IF
416 IF (dft_control%qs_control%dftb) cpabort('WARNING: DFTB not supported in QCSchema')
417 IF (dft_control%qs_control%xtb) cpabort('WARNING: xTB not supported in QCSchema')
418
419 ! MP2 info
420 IF (ASSOCIATED(qs_env%mp2_env)) THEN
421 qcschema_env%properties%mp2 = .true.
422 ! this info is computed on the fly, but not stored!
423 ! qcschema_env%properties%mp2_same_spin_correlation_energy
424 ! qcschema_env%properties%mp2_opposite_spin_correlation_energy
425
426 qcschema_env%properties%mp2_correlation_energy = energy%mp2
427 qcschema_env%properties%mp2_total_energy = energy%total
428
429 ! update the scf energy
430 qcschema_env%properties%scf_total_energy = energy%total - energy%mp2
431 END IF
432
433 !========================================================================================!
434 ! *** QCSchema wavefunction ***
435 !========================================================================================!
436
437 IF (nspins == 1) THEN
438 qcschema_env%wavefunction%restricted = .true.
439 ELSE
440 qcschema_env%wavefunction%restricted = .false.
441 END IF
442
443 ! alpha MO energies
444 ALLOCATE (qcschema_env%wavefunction%scf_eigenvalues_a(nmo))
445 DO i = 1, nmo
446 i_glb = active_space_env%active_orbitals(i, 1)
447 qcschema_env%wavefunction%scf_eigenvalues_a(i) = &
448 active_space_env%mos_active(1)%eigenvalues(i_glb)
449 END DO
450
451 ! alpha MO occupations
452 ALLOCATE (qcschema_env%wavefunction%scf_occupations_a(nmo))
453 DO i = 1, nmo
454 i_glb = active_space_env%active_orbitals(i, 1)
455 qcschema_env%wavefunction%scf_occupations_a(i) = &
456 active_space_env%mos_active(1)%occupation_numbers(i_glb)
457 END DO
458
459 ! alpha Fock matrix
460 ALLOCATE (qcschema_env%wavefunction%scf_fock_mo_a(nmo*nmo))
461 CALL subspace_matrix_to_array(active_space_env%fock_sub(1), &
462 qcschema_env%wavefunction%scf_fock_mo_a, &
463 active_space_env%active_orbitals(:, 1), &
464 active_space_env%active_orbitals(:, 1))
465
466 ! alpha density matrix
467 ALLOCATE (qcschema_env%wavefunction%scf_density_mo_a(nmo*nmo))
468 CALL subspace_matrix_to_array(active_space_env%p_active(1), &
469 qcschema_env%wavefunction%scf_density_mo_a, &
470 active_space_env%active_orbitals(:, 1), &
471 active_space_env%active_orbitals(:, 1))
472
473 ! alpha MOs coefficients
474 ALLOCATE (qcschema_env%wavefunction%scf_orbitals_a(nao*nmo))
475 CALL subspace_matrix_to_array(active_space_env%mos_active(1)%mo_coeff, &
476 qcschema_env%wavefunction%scf_orbitals_a, &
477 [(i, i=1, nao)], active_space_env%active_orbitals(:, 1))
478
479 IF (nspins == 2) THEN
480 ! beta MO energies
481 ALLOCATE (qcschema_env%wavefunction%scf_eigenvalues_b(nmo))
482 DO i = 1, nmo
483 i_glb = active_space_env%active_orbitals(i, 2)
484 qcschema_env%wavefunction%scf_eigenvalues_b(i) = &
485 active_space_env%mos_active(2)%eigenvalues(i_glb)
486 END DO
487
488 ! beta MO occupations
489 ALLOCATE (qcschema_env%wavefunction%scf_occupations_b(nmo))
490 DO i = 1, nmo
491 i_glb = active_space_env%active_orbitals(i, 2)
492 qcschema_env%wavefunction%scf_occupations_b(i) = &
493 active_space_env%mos_active(2)%occupation_numbers(i_glb)
494 END DO
495
496 ! beta Fock matrix
497 ALLOCATE (qcschema_env%wavefunction%scf_fock_mo_b(nmo*nmo))
498 CALL subspace_matrix_to_array(active_space_env%fock_sub(2), &
499 qcschema_env%wavefunction%scf_fock_mo_b, &
500 active_space_env%active_orbitals(:, 2), &
501 active_space_env%active_orbitals(:, 2))
502
503 ! beta density matrix
504 ALLOCATE (qcschema_env%wavefunction%scf_density_mo_b(nmo*nmo))
505 CALL subspace_matrix_to_array(active_space_env%p_active(2), &
506 qcschema_env%wavefunction%scf_density_mo_b, &
507 active_space_env%active_orbitals(:, 2), &
508 active_space_env%active_orbitals(:, 2))
509
510 ! beta MOs coefficients
511 ALLOCATE (qcschema_env%wavefunction%scf_orbitals_b(nao*nmo))
512 CALL subspace_matrix_to_array(active_space_env%mos_active(2)%mo_coeff, &
513 qcschema_env%wavefunction%scf_orbitals_b, &
514 [(i, i=1, nao)], active_space_env%active_orbitals(:, 2))
515 END IF
516
517 ! get the alpha-alpha eri
518 ALLOCATE (qcschema_env%wavefunction%scf_eri_mo_aa(nmo**4))
519 CALL eri_to_array(active_space_env%eri, qcschema_env%wavefunction%scf_eri_mo_aa, &
520 active_space_env%active_orbitals, 1, 1)
521
522 IF (nspins == 2) THEN
523 ! get the alpha-beta eri
524 ALLOCATE (qcschema_env%wavefunction%scf_eri_mo_ab(nmo**4))
525 CALL eri_to_array(active_space_env%eri, qcschema_env%wavefunction%scf_eri_mo_ab, &
526 active_space_env%active_orbitals, 1, 2)
527
528 ! get the beta-beta eri
529 ALLOCATE (qcschema_env%wavefunction%scf_eri_mo_bb(nmo**4))
530 CALL eri_to_array(active_space_env%eri, qcschema_env%wavefunction%scf_eri_mo_bb, &
531 active_space_env%active_orbitals, 2, 2)
532 END IF
533
534 !========================================================================================!
535 ! *** QCSchema model ***
536 !========================================================================================!
537
538 DO iatom = 1, natoms
539 CALL get_atomic_kind(particle_set(iatom)%atomic_kind, kind_number=ikind)
540 CALL get_qs_kind(kind_set(ikind), basis_set=basis_set)
541
542 basis_set_name = basis_set%name
543
544 ! make sure that we do not run a mixed basis set
545 IF (iatom > 1) THEN
546 cpassert(basis_set_name == basis_set%name)
547 END IF
548 END DO
549 qcschema_env%wavefunction%basis_set%name = basis_set_name
550
551 ! figure out which method was used for the calculation
552 IF (dft_control%uks) THEN
553 method = 'U'
554 ELSE IF (dft_control%roks) THEN
555 method = 'RO'
556 ELSE
557 method = 'R'
558 END IF
559
560 hfx_sections => section_vals_get_subs_vals(input, "DFT%XC%HF")
561 CALL section_vals_get(hfx_sections, explicit=do_hfx)
562
563 IF (do_hfx) THEN
564 method = trim(method)//'HF'
565 ELSE IF (qcschema_env%properties%mp2) THEN
566 method = trim(method)//'MP2'
567 ELSE
568 method = trim(method)//'KS'
569 END IF
570
571 qcschema_env%wavefunction%method = trim(method)
572
573 !========================================================================================!
574 ! *** QCSchema root ***
575 !========================================================================================!
576
577 ! driver
578 IF (ASSOCIATED(force)) THEN
579 qcschema_env%driver = 'gradient'
580 ELSE
581 qcschema_env%driver = 'energy'
582 END IF
583
584 ! success
585 ! TODO: how to check if the calculation was succesful?
586 qcschema_env%success = .true.
587
588 ! return result
589 IF (qcschema_env%success) THEN
590 IF (qcschema_env%driver == 'energy') THEN
591 ALLOCATE (qcschema_env%return_result(1))
592 qcschema_env%return_result(1) = energy%total
593 ELSE
594 ALLOCATE (qcschema_env%return_result(3*SIZE(particle_set)))
595 ! TODO: populate with forces!!
596 qcschema_env%return_result = 0.0_dp
597 END IF
598 ELSE
599 cpabort("The calculation to build the AS is unsuccessful")
600 END IF
601
602 CALL timestop(handle)
603
604 END SUBROUTINE qcschema_env_create
605
606! **************************************************************************************************
607!> \brief Releases the allocated memory of a qcschema environment
608!> \param qcschema_env the qcschema environment to release
609! **************************************************************************************************
610 SUBROUTINE qcschema_env_release(qcschema_env)
611 TYPE(qcschema_type), INTENT(INOUT) :: qcschema_env
612
613 IF (ALLOCATED(qcschema_env%return_result)) THEN
614 DEALLOCATE (qcschema_env%return_result)
615 END IF
616
617 IF (ALLOCATED(qcschema_env%topology%atomic_numbers)) THEN
618 DEALLOCATE (qcschema_env%topology%atomic_numbers)
619 END IF
620
621 IF (ALLOCATED(qcschema_env%topology%masses)) THEN
622 DEALLOCATE (qcschema_env%topology%masses)
623 END IF
624
625 IF (ALLOCATED(qcschema_env%topology%geometry)) THEN
626 DEALLOCATE (qcschema_env%topology%geometry)
627 END IF
628
629 IF (ALLOCATED(qcschema_env%topology%symbols)) THEN
630 DEALLOCATE (qcschema_env%topology%symbols)
631 END IF
632
633 IF (ALLOCATED(qcschema_env%wavefunction%scf_density_mo_a)) THEN
634 DEALLOCATE (qcschema_env%wavefunction%scf_density_mo_a)
635 END IF
636
637 IF (ALLOCATED(qcschema_env%wavefunction%scf_density_mo_b)) THEN
638 DEALLOCATE (qcschema_env%wavefunction%scf_density_mo_b)
639 END IF
640
641 IF (ALLOCATED(qcschema_env%wavefunction%scf_fock_mo_a)) THEN
642 DEALLOCATE (qcschema_env%wavefunction%scf_fock_mo_a)
643 END IF
644
645 IF (ALLOCATED(qcschema_env%wavefunction%scf_fock_mo_b)) THEN
646 DEALLOCATE (qcschema_env%wavefunction%scf_fock_mo_b)
647 END IF
648
649 IF (ALLOCATED(qcschema_env%wavefunction%scf_orbitals_a)) THEN
650 DEALLOCATE (qcschema_env%wavefunction%scf_orbitals_a)
651 END IF
652
653 IF (ALLOCATED(qcschema_env%wavefunction%scf_orbitals_b)) THEN
654 DEALLOCATE (qcschema_env%wavefunction%scf_orbitals_b)
655 END IF
656
657 IF (ALLOCATED(qcschema_env%wavefunction%scf_eigenvalues_a)) THEN
658 DEALLOCATE (qcschema_env%wavefunction%scf_eigenvalues_a)
659 END IF
660
661 IF (ALLOCATED(qcschema_env%wavefunction%scf_eigenvalues_b)) THEN
662 DEALLOCATE (qcschema_env%wavefunction%scf_eigenvalues_b)
663 END IF
664
665 IF (ALLOCATED(qcschema_env%wavefunction%scf_occupations_a)) THEN
666 DEALLOCATE (qcschema_env%wavefunction%scf_occupations_a)
667 END IF
668
669 IF (ALLOCATED(qcschema_env%wavefunction%scf_occupations_b)) THEN
670 DEALLOCATE (qcschema_env%wavefunction%scf_occupations_b)
671 END IF
672
673 IF (ALLOCATED(qcschema_env%wavefunction%scf_eri)) THEN
674 DEALLOCATE (qcschema_env%wavefunction%scf_eri)
675 END IF
676
677 IF (ALLOCATED(qcschema_env%wavefunction%scf_eri_mo_aa)) THEN
678 DEALLOCATE (qcschema_env%wavefunction%scf_eri_mo_aa)
679 END IF
680
681 IF (ALLOCATED(qcschema_env%wavefunction%scf_eri_mo_bb)) THEN
682 DEALLOCATE (qcschema_env%wavefunction%scf_eri_mo_bb)
683 END IF
684
685 IF (ALLOCATED(qcschema_env%wavefunction%scf_eri_mo_ab)) THEN
686 DEALLOCATE (qcschema_env%wavefunction%scf_eri_mo_ab)
687 END IF
688
689 IF (ALLOCATED(qcschema_env%wavefunction%localized_orbitals_a)) THEN
690 DEALLOCATE (qcschema_env%wavefunction%localized_orbitals_a)
691 END IF
692
693 IF (ALLOCATED(qcschema_env%wavefunction%localized_orbitals_b)) THEN
694 DEALLOCATE (qcschema_env%wavefunction%localized_orbitals_b)
695 END IF
696
697 IF (ALLOCATED(qcschema_env%wavefunction%localized_fock_a)) THEN
698 DEALLOCATE (qcschema_env%wavefunction%localized_fock_a)
699 END IF
700
701 IF (ALLOCATED(qcschema_env%wavefunction%localized_fock_b)) THEN
702 DEALLOCATE (qcschema_env%wavefunction%localized_fock_b)
703 END IF
704
705 END SUBROUTINE qcschema_env_release
706
707! **************************************************************************************************
708!> \brief Updates the Fock matrix and the inactive energy in a qcschema object
709!> \param qcschema_env the qcschema environment
710!> \param active_space_env the active space environment with the updated data
711! **************************************************************************************************
712 SUBROUTINE qcschema_update_fock(qcschema_env, active_space_env)
713 TYPE(qcschema_type), INTENT(INOUT) :: qcschema_env
714 TYPE(active_space_type), INTENT(IN), POINTER :: active_space_env
715
716 ! alpha Fock matrix
717 CALL subspace_matrix_to_array(active_space_env%fock_sub(1), &
718 qcschema_env%wavefunction%scf_fock_mo_a, &
719 active_space_env%active_orbitals(:, 1), &
720 active_space_env%active_orbitals(:, 1))
721
722 ! beta Fock matrix
723 IF (active_space_env%nspins == 2) THEN
724 CALL subspace_matrix_to_array(active_space_env%fock_sub(2), &
725 qcschema_env%wavefunction%scf_fock_mo_b, &
726 active_space_env%active_orbitals(:, 2), &
727 active_space_env%active_orbitals(:, 2))
728 END IF
729
730 ! update inactive energy
731 qcschema_env%properties%nuclear_repulsion_energy = active_space_env%energy_inactive
732
733 END SUBROUTINE qcschema_update_fock
734
735! **************************************************************************************************
736!> \brief Writes a qcschema object to an hdf5 file
737!> \param qcschema_env the qcschema environment to write to file
738!> \param filename ...
739! **************************************************************************************************
740 SUBROUTINE qcschema_to_hdf5(qcschema_env, filename)
741 TYPE(qcschema_type), INTENT(IN) :: qcschema_env
742 CHARACTER(LEN=default_path_length), INTENT(IN) :: filename
743#ifndef __HDF5
744 cpabort("CP2K was compiled without the HDF5 library")
745 mark_used(filename)
746 mark_used(qcschema_env)
747#else
748 INTEGER :: output_unit
749 INTEGER(KIND=hdf5_id) :: file_id, group_id
750 INTEGER(KIND=int_8) :: nresult
751 TYPE(cp_logger_type), POINTER :: logger
752
753 logger => cp_get_default_logger()
754 output_unit = cp_logger_get_default_io_unit(logger)
755
756 ! initialize HDF5 Fortran API
757 CALL h5open()
758
759 ! create qcschema hdf5 file
760 ! filename = TRIM(logger%iter_info%project_name) // 'hdf5'
761 CALL h5fcreate(trim(filename), file_id)
762
763 ! !===========================================================================!
764 ! *** Root group ***
765 ! !===========================================================================!
766 ! driver
767 CALL h5awrite_fixlen_string(file_id, 'driver', trim(qcschema_env%driver))
768 ! return result
769 nresult = SIZE(qcschema_env%return_result)
770 IF (SIZE(qcschema_env%return_result) == 1) THEN
771 CALL h5awrite_double_scalar(file_id, 'return_result', qcschema_env%return_result(1))
772 ELSE
773 CALL h5awrite_double_simple(file_id, 'return_result', qcschema_env%return_result)
774 END IF
775 ! schema name
776 CALL h5awrite_fixlen_string(file_id, 'schema_name', trim(qcschema_env%topology%schema_name))
777 ! schema version
778 CALL h5awrite_integer_scalar(file_id, 'schema_version', qcschema_env%topology%schema_version)
779 ! success
780 CALL h5awrite_boolean(file_id, 'success', qcschema_env%success)
781
782 !========================================================================================!
783 ! *** QCSchema provenance ***
784 !========================================================================================!
785 ! create the provenance group
786 CALL h5gcreate(file_id, 'provenance', group_id)
787 ! populate provenance
788 CALL h5awrite_fixlen_string(group_id, 'creator', trim(qcschema_env%provenance%creator))
789 CALL h5awrite_fixlen_string(group_id, 'routine', trim(qcschema_env%provenance%routine))
790 CALL h5awrite_fixlen_string(group_id, 'version', trim(qcschema_env%provenance%version))
791 ! close provenance group
792 CALL h5gclose(group_id)
793
794 !========================================================================================!
795 ! *** QCSchema molecule ***
796 !========================================================================================!
797 ! create the molecule group
798 CALL h5gcreate(file_id, 'molecule', group_id)
799 ! populate molecule
800 CALL h5awrite_double_simple(group_id, 'geometry', qcschema_env%topology%geometry)
801 CALL h5awrite_integer_simple(group_id, 'atomic_numbers', qcschema_env%topology%atomic_numbers)
802 CALL h5awrite_double_simple(group_id, 'masses', qcschema_env%topology%masses)
803 CALL h5awrite_integer_scalar(group_id, 'molecular_charge', qcschema_env%topology%molecular_charge)
804 CALL h5awrite_integer_scalar(group_id, 'molecular_multiplicity', qcschema_env%topology%molecular_multiplicity)
805 CALL h5awrite_string_simple(group_id, 'symbols', qcschema_env%topology%symbols)
806
807 CALL h5awrite_fixlen_string(group_id, 'schema_name', 'qcschema_molecule')
808 CALL h5awrite_integer_scalar(group_id, 'schema_version', 2)
809 ! close molecule group
810 CALL h5gclose(group_id)
811
812 !========================================================================================!
813 ! *** QCSchema properties ***
814 !========================================================================================!
815 ! create the properties group
816 CALL h5gcreate(file_id, 'properties', group_id)
817 ! populate properties
818 CALL h5awrite_integer_scalar(group_id, 'calcinfo_natom', qcschema_env%properties%calcinfo_natom)
819 CALL h5awrite_integer_scalar(group_id, 'calcinfo_nbasis', qcschema_env%properties%calcinfo_nbasis)
820 CALL h5awrite_integer_scalar(group_id, 'calcinfo_nmo', qcschema_env%properties%calcinfo_nmo)
821 CALL h5awrite_integer_scalar(group_id, 'calcinfo_nalpha', qcschema_env%properties%calcinfo_nalpha)
822 CALL h5awrite_integer_scalar(group_id, 'calcinfo_nbeta', qcschema_env%properties%calcinfo_nbeta)
823
824 ! CALL h5dwrite_double_simple(group_id, 'scf_dipole_moment', &
825 ! qcschema_env%properties%scf_dipole_moment)
826
827 ! energies, scf, mp2, ...
828 CALL h5awrite_double_scalar(group_id, 'return_energy', qcschema_env%properties%return_energy)
829 CALL h5awrite_double_scalar(group_id, 'scf_total_energy', qcschema_env%properties%scf_total_energy)
830 CALL h5awrite_double_scalar(group_id, 'nuclear_repulsion_energy', &
831 qcschema_env%properties%nuclear_repulsion_energy)
832
833 IF (qcschema_env%properties%scf_iterations /= 0) THEN
834 CALL h5awrite_integer_scalar(group_id, 'scf_iterations', qcschema_env%properties%scf_iterations)
835 END IF
836
837 IF (qcschema_env%properties%scf_one_electron_energy /= 0.0_dp) THEN
838 CALL h5awrite_double_scalar(group_id, 'scf_one_electron_energy', &
839 qcschema_env%properties%scf_one_electron_energy)
840 END IF
841
842 IF (qcschema_env%properties%scf_two_electron_energy /= 0.0_dp) THEN
843 CALL h5awrite_double_scalar(group_id, 'scf_two_electron_energy', &
844 qcschema_env%properties%scf_two_electron_energy)
845 END IF
846
847 IF (qcschema_env%properties%scf_xc_energy /= 0.0_dp) THEN
848 CALL h5awrite_double_scalar(group_id, 'scf_xc_energy', &
849 qcschema_env%properties%scf_xc_energy)
850 END IF
851
852 IF (qcschema_env%properties%scf_dispersion_correction_energy /= 0.0_dp) THEN
853 CALL h5awrite_double_scalar(group_id, 'scf_dispersion_correction_energy', &
854 qcschema_env%properties%scf_dispersion_correction_energy)
855 END IF
856
857 IF (qcschema_env%properties%mp2) THEN
858 CALL h5awrite_double_scalar(group_id, 'mp2_correlation_energy', &
859 qcschema_env%properties%mp2_correlation_energy)
860 END IF
861
862 ! close properties group
863 CALL h5gclose(group_id)
864
865 !========================================================================================!
866 ! *** QCSchema wavefunction ***
867 !========================================================================================!
868 ! create the wavefunction group
869 CALL h5gcreate(file_id, 'wavefunction', group_id)
870
871 CALL h5awrite_fixlen_string(group_id, 'basis', trim(qcschema_env%wavefunction%basis_set%name))
872
873 CALL h5dwrite_double_simple(group_id, 'scf_orbitals_a', &
874 qcschema_env%wavefunction%scf_orbitals_a)
875
876 CALL h5dwrite_double_simple(group_id, 'scf_eigenvalues_a', &
877 qcschema_env%wavefunction%scf_eigenvalues_a)
878
879 CALL h5dwrite_double_simple(group_id, 'scf_occupations_a', &
880 qcschema_env%wavefunction%scf_occupations_a)
881
882 CALL h5dwrite_double_simple(group_id, 'scf_fock_mo_a', &
883 qcschema_env%wavefunction%scf_fock_mo_a)
884
885 CALL h5dwrite_double_simple(group_id, 'scf_density_mo_a', &
886 qcschema_env%wavefunction%scf_density_mo_a)
887
888 CALL h5dwrite_double_simple(group_id, 'scf_eri_mo_aa', &
889 qcschema_env%wavefunction%scf_eri_mo_aa)
890
891 IF (.NOT. qcschema_env%wavefunction%restricted) THEN
892 CALL h5dwrite_double_simple(group_id, 'scf_orbitals_b', &
893 qcschema_env%wavefunction%scf_orbitals_b)
894
895 CALL h5dwrite_double_simple(group_id, 'scf_eigenvalues_b', &
896 qcschema_env%wavefunction%scf_eigenvalues_b)
897
898 CALL h5dwrite_double_simple(group_id, 'scf_occupations_b', &
899 qcschema_env%wavefunction%scf_occupations_b)
900
901 CALL h5dwrite_double_simple(group_id, 'scf_fock_mo_b', &
902 qcschema_env%wavefunction%scf_fock_mo_b)
903
904 CALL h5dwrite_double_simple(group_id, 'scf_density_mo_b', &
905 qcschema_env%wavefunction%scf_density_mo_b)
906
907 CALL h5dwrite_double_simple(group_id, 'scf_eri_mo_bb', &
908 qcschema_env%wavefunction%scf_eri_mo_bb)
909
910 CALL h5dwrite_double_simple(group_id, 'scf_eri_mo_ba', &
911 qcschema_env%wavefunction%scf_eri_mo_ab)
912
913 END IF
914
915 ! close wavefunction group
916 CALL h5gclose(group_id)
917
918 !========================================================================================!
919 ! *** QCSchema model ***
920 !========================================================================================!
921 ! create the model group
922 CALL h5gcreate(file_id, 'model', group_id)
923 CALL h5awrite_fixlen_string(group_id, 'basis', trim(qcschema_env%wavefunction%basis_set%name))
924 CALL h5awrite_fixlen_string(group_id, 'method', trim(qcschema_env%wavefunction%method))
925 ! close model group
926 CALL h5gclose(group_id)
927
928 ! create the keywords group
929 CALL h5gcreate(file_id, 'keywords', group_id)
930 ! close keywords group
931 CALL h5gclose(group_id)
932
933 CALL h5fclose(file_id)
934 CALL h5close()
935#endif
936
937 END SUBROUTINE qcschema_to_hdf5
938
939#ifdef __HDF5
940! **************************************************************************************************
941!> \brief Reads the electron density from a qcschema hdf5 file
942!> \param filename the path to the qcschema hdf5 file
943!> \param qcschema_env the qcschema environment onto which it writes the density
944! **************************************************************************************************
945 SUBROUTINE read_pmat_from_hdf5(filename, qcschema_env)
946 CHARACTER(LEN=default_path_length), INTENT(IN) :: filename
947 TYPE(qcschema_type), INTENT(INOUT) :: qcschema_env
948
949 INTEGER :: nmo
950 INTEGER(KIND=hdf5_id) :: file_id, group_id
951
952 ! initialize HDF5 Fortran API
953 CALL h5open()
954
955 ! open qcschema hdf5 file
956 CALL h5fopen(trim(filename), file_id)
957
958 ! open the wave function group
959 CALL h5gopen(file_id, 'wavefunction', group_id)
960
961 ! allocate the space for the array containing the density
962 nmo = qcschema_env%properties%calcinfo_nmo
963 IF (.NOT. ALLOCATED(qcschema_env%wavefunction%scf_density_mo_a)) THEN
964 ALLOCATE (qcschema_env%wavefunction%scf_density_mo_a(nmo*nmo))
965 END IF
966
967 ! read the alpha density
968 CALL h5dread_double_simple(group_id, 'scf_density_mo_a', qcschema_env%wavefunction%scf_density_mo_a)
969
970 IF (.NOT. qcschema_env%wavefunction%restricted) THEN
971 IF (.NOT. ALLOCATED(qcschema_env%wavefunction%scf_density_mo_b)) THEN
972 ALLOCATE (qcschema_env%wavefunction%scf_density_mo_b(nmo*nmo))
973 END IF
974 ! read the beta density
975 CALL h5dread_double_simple(group_id, 'scf_density_mo_b', qcschema_env%wavefunction%scf_density_mo_b)
976 END IF
977
978 ! close everything
979 CALL h5gclose(group_id)
980 CALL h5fclose(file_id)
981 CALL h5close()
982
983 END SUBROUTINE read_pmat_from_hdf5
984
985! **************************************************************************************************
986!> \brief Reads the return energy from a qcschema hdf5 file
987!> \param filename the path to the qcschema hdf5 file
988!> \param qcschema_env the qcschema environment onto which it writes the energy
989! **************************************************************************************************
990 SUBROUTINE read_return_energy_from_hdf5(filename, qcschema_env)
991 CHARACTER(LEN=default_path_length), INTENT(IN) :: filename
992 TYPE(qcschema_type), INTENT(INOUT) :: qcschema_env
993
994 INTEGER(KIND=hdf5_id) :: file_id, group_id
995
996 ! initialize HDF5 Fortran API
997 CALL h5open()
998
999 ! open qcschema hdf5 file
1000 CALL h5fopen(trim(filename), file_id)
1001
1002 ! open the properties group
1003 CALL h5gopen(file_id, 'properties', group_id)
1004
1005 ! read the return energy
1006 CALL h5aread_double_scalar(group_id, 'return_energy', qcschema_env%properties%return_energy)
1007
1008 ! close everything
1009 CALL h5gclose(group_id)
1010 CALL h5fclose(file_id)
1011 CALL h5close()
1012
1013 END SUBROUTINE read_return_energy_from_hdf5
1014
1015! **************************************************************************************************
1016!> \brief Reads the active space energy from a qcschema file and stores it in active_space_env
1017!> \param active_space_env ...
1018!> \param qcschema_env ...
1019!> \author Stefano Battaglia
1020! **************************************************************************************************
1021 SUBROUTINE read_active_energy_from_hdf5(active_space_env, qcschema_env)
1022 TYPE(active_space_type), POINTER :: active_space_env
1023 TYPE(qcschema_type) :: qcschema_env
1024
1025 CHARACTER(LEN=default_path_length) :: qcschema_filename
1026
1027 ! File name
1028 qcschema_filename = active_space_env%qcschema_filename
1029 ! read active space energy
1030 CALL read_return_energy_from_hdf5(qcschema_filename, qcschema_env)
1031
1032 active_space_env%energy_active = qcschema_env%properties%return_energy
1033 active_space_env%energy_total = active_space_env%energy_inactive + active_space_env%energy_active
1034
1035 END SUBROUTINE read_active_energy_from_hdf5
1036#endif
1037
1038END MODULE qcschema
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
some minimal info about CP2K, including its version and license
Definition cp2k_info.F:22
character(len= *), parameter, public cp2k_version
Definition cp2k_info.F:49
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
A wrapper around the HDF5 Fortran API.
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
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public int_8
Definition kinds.F:54
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
integer, parameter, public default_path_length
Definition kinds.F:58
Types needed for MP2 calculations.
Definition mp2_types.F:14
Define the data structure for the particle information.
Periodic Table related data definitions.
subroutine, public get_ptable_info(symbol, number, amass, ielement, covalent_radius, metallic_radius, vdw_radius, found)
Pass information about the kind given the element symbol.
The module to read/write QCSchema HDF5 files for interfacing CP2K with other programs.
Definition qcschema.F:14
subroutine, public qcschema_env_release(qcschema_env)
Releases the allocated memory of a qcschema environment.
Definition qcschema.F:611
subroutine, public qcschema_env_create(qcschema_env, qs_env)
Create and initialize a qcschema object from a quickstep environment.
Definition qcschema.F:272
subroutine, public qcschema_to_hdf5(qcschema_env, filename)
Writes a qcschema object to an hdf5 file.
Definition qcschema.F:741
The types needed for the calculation of active space Hamiltonians.
Contains utility routines for the active space module.
subroutine, public eri_to_array(eri_env, array, active_orbitals, spin1, spin2)
Copy the eri tensor for spins isp1 and isp2 to a standard 1D Fortran array.
subroutine, public subspace_matrix_to_array(source_matrix, target_array, row_index, col_index)
Copy a (square portion) of a cp_fm_type matrix to a standard 1D Fortran array.
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, mimic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_vhxc, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, hund_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, proj_shell_charge, lr_atom, do_mtlr, u_j_loop, ao_coef, init_u_ramping_each_scf, reltmat, ghost, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
module that contains the definitions of the scf types
Control for reading in different topologies and coordinates.
Definition topology.F:13
type of a logger, at the moment it contains just a print level starting at which level it should be l...
The full QCSchema output type. For more information refer to: https://molssi-qc-schema....
Definition qcschema.F:253
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...