TABLE OF CONTENTS
ABINIT/cont22cso [ Functions ]
NAME
cont22cso
FUNCTION
Contract symmetric rank 2 tensor gxa1 with symmetric rank 2 tensor gxa2 using metric tensor gmet to produce rank 2 complex tensor.
COPYRIGHT
Copyright (C) 1998-2018 ABINIT group (MT) This file is distributed under the terms of the GNU General Public License, see ~abinit/COPYING or http://www.gnu.org/copyleft/gpl.txt . For the initials of contributors, see ~abinit/doc/developers/contributors.txt.
INPUTS
gxa1(2,10)=rank 2 complex symmetric tensor gxa2(2,10)=rank 2 complex symmetric tensor gmet(3,3)=usual metric tensor (symmetric, real)
OUTPUT
rank2c(2,6)=rank 2 complex tensor (pseudo-symmetric storage)
NOTES
This contraction is used for spin-orbit correction in non-local contribution to stresses. Symmetric gxa1, gxa2 are stored as 11 22 33 32 31 21; gmet(3,3) is symmetric but stored fully (9 elements); Output rank2c is not symmetric but since $rank2c_{gxa1,gxa2}(a,b)=conjg(rank2c_{gxa2,gxa1}(b,a))$ it is stored as 11 22 33 32 31 21. rank2c(1,1), rank2c(2,2), rank3c(3,3) are not needed; They are not calculated. rank2c(a,b)=3 conjg(gxa1(i,a)) gmet(i,j) gxa2(j,b)
PARENTS
nonlop_pl
CHILDREN
SOURCE
49 #if defined HAVE_CONFIG_H 50 #include "config.h" 51 #endif 52 53 #include "abi_common.h" 54 55 56 subroutine cont22cso(gxa1,gxa2,gmet,rank2c) 57 58 use defs_basis 59 60 !This section has been created automatically by the script Abilint (TD). 61 !Do not modify the following lines by hand. 62 #undef ABI_FUNC 63 #define ABI_FUNC 'cont22cso' 64 !End of the abilint section 65 66 implicit none 67 68 !Arguments ------------------------------------ 69 !arrays 70 real(dp),intent(in) :: gmet(3,3),gxa1(2,6),gxa2(2,6) 71 real(dp),intent(out) :: rank2c(2,6) 72 73 !Local variables------------------------------- 74 !scalars 75 integer,parameter :: im=2,re=1 76 !arrays 77 real(dp) :: r2(2,3,3) 78 79 ! ************************************************************************* 80 81 !Initialize output tensor 82 rank2c(:,:)=0.d0 83 84 !First compute r2(i,j) = gmet(i,k) gxa2(j,k) 85 r2(:,1,1)=gmet(1,1)*gxa2(:,1)+gmet(1,2)*gxa2(:,6)+gmet(1,3)*gxa2(:,5) 86 r2(:,1,2)=gmet(1,1)*gxa2(:,6)+gmet(1,2)*gxa2(:,2)+gmet(1,3)*gxa2(:,4) 87 r2(:,1,3)=gmet(1,1)*gxa2(:,5)+gmet(1,2)*gxa2(:,4)+gmet(1,3)*gxa2(:,3) 88 r2(:,2,1)=gmet(2,1)*gxa2(:,1)+gmet(2,2)*gxa2(:,6)+gmet(2,3)*gxa2(:,5) 89 r2(:,2,2)=gmet(2,1)*gxa2(:,6)+gmet(2,2)*gxa2(:,2)+gmet(2,3)*gxa2(:,4) 90 r2(:,2,3)=gmet(2,1)*gxa2(:,5)+gmet(2,2)*gxa2(:,4)+gmet(2,3)*gxa2(:,3) 91 r2(:,3,1)=gmet(3,1)*gxa2(:,1)+gmet(3,2)*gxa2(:,6)+gmet(3,3)*gxa2(:,5) 92 r2(:,3,2)=gmet(3,1)*gxa2(:,6)+gmet(3,2)*gxa2(:,2)+gmet(3,3)*gxa2(:,4) 93 r2(:,3,3)=gmet(3,1)*gxa2(:,5)+gmet(3,2)*gxa2(:,4)+gmet(3,3)*gxa2(:,3) 94 95 !Then compute rank2c(a,b) = 3 conjg(gxa1(a,i)) r2(i,b) 96 !stored as 11 22 33 32 31 21 97 !rank2c(re,1) = 3.d0*(gxa1(re,1)*r2(re,1,1)+gxa1(im,1)*r2(im,1,1)& 98 !& +gxa1(re,6)*r2(re,2,1)+gxa1(im,6)*r2(im,2,1)& 99 !& +gxa1(re,5)*r2(re,3,1)+gxa1(im,5)*r2(im,3,1)) 100 !rank2c(re,2) = 3.d0*(gxa1(re,6)*r2(re,1,2)+gxa1(im,6)*r2(im,1,2)& 101 !& +gxa1(re,2)*r2(re,2,2)+gxa1(im,2)*r2(im,2,2)& 102 !& +gxa1(re,4)*r2(re,3,2)+gxa1(im,4)*r2(im,3,2)) 103 !rank2c(re,3) = 3.d0*(gxa1(re,5)*r2(re,1,3)+gxa1(im,5)*r2(im,1,3)& 104 !& +gxa1(re,4)*r2(re,2,3)+gxa1(im,4)*r2(im,2,3)& 105 !& +gxa1(re,3)*r2(re,3,3)+gxa1(im,3)*r2(im,3,3)) 106 rank2c(re,4) = 3.d0*(gxa1(re,5)*r2(re,1,2)+gxa1(im,5)*r2(im,1,2)& 107 & +gxa1(re,4)*r2(re,2,2)+gxa1(im,4)*r2(im,2,2)& 108 & +gxa1(re,3)*r2(re,3,2)+gxa1(im,3)*r2(im,3,2)) 109 rank2c(re,5) = 3.d0*(gxa1(re,5)*r2(re,1,1)+gxa1(im,5)*r2(im,1,1)& 110 & +gxa1(re,4)*r2(re,2,1)+gxa1(im,4)*r2(im,2,1)& 111 & +gxa1(re,3)*r2(re,3,1)+gxa1(im,3)*r2(im,3,1)) 112 rank2c(re,6) = 3.d0*(gxa1(re,6)*r2(re,1,1)+gxa1(im,6)*r2(im,1,1)& 113 & +gxa1(re,2)*r2(re,2,1)+gxa1(im,2)*r2(im,2,1)& 114 & +gxa1(re,4)*r2(re,3,1)+gxa1(im,4)*r2(im,3,1)) 115 !rank2c(im,1) = 3.d0*(gxa1(re,1)*r2(im,1,1)-gxa1(im,1)*r2(re,1,1)& 116 !& +gxa1(re,6)*r2(im,2,1)-gxa1(im,6)*r2(re,2,1)& 117 !& +gxa1(re,5)*r2(im,3,1)-gxa1(im,5)*r2(re,3,1)) 118 !rank2c(im,2) = 3.d0*(gxa1(re,6)*r2(im,1,2)-gxa1(im,6)*r2(re,1,2)& 119 !& +gxa1(re,2)*r2(im,2,2)-gxa1(im,2)*r2(re,2,2)& 120 !& +gxa1(re,4)*r2(im,3,2)-gxa1(im,4)*r2(re,3,2)) 121 !rank2c(im,3) = 3.d0*(gxa1(re,5)*r2(im,1,3)-gxa1(im,5)*r2(re,1,3)& 122 !& +gxa1(re,4)*r2(im,2,3)-gxa1(im,4)*r2(re,2,3)& 123 !& +gxa1(re,3)*r2(im,3,3)-gxa1(im,3)*r2(re,3,3)) 124 rank2c(im,4) = 3.d0*(gxa1(re,5)*r2(im,1,2)-gxa1(im,5)*r2(re,1,2)& 125 & +gxa1(re,4)*r2(im,2,2)-gxa1(im,4)*r2(re,2,2)& 126 & +gxa1(re,3)*r2(im,3,2)-gxa1(im,3)*r2(re,3,2)) 127 rank2c(im,5) = 3.d0*(gxa1(re,5)*r2(im,1,1)-gxa1(im,5)*r2(re,1,1)& 128 & +gxa1(re,4)*r2(im,2,1)-gxa1(im,4)*r2(re,2,1)& 129 & +gxa1(re,3)*r2(im,3,1)-gxa1(im,3)*r2(re,3,1)) 130 rank2c(im,6) = 3.d0*(gxa1(re,6)*r2(im,1,1)-gxa1(im,6)*r2(re,1,1)& 131 & +gxa1(re,2)*r2(im,2,1)-gxa1(im,2)*r2(re,2,1)& 132 & +gxa1(re,4)*r2(im,3,1)-gxa1(im,4)*r2(re,3,1)) 133 134 end subroutine cont22cso