Line data Source code
1 : MODULE m_vsoc
2 : CONTAINS
3 0 : SUBROUTINE vsoc(input,atoms,vr,epar, l_spav, vso)
4 : !*************************************************
5 : ! Compute the spin-orbit potential.
6 : !*************************************************
7 : USE m_sointg
8 : USE m_types
9 : IMPLICIT NONE
10 :
11 : TYPE(t_input),INTENT(IN) :: input
12 : TYPE(t_atoms),INTENT(IN) :: atoms
13 : REAL, INTENT(in) :: vr(:,:,:)
14 : REAL, INTENT(in) :: epar(:,:,:)
15 : LOGICAL,INTENT(in) :: l_spav
16 : REAL, INTENT(out) :: vso(:,:,:)
17 :
18 0 : REAL :: v0(atoms%jmtd)
19 : REAL :: e
20 : INTEGER :: n,i,l
21 :
22 0 : l=2
23 :
24 0 : DO n=1,atoms%ntype
25 0 : v0(:) = 0.0
26 0 : IF (input%jspins.EQ.1) THEN
27 0 : v0(1:atoms%jri(n)) = vr(1:atoms%jri(n),n,1)
28 0 : e = epar(l,n,1)
29 : ELSE
30 0 : DO i = 1,atoms%jri(n)
31 0 : v0(i) = (vr(i,n,1)+vr(i,n,input%jspins))/2.
32 : END DO
33 0 : e = (epar(l,n,1)+epar(l,n,input%jspins))/2.
34 : END IF
35 :
36 0 : CALL sointg(n,e,vr(:,n,:),v0,atoms,input, vso(:,n,:))
37 :
38 0 : IF(l_spav)THEN
39 0 : DO i= 1,atoms%jmtd
40 0 : vso(i,n,1)= (vso(i,n,1)+vso(i,n,2))/2.
41 0 : vso(i,n,2)= vso(i,n,1)
42 : ENDDO
43 : ENDIF
44 :
45 : ENDDO
46 :
47 :
48 :
49 0 : END SUBROUTINE vsoc
50 : END MODULE m_vsoc
|