(git:a660c7f)
Loading...
Searching...
No Matches
rt_propagation_forces.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 Routines needed for EMD
10!> \author Florian Schiffmann (02.09)
11! **************************************************************************************************
12
14 USE admm_types, ONLY: admm_type,&
20 USE cp_dbcsr_api, ONLY: &
24 dbcsr_type_no_symmetry
29 USE cp_fm_types, ONLY: cp_fm_create,&
32 USE kinds, ONLY: dp
33 USE mathconstants, ONLY: one,&
34 zero
39 USE qs_force_types, ONLY: add_qs_force,&
44 USE qs_rho_types, ONLY: qs_rho_get,&
46 USE rt_propagation_types, ONLY: get_rtp,&
48#include "./base/base_uses.f90"
49
50 IMPLICIT NONE
51 PRIVATE
52
53 PUBLIC :: calc_c_mat_force, &
55
56 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'rt_propagation_forces'
57
58CONTAINS
59
60! **************************************************************************************************
61!> \brief calculates the three additional force contributions needed in EMD
62!> P_imag*C , P_imag*B*S^-1*S_der , P*S^-1*H*S_der
63!> \param qs_env ...
64!> \par History
65!> 02.2014 switched to dbcsr matrices [Samuel Andermatt]
66!> 10.2023 merge MO-based and all-atom into one routine [Guillaume Le Breton]
67!> \author Florian Schiffmann (02.09)
68! **************************************************************************************************
69
70 SUBROUTINE calc_c_mat_force(qs_env)
71 TYPE(qs_environment_type), POINTER :: qs_env
72
73 CHARACTER(LEN=*), PARAMETER :: routinen = 'calc_c_mat_force'
74 REAL(kind=dp), PARAMETER :: one = 1.0_dp, zero = 0.0_dp
75
76 INTEGER :: handle, i, im, ispin, re
77 INTEGER, ALLOCATABLE, DIMENSION(:) :: atom_of_kind, kind_of
78 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
79 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: c_mat, rho_ao, rho_ao_im, rho_new, &
80 s_der, sinvb, sinvh, sinvh_imag
81 TYPE(dbcsr_type), POINTER :: s_inv, tmp
82 TYPE(dft_control_type), POINTER :: dft_control
83 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
84 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
85 TYPE(qs_rho_type), POINTER :: rho
86 TYPE(rt_prop_type), POINTER :: rtp
87 TYPE(rtp_control_type), POINTER :: rtp_control
88
89 CALL timeset(routinen, handle)
90 NULLIFY (rtp, particle_set, atomic_kind_set, dft_control)
91
92 CALL get_qs_env(qs_env, &
93 rtp=rtp, &
94 rho=rho, &
95 particle_set=particle_set, &
96 atomic_kind_set=atomic_kind_set, &
97 force=force, &
98 dft_control=dft_control)
99
100 rtp_control => dft_control%rtp_control
101 CALL get_rtp(rtp=rtp, c_mat=c_mat, s_der=s_der, s_inv=s_inv, &
102 sinvh=sinvh, sinvb=sinvb)
103
104 CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, atom_of_kind=atom_of_kind, kind_of=kind_of)
105
106 NULLIFY (tmp)
107 ALLOCATE (tmp)
108 CALL dbcsr_create(tmp, template=sinvb(1)%matrix)
109
110 IF (rtp%linear_scaling) THEN
111 CALL get_rtp(rtp=rtp, rho_new=rho_new)
112 ELSE
113 CALL qs_rho_get(rho_struct=rho, rho_ao=rho_ao, rho_ao_im=rho_ao_im)
114 END IF
115
116 ! If SinvH has an imaginary part (the minus sign is already in SinvH_imag)
117 IF (rtp%propagate_complex_ks) CALL get_rtp(rtp=rtp, sinvh_imag=sinvh_imag)
118
119 DO ispin = 1, SIZE(sinvh)
120 re = 2*ispin - 1
121 im = 2*ispin
122 IF (rtp%linear_scaling) THEN
123 CALL dbcsr_multiply("N", "N", one, sinvh(ispin)%matrix, rho_new(re)%matrix, zero, tmp, &
124 filter_eps=rtp%filter_eps)
125 IF (rtp%propagate_complex_ks) THEN
126 CALL dbcsr_multiply("N", "N", one, sinvh_imag(ispin)%matrix, rho_new(im)%matrix, one, tmp, &
127 filter_eps=rtp%filter_eps)
128 END IF
129 CALL dbcsr_multiply("N", "N", one, sinvb(ispin)%matrix, rho_new(im)%matrix, one, tmp, &
130 filter_eps=rtp%filter_eps)
131 CALL compute_forces(force, tmp, s_der, rho_new(im)%matrix, c_mat, kind_of, atom_of_kind)
132 ELSE
133 CALL dbcsr_multiply("N", "N", one, sinvh(ispin)%matrix, rho_ao(ispin)%matrix, zero, tmp)
134 IF (rtp%propagate_complex_ks) THEN
135 CALL dbcsr_multiply("N", "N", one, sinvh_imag(ispin)%matrix, rho_ao_im(ispin)%matrix, one, tmp)
136 END IF
137 CALL dbcsr_multiply("N", "N", one, sinvb(ispin)%matrix, rho_ao_im(ispin)%matrix, one, tmp)
138 CALL compute_forces(force, tmp, s_der, rho_ao_im(ispin)%matrix, c_mat, kind_of, atom_of_kind)
139 END IF
140 END DO
141
142 ! recall QS forces, at this point have the other sign.
143 DO i = 1, SIZE(force)
144 force(i)%ehrenfest(:, :) = -force(i)%ehrenfest(:, :)
145 END DO
146
148
149 CALL timestop(handle)
150
151 END SUBROUTINE calc_c_mat_force
152
153! **************************************************************************************************
154!> \brief ...
155!> \param force ...
156!> \param tmp ...
157!> \param S_der ...
158!> \param rho_im ...
159!> \param C_mat ...
160!> \param kind_of ...
161!> \param atom_of_kind ...
162! **************************************************************************************************
163 SUBROUTINE compute_forces(force, tmp, S_der, rho_im, C_mat, kind_of, atom_of_kind)
164 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
165 TYPE(dbcsr_type), POINTER :: tmp
166 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: s_der
167 TYPE(dbcsr_type), POINTER :: rho_im
168 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: c_mat
169 INTEGER, ALLOCATABLE, DIMENSION(:) :: kind_of, atom_of_kind
170
171 INTEGER :: col_atom, i, ikind, kind_atom, row_atom
172 LOGICAL :: found
173 REAL(dp), DIMENSION(:, :), POINTER :: block_values, block_values2
174 TYPE(dbcsr_iterator_type) :: iter
175
176 DO i = 1, 3
177 !Calculate the sum over the hadmard product
178 !S_der part
179
180 CALL dbcsr_iterator_start(iter, tmp)
181 DO WHILE (dbcsr_iterator_blocks_left(iter))
182 CALL dbcsr_iterator_next_block(iter, row_atom, col_atom, block_values)
183 CALL dbcsr_get_block_p(s_der(i)%matrix, row_atom, col_atom, block_values2, found=found)
184 IF (found) THEN
185 ikind = kind_of(col_atom)
186 kind_atom = atom_of_kind(col_atom)
187 !The block_values are in a vector format,
188 ! so the dot_product is the sum over all elements of the hamand product, that I need
189 force(ikind)%ehrenfest(i, kind_atom) = force(ikind)%ehrenfest(i, kind_atom) + &
190 2.0_dp*sum(block_values*block_values2)
191 END IF
192 END DO
193 CALL dbcsr_iterator_stop(iter)
194
195 !C_mat part
196
197 CALL dbcsr_iterator_start(iter, rho_im)
198 DO WHILE (dbcsr_iterator_blocks_left(iter))
199 CALL dbcsr_iterator_next_block(iter, row_atom, col_atom, block_values)
200 CALL dbcsr_get_block_p(c_mat(i)%matrix, row_atom, col_atom, block_values2, found=found)
201 IF (found) THEN
202 ikind = kind_of(col_atom)
203 kind_atom = atom_of_kind(col_atom)
204 !The block_values are in a vector format, so the dot_product is
205 ! the sum over all elements of the hamand product, that I need
206 force(ikind)%ehrenfest(i, kind_atom) = force(ikind)%ehrenfest(i, kind_atom) + &
207 2.0_dp*sum(block_values*block_values2)
208 END IF
209 END DO
210 CALL dbcsr_iterator_stop(iter)
211 END DO
212
213 END SUBROUTINE compute_forces
214
215! **************************************************************************************************
216!> \brief ...
217!> \param qs_env ...
218! **************************************************************************************************
219 SUBROUTINE rt_admm_force(qs_env)
220 TYPE(qs_environment_type), POINTER :: qs_env
221
222 TYPE(admm_type), POINTER :: admm_env
223 TYPE(cp_fm_type), DIMENSION(:), POINTER :: mos, mos_admm
224 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: ks_aux_im, ks_aux_re, matrix_s_aux_fit, &
225 matrix_s_aux_fit_vs_orb
226 TYPE(rt_prop_type), POINTER :: rtp
227
228 CALL get_qs_env(qs_env, &
229 admm_env=admm_env, &
230 rtp=rtp)
231 CALL get_admm_env(admm_env, matrix_ks_aux_fit=ks_aux_re, &
232 matrix_ks_aux_fit_im=ks_aux_im, &
233 matrix_s_aux_fit=matrix_s_aux_fit, &
234 matrix_s_aux_fit_vs_orb=matrix_s_aux_fit_vs_orb)
235
236 CALL get_rtp(rtp=rtp, mos_new=mos, admm_mos=mos_admm)
237
238 ! currently only none option
239 CALL rt_admm_forces_none(qs_env, admm_env, ks_aux_re, ks_aux_im, &
240 matrix_s_aux_fit, matrix_s_aux_fit_vs_orb, mos_admm, mos)
241
242 END SUBROUTINE rt_admm_force
243
244! **************************************************************************************************
245!> \brief ...
246!> \param qs_env ...
247!> \param admm_env ...
248!> \param KS_aux_re ...
249!> \param KS_aux_im ...
250!> \param matrix_s_aux_fit ...
251!> \param matrix_s_aux_fit_vs_orb ...
252!> \param mos_admm ...
253!> \param mos ...
254! **************************************************************************************************
255 SUBROUTINE rt_admm_forces_none(qs_env, admm_env, KS_aux_re, KS_aux_im, matrix_s_aux_fit, matrix_s_aux_fit_vs_orb, mos_admm, mos)
256 TYPE(qs_environment_type), POINTER :: qs_env
257 TYPE(admm_type), POINTER :: admm_env
258 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: ks_aux_re, ks_aux_im, matrix_s_aux_fit, &
259 matrix_s_aux_fit_vs_orb
260 TYPE(cp_fm_type), DIMENSION(:), POINTER :: mos_admm, mos
261
262 INTEGER :: im, ispin, jspin, nao, natom, naux, nmo, &
263 re
264 REAL(kind=dp), ALLOCATABLE, DIMENSION(:, :) :: admm_force
265 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
266 TYPE(cp_fm_struct_type), POINTER :: mstruct
267 TYPE(cp_fm_type), DIMENSION(2) :: tmp_aux_aux, tmp_aux_mo, tmp_aux_mo1, &
268 tmp_aux_nao
269 TYPE(dbcsr_type), POINTER :: matrix_w_q, matrix_w_s
270 TYPE(neighbor_list_set_p_type), DIMENSION(:), &
271 POINTER :: sab_aux_fit_asymm, sab_aux_fit_vs_orb
272 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
273 TYPE(qs_ks_env_type), POINTER :: ks_env
274
275 NULLIFY (sab_aux_fit_asymm, sab_aux_fit_vs_orb, ks_env)
276
277 CALL get_qs_env(qs_env, ks_env=ks_env)
278 CALL get_admm_env(admm_env, sab_aux_fit_asymm=sab_aux_fit_asymm, &
279 sab_aux_fit_vs_orb=sab_aux_fit_vs_orb)
280
281 ALLOCATE (matrix_w_s)
282 CALL dbcsr_create(matrix_w_s, template=matrix_s_aux_fit(1)%matrix, &
283 name='W MATRIX AUX S', matrix_type=dbcsr_type_no_symmetry)
284 CALL cp_dbcsr_alloc_block_from_nbl(matrix_w_s, sab_aux_fit_asymm)
285
286 ALLOCATE (matrix_w_q)
287 CALL dbcsr_copy(matrix_w_q, matrix_s_aux_fit_vs_orb(1)%matrix, &
288 "W MATRIX AUX Q")
289
290 DO jspin = 1, 2
291 CALL cp_fm_create(tmp_aux_aux(jspin), admm_env%work_aux_aux%matrix_struct, name="taa")
292 CALL cp_fm_create(tmp_aux_nao(jspin), admm_env%work_aux_orb%matrix_struct, name="tao")
293 END DO
294
295 DO ispin = 1, SIZE(ks_aux_re)
296 re = 2*ispin - 1; im = 2*ispin
297 naux = admm_env%nao_aux_fit; nmo = admm_env%nmo(ispin); nao = admm_env%nao_orb
298
299 mstruct => admm_env%work_aux_nmo(ispin)%matrix_struct
300 DO jspin = 1, 2
301 CALL cp_fm_create(tmp_aux_mo(jspin), mstruct, name="tam")
302 CALL cp_fm_create(tmp_aux_mo1(jspin), mstruct, name="tam")
303 END DO
304
305! First calculate H=KS_aux*C~, real part ends on work_aux_aux2, imaginary part ends at work_aux_aux3
306 CALL cp_dbcsr_sm_fm_multiply(ks_aux_re(ispin)%matrix, mos_admm(re), tmp_aux_mo(1), nmo, 4.0_dp, 0.0_dp)
307 CALL cp_dbcsr_sm_fm_multiply(ks_aux_re(ispin)%matrix, mos_admm(im), tmp_aux_mo(2), nmo, 4.0_dp, 0.0_dp)
308 CALL cp_dbcsr_sm_fm_multiply(ks_aux_im(ispin)%matrix, mos_admm(im), tmp_aux_mo(1), nmo, -4.0_dp, 1.0_dp)
309 CALL cp_dbcsr_sm_fm_multiply(ks_aux_im(ispin)%matrix, mos_admm(re), tmp_aux_mo(2), nmo, 4.0_dp, 1.0_dp)
310
311! Next step compute S-1*H
312 CALL parallel_gemm('N', 'N', naux, nmo, naux, 1.0_dp, admm_env%S_inv, tmp_aux_mo(1), 0.0_dp, tmp_aux_mo1(1))
313 CALL parallel_gemm('N', 'N', naux, nmo, naux, 1.0_dp, admm_env%S_inv, tmp_aux_mo(2), 0.0_dp, tmp_aux_mo1(2))
314
315! Here we go on with Ws=S-1*H * C^H (take care of sign of the imaginary part!!!)
316
317 CALL parallel_gemm("N", "T", naux, nao, nmo, -1.0_dp, tmp_aux_mo1(1), mos(re), 0.0_dp, &
318 tmp_aux_nao(1))
319 CALL parallel_gemm("N", "T", naux, nao, nmo, -1.0_dp, tmp_aux_mo1(2), mos(im), 1.0_dp, &
320 tmp_aux_nao(1))
321 CALL parallel_gemm("N", "T", naux, nao, nmo, 1.0_dp, tmp_aux_mo1(1), mos(im), 0.0_dp, &
322 tmp_aux_nao(2))
323 CALL parallel_gemm("N", "T", naux, nao, nmo, -1.0_dp, tmp_aux_mo1(2), mos(re), 1.0_dp, &
324 tmp_aux_nao(2))
325
326! Let's do the final bit Wq=S-1*H * C^H * A^T
327 CALL parallel_gemm('N', 'T', naux, naux, nao, -1.0_dp, tmp_aux_nao(1), admm_env%A, 0.0_dp, tmp_aux_aux(1))
328 CALL parallel_gemm('N', 'T', naux, naux, nao, -1.0_dp, tmp_aux_nao(2), admm_env%A, 0.0_dp, tmp_aux_aux(2))
329
330 ! *** copy to sparse matrix
331 CALL copy_fm_to_dbcsr(tmp_aux_nao(1), matrix_w_q, keep_sparsity=.true.)
332
333 ! *** copy to sparse matrix
334 CALL copy_fm_to_dbcsr(tmp_aux_aux(1), matrix_w_s, keep_sparsity=.true.)
335
336 DO jspin = 1, 2
337 CALL cp_fm_release(tmp_aux_mo(jspin))
338 CALL cp_fm_release(tmp_aux_mo1(jspin))
339 END DO
340
341! *** This can be done in one call w_total = w_alpha + w_beta
342 ! allocate force vector
343 CALL get_qs_env(qs_env=qs_env, natom=natom)
344 ALLOCATE (admm_force(3, natom))
345 admm_force = 0.0_dp
346 CALL build_overlap_force(ks_env, admm_force, &
347 basis_type_a="AUX_FIT", basis_type_b="AUX_FIT", &
348 sab_nl=sab_aux_fit_asymm, matrix_p=matrix_w_s)
349 CALL build_overlap_force(ks_env, admm_force, &
350 basis_type_a="AUX_FIT", basis_type_b="ORB", &
351 sab_nl=sab_aux_fit_vs_orb, matrix_p=matrix_w_q)
352 ! add forces
353 CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set, &
354 force=force)
355 CALL add_qs_force(admm_force, force, "overlap_admm", atomic_kind_set)
356 DEALLOCATE (admm_force)
357
358 END DO
359
360 ! *** Deallocated weighted density matrices
361 CALL dbcsr_deallocate_matrix(matrix_w_s)
362 CALL dbcsr_deallocate_matrix(matrix_w_q)
363
364 DO jspin = 1, 2
365 CALL cp_fm_release(tmp_aux_aux(jspin))
366 CALL cp_fm_release(tmp_aux_nao(jspin))
367 END DO
368
369 END SUBROUTINE rt_admm_forces_none
370
371END MODULE rt_propagation_forces
Types and set/get functions for auxiliary density matrix methods.
Definition admm_types.F:15
subroutine, public get_admm_env(admm_env, mo_derivs_aux_fit, mos_aux_fit, sab_aux_fit, sab_aux_fit_asymm, sab_aux_fit_vs_orb, matrix_s_aux_fit, matrix_s_aux_fit_kp, matrix_s_aux_fit_vs_orb, matrix_s_aux_fit_vs_orb_kp, task_list_aux_fit, matrix_ks_aux_fit, matrix_ks_aux_fit_kp, matrix_ks_aux_fit_im, matrix_ks_aux_fit_dft, matrix_ks_aux_fit_hfx, matrix_ks_aux_fit_dft_kp, matrix_ks_aux_fit_hfx_kp, rho_aux_fit, rho_aux_fit_buffer, admm_dm)
Get routine for the ADMM env.
Definition admm_types.F:599
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind_set(atomic_kind_set, atom_of_kind, kind_of, natom_of_kind, maxatom, natom, nshell, fist_potential_present, shell_present, shell_adiabatic, shell_check_distance, damping_present)
Get attributes of an atomic kind set.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_deallocate_matrix(matrix)
...
logical function, public dbcsr_iterator_blocks_left(iterator)
...
subroutine, public dbcsr_iterator_stop(iterator)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_get_block_p(matrix, row, col, block, found, row_size, col_size)
...
subroutine, public dbcsr_multiply(transa, transb, alpha, matrix_a, matrix_b, beta, matrix_c, first_row, last_row, first_column, last_column, first_k, last_k, retain_sparsity, filter_eps, flop)
...
subroutine, public dbcsr_iterator_next_block(iterator, row, column, block, block_number_argument_has_been_removed, row_size, col_size, row_offset, col_offset, transposed)
...
subroutine, public dbcsr_iterator_start(iterator, matrix, shared, dynamic, dynamic_byrows)
...
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_sm_fm_multiply(matrix, fm_in, fm_out, ncol, alpha, beta)
multiply a dbcsr with a fm matrix
subroutine, public copy_fm_to_dbcsr(fm, matrix, keep_sparsity)
Copy a BLACS matrix to a dbcsr matrix.
represent the structure of a full matrix
represent a full matrix distributed on many processors
Definition cp_fm_types.F:15
subroutine, public cp_fm_create(matrix, matrix_struct, name, nrow, ncol, set_zero)
creates a new full matrix with the given structure
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Definition of mathematical constants and functions.
real(kind=dp), parameter, public one
real(kind=dp), parameter, public zero
basic linear algebra operations for full matrixes
Define the data structure for the particle information.
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, 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.
subroutine, public add_qs_force(force, qs_force, forcetype, atomic_kind_set)
Add force to a force_type variable.
Define the neighbor list data types and the corresponding functionality.
Calculation of overlap matrix, its derivatives and forces.
Definition qs_overlap.F:19
subroutine, public build_overlap_force(ks_env, force, basis_type_a, basis_type_b, sab_nl, matrix_p, matrixkp_p)
Calculation of the force contribution from an overlap matrix over Cartesian Gaussian functions.
Definition qs_overlap.F:825
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
Routines needed for EMD.
subroutine, public rt_admm_force(qs_env)
...
subroutine, public calc_c_mat_force(qs_env)
calculates the three additional force contributions needed in EMD P_imag*C , P_imag*B*S^-1*S_der ,...
Types and set_get for real time propagation depending on runtype and diagonalization method different...
subroutine, public get_rtp(rtp, exp_h_old, exp_h_new, h_last_iter, rho_old, rho_next, rho_new, mos, mos_new, mos_old, mos_next, s_inv, s_half, s_minus_half, b_mat, c_mat, propagator_matrix, mixing, mixing_factor, s_der, dt, nsteps, sinvh, sinvh_imag, sinvb, admm_mos)
...
stores some data used in wavefunction fitting
Definition admm_types.F:120
Provides all information about an atomic kind.
keeps the information about the structure of a full matrix
represent a full matrix
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps the density in various representations, keeping track of which ones are valid.