Line data Source code
1 : !--------------------------------------------------------------------------------
2 : ! Copyright (c) 2016 Peter Grünberg Institut, Forschungszentrum Jülich, Germany
3 : ! This file is part of FLEUR and available as free software under the conditions
4 : ! of the MIT license as expressed in the LICENSE file in more detail.
5 : !--------------------------------------------------------------------------------
6 :
7 : MODULE m_stmix
8 : !! Simple or straight mixing
9 :
10 : CONTAINS
11 0 : SUBROUTINE stmix(atoms,input,noco,fsm,fsm_mag,sm)
12 : !!Simple mixing
13 : USE m_types_mixvector
14 : USE m_types
15 : IMPLICIT NONE
16 : TYPE(t_input),INTENT(IN) :: input
17 : TYPE(t_noco),INTENT(IN) :: noco
18 : TYPE(t_atoms),INTENT(IN) :: atoms
19 : TYPE(t_mixvector),INTENT(IN) :: fsm !!Difference of input and output density
20 : TYPE(t_mixvector),INTENT(IN) :: fsm_mag !!Difference of input and output magnetisation
21 : TYPE(t_mixvector),INTENT(INOUT) :: sm !!input: input-density, output: mixed density
22 : ! ..
23 : ! .. Local Scalars ..
24 : REAL,PARAMETER:: tol_6=1.0e-6
25 : ! ..
26 : !
27 0 : sm = sm + input%alpha*fsm
28 :
29 0 : IF ( ABS(input%spinf-1.0).LE.tol_6 .OR. input%jspins.EQ.1 .or.input%imix.ne.0.or.noco%l_noco) RETURN
30 : ! Done with sm1 = sm + alpha * F(sm)
31 :
32 :
33 : !Spin enhancement factor
34 0 : sm = sm + input%alpha/2.0*(input%spinf-1.0)*fsm_mag
35 : ! -->perform simple mixing with the mixing parameters
36 : ! for charge and spin
37 : !
38 : ! sm1+/_ = (sm+/_) + alpha* F(sm)
39 : ! +/-0.5alpha(spinf-1)( F(sm+) + F(sm-) )
40 : ! The F(sm+) and F(sm-) terms do not only include diagonal elements of the density matrices (as one could think)
41 : ! but also contain off-diag. elements (jspins=3,4) of the density matrices in the fully noncolinear case.
42 : ! Choosing a spinf>1 therefore might be helpful when it comes to converging noncolinear systems.
43 : ! DW: Actually for noco, this spinf>1 has the potential to break symmetry in the noco case, hence it is disabled.
44 :
45 : END SUBROUTINE stmix
46 : END MODULE m_stmix
|