(git:374b731)
Loading...
Searching...
No Matches
mscfg_methods.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!> \brief Subroutines to perform calculations on molecules from a bigger
10!> system. Useful to generate a high-quality MO guess for systems
11!> of many molecules with complex electronic structure, to bootstrap
12!> ALMO simulations, etc.
13!> \par History
14!> 10.2014 Rustam Z Khaliullin
15!> 09.2018 ALMO smearing support and ALMO diag+molecular_guess patch [Ruben Staub]
16!> \author Rustam Z Khaliullin
17! **************************************************************************************************
21 USE cell_types, ONLY: cell_type
30 USE dbcsr_api, ONLY: dbcsr_copy,&
31 dbcsr_create,&
32 dbcsr_type_no_symmetry
38 do_qs,&
52 USE qs_energy, ONLY: qs_energies
54 USE qs_environment, ONLY: qs_init
59 USE qs_mo_types, ONLY: get_mo_set,&
61#include "./base/base_uses.f90"
62
63 IMPLICIT NONE
64 PRIVATE
65
66 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'mscfg_methods'
67
69
70CONTAINS
71
72! **************************************************************************************************
73!> \brief Prepare data for calculations on isolated molecules.
74!> \param globenv ...
75!> \param force_env ...
76!> \par History
77!> 10.2014 created [Rustam Z Khaliullin]
78!> \author Rustam Z Khaliullin
79! **************************************************************************************************
80 SUBROUTINE loop_over_molecules(globenv, force_env)
81
82 TYPE(global_environment_type), POINTER :: globenv
83 TYPE(force_env_type), POINTER :: force_env
84
85 INTEGER :: nmols
86 INTEGER, ALLOCATABLE, DIMENSION(:) :: charge_of_frag, first_atom_of_frag, &
87 last_atom_of_frag, multip_of_frag
88 TYPE(molecule_type), DIMENSION(:), POINTER :: molecule_set
89 TYPE(qs_environment_type), POINTER :: qs_env
90
91 CALL force_env_get(force_env, qs_env=qs_env)
92 cpassert(ASSOCIATED(qs_env))
93 CALL get_qs_env(qs_env, &
94 molecule_set=molecule_set)
95
96 nmols = SIZE(molecule_set)
97
98 ALLOCATE (first_atom_of_frag(nmols))
99 ALLOCATE (last_atom_of_frag(nmols))
100 ALLOCATE (charge_of_frag(nmols))
101 ALLOCATE (multip_of_frag(nmols))
102
103 CALL get_molecule_set_info(molecule_set, &
104 mol_to_first_atom=first_atom_of_frag, &
105 mol_to_last_atom=last_atom_of_frag, &
106 mol_to_charge=charge_of_frag, &
107 mol_to_multiplicity=multip_of_frag)
108
109 CALL calcs_on_isolated_molecules(force_env, globenv, nmols, &
110 first_atom_of_frag, last_atom_of_frag, charge_of_frag, multip_of_frag)
111
112 DEALLOCATE (first_atom_of_frag)
113 DEALLOCATE (last_atom_of_frag)
114 DEALLOCATE (charge_of_frag)
115 DEALLOCATE (multip_of_frag)
116
117 END SUBROUTINE loop_over_molecules
118
119! **************************************************************************************************
120!> \brief Run calculations on isolated molecules. The ideas for setting up
121!> the calculations are borrowed from BSSE files
122!> \param force_env ...
123!> \param globenv ...
124!> \param nfrags ...
125!> \param first_atom_of_frag ...
126!> \param last_atom_of_frag ...
127!> \param charge_of_frag ...
128!> \param multip_of_frag ...
129!> \par History
130!> 10.2014 created
131!> 09.2018 ALMO smearing support, and ALMO diag+molecular_guess patch [Ruben Staub]
132!> \author Rustam Z Khaliullin
133! **************************************************************************************************
134 SUBROUTINE calcs_on_isolated_molecules(force_env, globenv, nfrags, &
135 first_atom_of_frag, last_atom_of_frag, charge_of_frag, multip_of_frag)
136
137 TYPE(force_env_type), POINTER :: force_env
138 TYPE(global_environment_type), POINTER :: globenv
139 INTEGER, INTENT(IN) :: nfrags
140 INTEGER, DIMENSION(:), INTENT(IN) :: first_atom_of_frag, last_atom_of_frag, &
141 charge_of_frag, multip_of_frag
142
143 CHARACTER(LEN=*), PARAMETER :: routinen = 'calcs_on_isolated_molecules'
144
145 CHARACTER(LEN=default_string_length) :: name
146 CHARACTER(LEN=default_string_length), &
147 DIMENSION(:), POINTER :: atom_type
148 INTEGER :: first_atom, force_method, global_charge, global_multpl, handle, i, ifrag, imo, &
149 isize, j, k, last_atom, my_targ, nb_eigenval_stored, nmo, nmo_of_frag, nmosets_of_frag, &
150 tot_added_mos, tot_isize
151 INTEGER, DIMENSION(:), POINTER :: atom_index, atom_list
152 LOGICAL :: global_almo_scf_keyword, smear_almo_scf
153 TYPE(almo_scf_env_type), POINTER :: almo_scf_env
154 TYPE(cell_type), POINTER :: cell
155 TYPE(cp_subsys_type), POINTER :: subsys, subsys_loc
156 TYPE(mo_set_type), DIMENSION(:), POINTER :: mos, mos_of_frag
157 TYPE(molecular_scf_guess_env_type), POINTER :: mscfg_env
158 TYPE(mp_para_env_type), POINTER :: para_env
159 TYPE(particle_list_type), POINTER :: particles
160 TYPE(qs_energy_type), POINTER :: qs_energy
161 TYPE(qs_environment_type), POINTER :: qs_env, qs_env_loc
162 TYPE(section_vals_type), POINTER :: dft_section, force_env_section, &
163 qs_section, root_section, scf_section, &
164 subsys_section
165
166 CALL timeset(routinen, handle)
167
168 NULLIFY (subsys_loc, subsys, particles, para_env, cell, atom_index, atom_type, &
169 force_env_section, qs_env_loc, mscfg_env, qs_env, qs_energy)
170 CALL force_env_get(force_env, force_env_section=force_env_section, &
171 qs_env=qs_env)
172 CALL section_vals_val_get(force_env_section, "METHOD", i_val=force_method)
173 cpassert(force_method .EQ. do_qs)
174 root_section => force_env%root_section
175 subsys_section => section_vals_get_subs_vals(force_env_section, "SUBSYS")
176 dft_section => section_vals_get_subs_vals(force_env_section, "DFT")
177 !
178 ! Save several global settings to restore them after the loop:
179 ! charge, multiplicity, ALMO flag
180 !
181 CALL section_vals_val_get(dft_section, "CHARGE", i_val=global_charge)
182 CALL section_vals_val_get(dft_section, "MULTIPLICITY", i_val=global_multpl)
183 qs_section => section_vals_get_subs_vals(dft_section, "QS")
184 CALL section_vals_val_get(qs_section, "ALMO_SCF", l_val=global_almo_scf_keyword)
185 !
186 ! Get access to critical data before the loop
187 !
188 CALL force_env_get(force_env=force_env, subsys=subsys, para_env=para_env, &
189 cell=cell)
190 CALL cp_subsys_get(subsys, particles=particles)
191 CALL get_qs_env(qs_env, mscfg_env=mscfg_env, almo_scf_env=almo_scf_env)
192 cpassert(ASSOCIATED(mscfg_env))
193 IF (global_almo_scf_keyword) THEN !! Check if smearing is on, and retrieve smearing parameters accordingly
194 smear_almo_scf = qs_env%scf_control%smear%do_smear
195 IF (smear_almo_scf) THEN
196 scf_section => section_vals_get_subs_vals(dft_section, "SCF")
197 CALL section_vals_val_get(scf_section, "added_mos", i_val=tot_added_mos) !! Get total number of added MOs
198 tot_isize = last_atom_of_frag(nfrags) - first_atom_of_frag(1) + 1 !! Get total number of atoms (assume consecutive atoms)
199 !! Check that number of added MOs matches the number of atoms
200 !! (to ensure compatibility, since each fragment will be computed with such parameters)
201 IF (tot_isize .NE. tot_added_mos) THEN
202 cpabort("ALMO smearing currently requires ADDED_MOS == total number of atoms")
203 END IF
204 !! Get total number of MOs
205 CALL get_qs_env(qs_env, mos=mos)
206 IF (SIZE(mos) .GT. 1) cpabort("Unrestricted ALMO methods are NYI") !! Unrestricted ALMO is not implemented yet
207 CALL get_mo_set(mo_set=mos(1), nmo=nmo)
208 !! Initialize storage of MO energies for ALMO smearing
209 cpassert(ASSOCIATED(almo_scf_env))
210 ALLOCATE (almo_scf_env%mo_energies(nmo, SIZE(mos)))
211 ALLOCATE (almo_scf_env%kTS(SIZE(mos)))
212 nb_eigenval_stored = 0 !! Keep track of how many eigenvalues were stored in mo_energies
213 END IF
214 ELSE
215 smear_almo_scf = .false.
216 END IF
217 !
218 ! These flags determine the options of molecular runs (e.g. cell size)
219 !
220 !!!LATER is_fast_dirty = mscfg_env%is_fast_dirty - shrink the cell
221 !!!LATER is_crystal = mscfg_env%is_crystal - remove periodicity
222 !
223 ! Prepare storage for the results
224 ! Until molecular_scf_guess_env is destroyed it will keep
225 ! the results of fragment calculations
226 !
227 CALL molecular_scf_guess_env_init(mscfg_env, nfrags)
228
229 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
230 !
231 ! Start the loop over molecules
232 !
233 ! Here is the list of modifications necessary to run isolated molecules:
234 ! * Atom list of a subsystem and their names
235 ! * Charge and multiplicity of a subsystem
236 ! * ALMO SCF flag off (unless several levels of recursion is desired)
237 ! * Smaller cell can be provided if a fast-and-dirty approach is ok
238 ! * Set ADDED_MOS to number of atoms in the fragment, if smearing requested (VASP default)
239 ! * ... add your own and explain it here ...
240 !
241 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
242 DO ifrag = 1, nfrags
243 !
244 ! Turn ALMO SCF flag off
245 !
246 CALL section_vals_val_set(qs_section, "ALMO_SCF", l_val=.false.)
247 !
248 ! Setup the charge and multiplicity of the molecule
249 !
250 CALL section_vals_val_set(dft_section, "CHARGE", i_val=charge_of_frag(ifrag))
251 CALL section_vals_val_set(dft_section, "MULTIPLICITY", i_val=multip_of_frag(ifrag))
252 !
253 ! Create a list of atoms in the current molecule
254 !
255 ! Assume that atoms arranged consecutively (in ALMO SCF it is always the case)
256 ! It is important to have a linear scaling procedure here
257 first_atom = first_atom_of_frag(ifrag)
258 last_atom = last_atom_of_frag(ifrag)
259 isize = last_atom - first_atom + 1
260 ALLOCATE (atom_index(isize))
261 atom_index(1:isize) = (/(i, i=first_atom, last_atom)/)
262 !
263 ! Get atom type names
264 !
265 ALLOCATE (atom_type(isize))
266 DO j = 1, isize
267 my_targ = atom_index(j)
268 DO k = 1, SIZE(particles%els)
269 CALL get_atomic_kind(particles%els(k)%atomic_kind, atom_list=atom_list, name=name)
270 IF (any(atom_list == my_targ)) EXIT
271 END DO
272 atom_type(j) = name
273 END DO
274 !
275 ! If smearing requested, setup ADDED_MOS correctly for each fragment (i.e. number of atoms in fragment)
276 !
277 IF (smear_almo_scf) THEN
278 CALL section_vals_val_set(scf_section, "added_mos", i_val=isize)
279 END IF
280 !
281 ! Create the environment of a subsystem
282 !
283 CALL create_small_subsys(subsys_loc, big_subsys=subsys, &
284 small_para_env=para_env, small_cell=cell, sub_atom_index=atom_index, &
285 sub_atom_kind_name=atom_type, para_env=para_env, &
286 force_env_section=force_env_section, subsys_section=subsys_section)
287 ALLOCATE (qs_env_loc)
288 CALL qs_env_create(qs_env_loc, globenv)
289 CALL qs_init(qs_env_loc, para_env, root_section, globenv=globenv, cp_subsys=subsys_loc, &
290 force_env_section=force_env_section, subsys_section=subsys_section, &
291 use_motion_section=.false.)
292 CALL cp_subsys_release(subsys_loc)
293
294 !
295 ! Print-out fragment info
296 !
297 CALL print_frag_info(atom_index, atom_type, ifrag, nfrags, &
298 charge_of_frag(ifrag), multip_of_frag(ifrag))
299 !
300 ! Run calculations on a subsystem
301 !
302 CALL qs_energies(qs_env_loc)
303 !
304 ! Get the desired results (energy and MOs) out
305 !
306 CALL get_qs_env(qs_env_loc, mos=mos_of_frag, energy=qs_energy)
307 !
308 ! Store all desired results of fragment calculations in the fragment_env
309 ! of the qs_env to use them later as needed
310 !
311 mscfg_env%energy_of_frag(ifrag) = qs_energy%total
312 nmosets_of_frag = SIZE(mos_of_frag)
313 cpassert(nmosets_of_frag .LE. mscfg_max_moset_size)
314 mscfg_env%nmosets_of_frag(ifrag) = nmosets_of_frag
315 DO imo = 1, nmosets_of_frag
316 !! Forcing compatibility for ALMO smearing
317 IF (global_almo_scf_keyword) THEN
318 !! Manually add compatibility between ALMO SCF and diag SCF (used for smearing compatibility)
319 !! MOs are required to compute ALMO orbitals, but not stored with diag SCF algorithm...
320 !! RS-WARNING: Should be properly fixed, this is just a raw fix.
321 CALL copy_fm_to_dbcsr(mos_of_frag(imo)%mo_coeff, &
322 mos_of_frag(imo)%mo_coeff_b)
323 IF (smear_almo_scf) THEN
324 !! Store MOs energies for ALMO smearing purpose
325 nmo_of_frag = SIZE(mos_of_frag(imo)%eigenvalues)
326 almo_scf_env%mo_energies(nb_eigenval_stored + 1:nb_eigenval_stored + nmo_of_frag, imo) &
327 = mos_of_frag(imo)%eigenvalues(:)
328 !! update stored energies offset. Assumes nmosets_of_frag == 1 (general smearing ALMO assumption)
329 nb_eigenval_stored = nb_eigenval_stored + nmo_of_frag
330 END IF
331 END IF !! ALMO
332
333 ! the matrices have been allocated already - copy the results there
334 CALL dbcsr_create(mscfg_env%mos_of_frag(ifrag, imo), &
335 template=mos_of_frag(imo)%mo_coeff_b, &
336 matrix_type=dbcsr_type_no_symmetry)
337 CALL dbcsr_copy(mscfg_env%mos_of_frag(ifrag, imo), &
338 mos_of_frag(imo)%mo_coeff_b)
339 END DO
340 !
341 ! Clean up
342 !
343 NULLIFY (qs_energy)
344 CALL qs_env_release(qs_env_loc)
345 DEALLOCATE (qs_env_loc)
346 DEALLOCATE (atom_index)
347 DEALLOCATE (atom_type)
348
349 END DO
350
351 CALL section_vals_val_set(dft_section, "CHARGE", i_val=global_charge)
352 CALL section_vals_val_set(dft_section, "MULTIPLICITY", i_val=global_multpl)
353 CALL section_vals_val_set(qs_section, "ALMO_SCF", l_val=global_almo_scf_keyword)
354
355 CALL timestop(handle)
356
357 END SUBROUTINE calcs_on_isolated_molecules
358
359! **************************************************************************************************
360!> \brief Print info about fragment
361!> \param atom_index ...
362!> \param atom_type ...
363!> \param frag ...
364!> \param nfrags ...
365!> \param charge ...
366!> \param multpl ...
367!> \par History
368!> 07.2005 created as a part of BSSE calculations [tlaino]
369!> 10.2014 adapted to ALMO guess calculations [Rustam Z Khaliullin]
370!> \author Rustam Z Khaliullin
371! **************************************************************************************************
372 SUBROUTINE print_frag_info(atom_index, atom_type, frag, nfrags, charge, &
373 multpl)
374
375 INTEGER, DIMENSION(:), POINTER :: atom_index
376 CHARACTER(len=default_string_length), &
377 DIMENSION(:), POINTER :: atom_type
378 INTEGER, INTENT(IN) :: frag, nfrags, charge, multpl
379
380 CHARACTER(len=11) :: chari
381 INTEGER :: i, iw
382 TYPE(cp_logger_type), POINTER :: logger
383
384 NULLIFY (logger)
385 logger => cp_get_default_logger()
386 IF (logger%para_env%is_source()) THEN
387 iw = cp_logger_get_default_unit_nr(logger, local=.true.)
388 ELSE
389 iw = -1
390 END IF
391
392 IF (iw > 0) THEN
393
394 WRITE (unit=iw, fmt="(/,T2,A)") repeat("-", 79)
395 WRITE (unit=iw, fmt="(T2,A,T80,A)") "-", "-"
396 WRITE (unit=iw, fmt="(T2,A,T5,A,T25,A,T40,I11,T53,A,T67,I11,T80,A)") &
397 "-", "MOLECULAR GUESS:", "FRAGMENT", frag, "OUT OF", nfrags, "-"
398 WRITE (unit=iw, fmt="(T2,A,T25,A,T40,I11,T53,A,T67,I11,T80,A)") "-", "CHARGE", charge, "MULTIPLICITY", &
399 multpl, "-"
400 WRITE (unit=iw, fmt="(T2,A,T80,A)") "-", "-"
401 WRITE (unit=iw, fmt="(T2,A,T25,A,T53,A,T80,A)") "-", "ATOM INDEX", "ATOM NAME", "-"
402 WRITE (unit=iw, fmt="(T2,A,T25,A,T53,A,T80,A)") "-", "----------", "---------", "-"
403 DO i = 1, SIZE(atom_index)
404 WRITE (chari, '(I11)') atom_index(i)
405 WRITE (unit=iw, fmt="(T2,A,T25,A,T53,A,T80,A)") "-", adjustl(chari), trim(atom_type(i)), "-"
406 END DO
407 WRITE (unit=iw, fmt="(T2,A)") repeat("-", 79)
408 END IF
409
410 END SUBROUTINE print_frag_info
411
412! **************************************************************************************************
413!> \brief Is the loop over molecules requested?
414!> \param force_env ...
415!> \return ...
416!> \par History
417!> 10.2014 created [Rustam Z. Khaliullin]
418!> \author Rustam Z. Khaliullin
419! **************************************************************************************************
420 FUNCTION do_mol_loop(force_env)
421
422 TYPE(force_env_type), POINTER :: force_env
423 LOGICAL :: do_mol_loop
424
425 INTEGER :: almo_guess_type, frz_term_type, &
426 method_name_id, scf_guess_type
427 LOGICAL :: almo_scf_is_on, is_crystal, is_fast_dirty
428 TYPE(molecular_scf_guess_env_type), POINTER :: mscfg_env
429 TYPE(qs_environment_type), POINTER :: qs_env
430 TYPE(section_vals_type), POINTER :: force_env_section, subsection
431
432 do_mol_loop = .false.
433 ! What kind of options are we using in the loop ?
434 is_fast_dirty = .true.
435 is_crystal = .false.
436 almo_scf_is_on = .false.
437
438 NULLIFY (qs_env, mscfg_env, force_env_section, subsection)
439 CALL force_env_get(force_env, force_env_section=force_env_section)
440 CALL section_vals_val_get(force_env_section, "METHOD", i_val=method_name_id)
441
442 IF (method_name_id .EQ. do_qs) THEN
443
444 CALL force_env_get(force_env, qs_env=qs_env)
445 cpassert(ASSOCIATED(qs_env))
446
447 CALL get_qs_env(qs_env, mscfg_env=mscfg_env)
448 cpassert(ASSOCIATED(mscfg_env))
449
450 !!!! RZK-warning: All decisions are based on the values of input keywords
451 !!!! The real danger is that many of these keywords might not be even
452 !!!! in control of the job. They might be simply present in the input
453 !!!! This section must be re-written more accurately
454
455 ! check ALMO SCF guess option
456 NULLIFY (subsection)
457 subsection => section_vals_get_subs_vals(force_env_section, "DFT%ALMO_SCF")
458 CALL section_vals_val_get(subsection, "ALMO_SCF_GUESS", i_val=almo_guess_type)
459 ! check whether ALMO SCF is on
460 NULLIFY (subsection)
461 subsection => section_vals_get_subs_vals(force_env_section, "DFT%QS")
462 CALL section_vals_val_get(subsection, "ALMO_SCF", l_val=almo_scf_is_on)
463
464 ! check SCF guess option
465 NULLIFY (subsection)
466 subsection => section_vals_get_subs_vals(force_env_section, "DFT%SCF")
467 CALL section_vals_val_get(subsection, "SCF_GUESS", i_val=scf_guess_type)
468
469 ! check ALMO EDA options
470 NULLIFY (subsection)
471 !!!LATER subsection => section_vals_get_subs_vals(force_env_section,"DFT%ALMO_SCF%ALMO_DA")
472 !!!LATER CALL section_vals_val_get(subsection,"FRZ_TERM",i_val=frz_term_type)
473 frz_term_type = almo_frz_none
474
475 ! Are we doing the loop ?
476 IF (scf_guess_type .EQ. molecular_guess .OR. & ! SCF guess is molecular
477 (almo_guess_type .EQ. molecular_guess .AND. almo_scf_is_on) .OR. & ! ALMO SCF guess is molecular
478 frz_term_type .NE. almo_frz_none) THEN ! ALMO FRZ term is requested
479
480 do_mol_loop = .true.
481
482 ! If we are calculating molecular guess it is OK to do fast and dirty loop
483 ! It is NOT ok to be sloppy with ALMO EDA calculations of the FRZ term
484 IF (frz_term_type .NE. almo_frz_none) THEN
485 is_fast_dirty = .false.
486 IF (frz_term_type .EQ. almo_frz_crystal) THEN
487 is_crystal = .true.
488 END IF
489 END IF
490
491 END IF
492
493 mscfg_env%is_fast_dirty = is_fast_dirty
494 mscfg_env%is_crystal = is_crystal
495
496 END IF
497
498 RETURN
499
500 END FUNCTION do_mol_loop
501
502END MODULE mscfg_methods
503
Types for all ALMO-based methods.
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.
Handles all functions related to the CELL.
Definition cell_types.F:15
DBCSR operations in CP2K.
subroutine, public copy_fm_to_dbcsr(fm, matrix, keep_sparsity)
Copy a BLACS matrix to a dbcsr matrix.
various routines to log and control the output. The idea is that decisions about where to log should ...
recursive integer function, public cp_logger_get_default_unit_nr(logger, local, skip_not_ionode)
asks the default unit number of the given logger. try to use cp_logger_get_unit_nr
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
Initialize a small environment for a particular calculation.
subroutine, public create_small_subsys(small_subsys, big_subsys, small_cell, small_para_env, sub_atom_index, sub_atom_kind_name, para_env, force_env_section, subsys_section, ignore_outside_box)
updates the molecule information of the given subsys
types that represent a subsys, i.e. a part of the system
subroutine, public cp_subsys_release(subsys)
releases a subsys (see doc/ReferenceCounting.html)
subroutine, public cp_subsys_get(subsys, ref_count, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell)
returns information about various attributes of the given subsys
Interface for the force calculations.
recursive subroutine, public force_env_get(force_env, in_use, fist_env, qs_env, meta_env, fp_env, subsys, para_env, potential_energy, additional_potential, kinetic_energy, harmonic_shell, kinetic_shell, cell, sub_force_env, qmmm_env, qmmmx_env, eip_env, pwdft_env, globenv, input, force_env_section, method_name_id, root_section, mixed_env, nnp_env, embed_env)
returns various attributes about the force environment
Define type storing the global information of a run. Keep the amount of stored data small....
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public molecular_guess
integer, parameter, public almo_frz_crystal
integer, parameter, public almo_frz_none
integer, parameter, public do_qs
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_vals_val_set(section_vals, keyword_name, i_rep_section, i_rep_val, val, l_val, i_val, r_val, c_val, l_vals_ptr, i_vals_ptr, r_vals_ptr, c_vals_ptr)
sets the requested value
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_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 default_string_length
Definition kinds.F:57
Interface to the message passing library MPI.
Define the data structure for the molecule information.
subroutine, public get_molecule_set_info(molecule_set, atom_to_mol, mol_to_first_atom, mol_to_last_atom, mol_to_nelectrons, mol_to_nbasis, mol_to_charge, mol_to_multiplicity)
returns information about molecules in the set.
Subroutines to perform calculations on molecules from a bigger system. Useful to generate a high-qual...
subroutine, public loop_over_molecules(globenv, force_env)
Prepare data for calculations on isolated molecules.
logical function, public do_mol_loop(force_env)
Is the loop over molecules requested?
Types used to generate the molecular SCF guess.
Definition mscfg_types.F:14
integer, parameter, public mscfg_max_moset_size
Definition mscfg_types.F:31
subroutine, public molecular_scf_guess_env_init(env, nfrags)
Allocates data.
Definition mscfg_types.F:67
represent a simple array based list of the given type
Perform a QUICKSTEP wavefunction optimization (single point)
Definition qs_energy.F:14
subroutine, public qs_energies(qs_env, consistent_energies, calc_forces)
Driver routine for QUICKSTEP single point wavefunction optimization.
Definition qs_energy.F:65
subroutine, public qs_env_release(qs_env)
releases the given qs_env (see doc/ReferenceCounting.html)
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, 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_nonbond, sab_almo, sab_kp, sab_kp_nosym, 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, 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, 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, ecoul_1c, rho0_s_rs, rho0_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, 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, rhs)
Get the QUICKSTEP environment.
subroutine, public qs_env_create(qs_env, globenv)
allocates and intitializes a qs_env
subroutine, public qs_init(qs_env, para_env, root_section, globenv, cp_subsys, kpoint_env, cell, cell_ref, qmmm, qmmm_env_qm, force_env_section, subsys_section, use_motion_section)
Read the input and the database files for the setup of the QUICKSTEP environment.
Definition and initialisation of the mo data type.
Definition qs_mo_types.F:22
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count)
Get the components of a MO set data structure.
Type defining parameters related to the simulation cell.
Definition cell_types.F:55
type of a logger, at the moment it contains just a print level starting at which level it should be l...
represents a system: atoms, molecules, their pos,vel,...
wrapper to abstract the force evaluation of the various methods
contains the initially parsed file and the initial parallel environment
stores all the informations relevant to an mpi environment