(git:5e7fe52)
Loading...
Searching...
No Matches
qs_charge_mixing_unittest.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
9 USE ieee_arithmetic, ONLY: ieee_is_finite
10 USE kinds, ONLY: dp
18
19 IMPLICIT NONE
20
21 REAL(kind=dp), DIMENSION(1, 1) :: charges
22 TYPE(mp_para_env_type), POINTER :: para_env
23 TYPE(mixing_storage_type), POINTER :: mixing_store
24
25 NULLIFY (mixing_store, para_env)
26 ALLOCATE (para_env)
27 CALL mp_world_init(para_env)
28
29 ALLOCATE (mixing_store)
30 mixing_store%ncall = 0
31 mixing_store%nbuffer = 4
32 mixing_store%n_simple_mix = 0
33 mixing_store%nskip_mixing = 0
34 mixing_store%alpha = 0.1_dp
35 mixing_store%broy_w0 = 0.01_dp
36 mixing_store%nat_local = 1
37 mixing_store%max_shell = 1
38 ALLOCATE (mixing_store%acharge(1, 1, 4), mixing_store%dacharge(1, 1, 4), &
39 mixing_store%dfbroy(1, 1, 4), mixing_store%ubroy(1, 1, 4), &
40 mixing_store%abroy(4, 4), mixing_store%wbroy(4), mixing_store%atlist(1))
41 mixing_store%acharge = 0.0_dp
42 mixing_store%dacharge = 0.0_dp
43 mixing_store%dfbroy = 0.0_dp
44 mixing_store%ubroy = 0.0_dp
45 mixing_store%abroy = 0.0_dp
46 mixing_store%wbroy = 0.0_dp
47 mixing_store%atlist = 1
48
49 charges = 1.0_dp
50 CALL charge_mixing(broyden_mixing_nr, mixing_store, charges, para_env, 1)
51 charges = 0.5_dp
52 CALL charge_mixing(broyden_mixing_nr, mixing_store, charges, para_env, 2)
53
54 ! Reproduce a degenerate Broyden history by supplying the previous residual again.
55 charges(1, 1) = mixing_store%acharge(1, 1, 2) - mixing_store%dacharge(1, 1, 1)
56 CALL charge_mixing(broyden_mixing_nr, mixing_store, charges, para_env, 3)
57
58 IF (.NOT. all(ieee_is_finite(charges))) THEN
59 error stop "Broyden mixing produced non-finite charges for identical residuals"
60 END IF
61 IF (.NOT. all(mixing_store%dfbroy(:, :, 1) == 0.0_dp)) THEN
62 error stop "Degenerate Broyden direction was not discarded"
63 END IF
64
65 CALL mixing_storage_release(mixing_store)
66 DEALLOCATE (mixing_store)
67 DEALLOCATE (para_env)
69
71! vim: set ts=3 sw=3 tw=132 :
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Interface to the message passing library MPI.
subroutine, public mp_world_init(mp_comm)
initializes the system default communicator
subroutine, public mp_world_finalize()
Finalize the system default communicator and MPI when CP2K owns MPI.
subroutine, public charge_mixing(mixing_method, mixing_store, charges, para_env, iter_count, scc_mixer, tblite_mixer_iterations, tblite_mixer_damping, tblite_mixer_memory, tblite_mixer_omega0, tblite_mixer_min_weight, tblite_mixer_max_weight, tblite_mixer_weight_factor)
Driver for TB SCC variable mixing, calls the requested method.
module that contains the definitions of the scf types
integer, parameter, public broyden_mixing_nr
subroutine, public mixing_storage_release(mixing_store)
releases a mixing_storage
program qs_charge_mixing_unittest
stores all the informations relevant to an mpi environment