TABLE OF CONTENTS
ABINIT/cont3 [ Functions ]
NAME
cont3
FUNCTION
Compute several specialized contractions needed for the l=3 part of the stress tensor.
COPYRIGHT
Copyright (C) 1998-2018 ABINIT group (DCA, XG, GMR) 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
gxa(2,10)=complex symmetric rank 3 tensor gmet(3,3)=usual metric tensor, a symmetric matrix stored in full storage mode (bohr^-2)
OUTPUT
rank2(6)=2*Re[contraction] given by 2*Re[(15/2)*r3(a,i,j)*r3(b,j,i)-3*r1(i)*r3(a,b,i)-(3/2)*r1(a)*r1(b)] where r3(a,i,j)=gmet(j,k) gxa(a,i,k) and r1(a)=gmet(i,j) gxa(i,j,a). rank2 is stored in the compressed form 11 22 33 32 31 21.
NOTES
Input gxa is a completely symmetric rank 3 tensor (complex) in compressed storage: 111 221 331 321 311 211 222 332 322 333. The output tensor is completely symmetric rank 2, real, and is given by $2 Re[{15 \over 2} r3(a,i,j) r3(b,j,i) - 3 r1(i) r3(a,b,i) - {3 \over 2} r1(a) r1(b)]$ where $r3(a,i,j)=gmet(j,k) gxa(a,i,k)$ and $r1(a)=gmet(i,j) gxa(i,j,a)$. rank2 is stored in the compressed form 11 22 33 32 31 21.
PARENTS
nonlop_pl
CHILDREN
SOURCE
43 #if defined HAVE_CONFIG_H 44 #include "config.h" 45 #endif 46 47 #include "abi_common.h" 48 49 50 subroutine cont3(gxa,gmet,rank2) 51 52 use defs_basis 53 54 !This section has been created automatically by the script Abilint (TD). 55 !Do not modify the following lines by hand. 56 #undef ABI_FUNC 57 #define ABI_FUNC 'cont3' 58 !End of the abilint section 59 60 implicit none 61 62 !Arguments ------------------------------------ 63 !arrays 64 real(dp),intent(in) :: gmet(3,3),gxa(2,10) 65 real(dp),intent(out) :: rank2(6) 66 67 !Local variables------------------------------- 68 !scalars 69 integer,parameter :: im=2,re=1 70 integer :: ii 71 !arrays 72 real(dp) :: r1(2,3),r3(2,18),s13(6),s33(6) 73 74 ! ************************************************************************* 75 76 !Compute r1(a) = gmet(i,j) gxa(i,j,a) 77 78 !Write out components for 3 distinct terms, Re and Im 79 do ii=1,2 80 r1(ii,1)=gmet(1,1)*gxa(ii,1)+gmet(2,2)*gxa(ii,2)+& 81 & gmet(3,3)*gxa(ii,3)+2.d0*(& 82 & gmet(3,2)*gxa(ii,4)+gmet(3,1)*gxa(ii,5)+& 83 & gmet(2,1)*gxa(ii,6)) 84 r1(ii,2)=gmet(1,1)*gxa(ii,6)+gmet(2,2)*gxa(ii,7)+& 85 & gmet(3,3)*gxa(ii,8)+2.d0*(& 86 & gmet(3,2)*gxa(ii,9)+gmet(3,1)*gxa(ii,4)+& 87 & gmet(2,1)*gxa(ii,2)) 88 r1(ii,3)=gmet(1,1)*gxa(ii,5)+gmet(2,2)*gxa(ii,9)+& 89 & gmet(3,3)*gxa(ii,10)+2.d0*(& 90 & gmet(3,2)*gxa(ii,8)+gmet(3,1)*gxa(ii,3)+& 91 & gmet(2,1)*gxa(ii,4)) 92 end do 93 94 !Compute r3(a,b,k)=gmet(k,n) gxa(a,b,n) 95 96 !Write out components for 18 distinct terms, Re and Im 97 !(symmetric in first two indices, not in all permutations) 98 !store as 111 221 331 321 311 211 99 !112 222 332 322 312 212 100 !113 223 333 323 313 213 101 do ii=1,2 102 r3(ii, 1)=gmet(1,1)*gxa(ii,1)+gmet(2,1)*gxa(ii,6)+& 103 & gmet(3,1)*gxa(ii,5) 104 r3(ii, 2)=gmet(1,1)*gxa(ii,2)+gmet(2,1)*gxa(ii,7)+& 105 & gmet(3,1)*gxa(ii,9) 106 r3(ii, 3)=gmet(1,1)*gxa(ii,3)+gmet(2,1)*gxa(ii,8)+& 107 & gmet(3,1)*gxa(ii,10) 108 r3(ii, 4)=gmet(1,1)*gxa(ii,4)+gmet(2,1)*gxa(ii,9)+& 109 & gmet(3,1)*gxa(ii,8) 110 r3(ii, 5)=gmet(1,1)*gxa(ii,5)+gmet(2,1)*gxa(ii,4)+& 111 & gmet(3,1)*gxa(ii,3) 112 r3(ii, 6)=gmet(1,1)*gxa(ii,6)+gmet(2,1)*gxa(ii,2)+& 113 & gmet(3,1)*gxa(ii,4) 114 r3(ii, 7)=gmet(2,1)*gxa(ii,1)+gmet(2,2)*gxa(ii,6)+& 115 & gmet(3,2)*gxa(ii,5) 116 r3(ii, 8)=gmet(2,1)*gxa(ii,2)+gmet(2,2)*gxa(ii,7)+& 117 & gmet(3,2)*gxa(ii,9) 118 r3(ii, 9)=gmet(2,1)*gxa(ii,3)+gmet(2,2)*gxa(ii,8)+& 119 & gmet(3,2)*gxa(ii,10) 120 r3(ii,10)=gmet(2,1)*gxa(ii,4)+gmet(2,2)*gxa(ii,9)+& 121 & gmet(3,2)*gxa(ii,8) 122 r3(ii,11)=gmet(2,1)*gxa(ii,5)+gmet(2,2)*gxa(ii,4)+& 123 & gmet(3,2)*gxa(ii,3) 124 r3(ii,12)=gmet(2,1)*gxa(ii,6)+gmet(2,2)*gxa(ii,2)+& 125 & gmet(3,2)*gxa(ii,4) 126 r3(ii,13)=gmet(3,1)*gxa(ii,1)+gmet(3,2)*gxa(ii,6)+& 127 & gmet(3,3)*gxa(ii,5) 128 r3(ii,14)=gmet(3,1)*gxa(ii,2)+gmet(3,2)*gxa(ii,7)+& 129 & gmet(3,3)*gxa(ii,9) 130 r3(ii,15)=gmet(3,1)*gxa(ii,3)+gmet(3,2)*gxa(ii,8)+& 131 & gmet(3,3)*gxa(ii,10) 132 r3(ii,16)=gmet(3,1)*gxa(ii,4)+gmet(3,2)*gxa(ii,9)+& 133 & gmet(3,3)*gxa(ii,8) 134 r3(ii,17)=gmet(3,1)*gxa(ii,5)+gmet(3,2)*gxa(ii,4)+& 135 & gmet(3,3)*gxa(ii,3) 136 r3(ii,18)=gmet(3,1)*gxa(ii,6)+gmet(3,2)*gxa(ii,2)+& 137 & gmet(3,3)*gxa(ii,4) 138 139 end do 140 141 !Now need 142 !2*Re[(15/2)*r3(a,i,j)*r3(b,j,i)-3*r1(i)*r3(a,b,i)-(3/2)*r1(a)*r1(b)]. 143 144 !Write out s33(a,b)=2*Re[r3(a,i,j)*r3(b,j,i)] 145 146 s33(1)=2.d0*(r3(re, 1)*r3(re, 1)+r3(im, 1)*r3(im, 1)+& 147 & r3(re,12)*r3(re,12)+r3(im,12)*r3(im,12)+& 148 & r3(re,17)*r3(re,17)+r3(im,17)*r3(im,17)+& 149 & r3(re,11)*r3(re,18)+r3(im,11)*r3(im,18)+& 150 & r3(re,18)*r3(re,11)+r3(im,18)*r3(im,11)+& 151 & r3(re, 5)*r3(re,13)+r3(im, 5)*r3(im,13)+& 152 & r3(re,13)*r3(re, 5)+r3(im,13)*r3(im, 5)+& 153 & r3(re, 6)*r3(re, 7)+r3(im, 6)*r3(im, 7)+& 154 & r3(re, 7)*r3(re, 6)+r3(im, 7)*r3(im, 6)) 155 156 s33(2)=2.d0*(r3(re, 6)*r3(re, 6)+r3(im, 6)*r3(im, 6)+& 157 & r3(re, 8)*r3(re, 8)+r3(im, 8)*r3(im, 8)+& 158 & r3(re,16)*r3(re,16)+r3(im,16)*r3(im,16)+& 159 & r3(re,10)*r3(re,14)+r3(im,10)*r3(im,14)+& 160 & r3(re,14)*r3(re,10)+r3(im,14)*r3(im,10)+& 161 & r3(re, 4)*r3(re,18)+r3(im, 4)*r3(im,18)+& 162 & r3(re,18)*r3(re, 4)+r3(im,18)*r3(im, 4)+& 163 & r3(re, 2)*r3(re,12)+r3(im, 2)*r3(im,12)+& 164 & r3(re,12)*r3(re, 2)+r3(im,12)*r3(im, 2)) 165 166 s33(3)=2.d0*(r3(re, 5)*r3(re, 5)+r3(im, 5)*r3(im, 5)+& 167 & r3(re,10)*r3(re,10)+r3(im,10)*r3(im,10)+& 168 & r3(re,15)*r3(re,15)+r3(im,15)*r3(im,15)+& 169 & r3(re, 9)*r3(re,16)+r3(im, 9)*r3(im,16)+& 170 & r3(re,16)*r3(re, 9)+r3(im,16)*r3(im, 9)+& 171 & r3(re, 3)*r3(re,17)+r3(im, 3)*r3(im,17)+& 172 & r3(re,17)*r3(re, 3)+r3(im,17)*r3(im, 3)+& 173 & r3(re, 4)*r3(re,11)+r3(im, 4)*r3(im,11)+& 174 & r3(re,11)*r3(re, 4)+r3(im,11)*r3(im, 4)) 175 176 s33(4)=2.d0*(r3(re, 5)*r3(re, 6)+r3(im, 5)*r3(im, 6)+& 177 & r3(re,10)*r3(re, 8)+r3(im,10)*r3(im, 8)+& 178 & r3(re,15)*r3(re,16)+r3(im,15)*r3(im,16)+& 179 & r3(re, 9)*r3(re,14)+r3(im, 9)*r3(im,14)+& 180 & r3(re,16)*r3(re,10)+r3(im,16)*r3(im,10)+& 181 & r3(re, 3)*r3(re,18)+r3(im, 3)*r3(im,18)+& 182 & r3(re,17)*r3(re, 4)+r3(im,17)*r3(im, 4)+& 183 & r3(re, 4)*r3(re,12)+r3(im, 4)*r3(im,12)+& 184 & r3(re,11)*r3(re, 2)+r3(im,11)*r3(im, 2)) 185 186 s33(5)=2.d0*(r3(re, 5)*r3(re, 1)+r3(im, 5)*r3(im, 1)+& 187 & r3(re,10)*r3(re,12)+r3(im,10)*r3(im,12)+& 188 & r3(re,15)*r3(re,17)+r3(im,15)*r3(im,17)+& 189 & r3(re, 9)*r3(re,18)+r3(im, 9)*r3(im,18)+& 190 & r3(re,16)*r3(re,11)+r3(im,16)*r3(im,11)+& 191 & r3(re, 3)*r3(re,13)+r3(im, 3)*r3(im,13)+& 192 & r3(re,17)*r3(re, 5)+r3(im,17)*r3(im, 5)+& 193 & r3(re, 4)*r3(re, 7)+r3(im, 4)*r3(im, 7)+& 194 & r3(re,11)*r3(re, 6)+r3(im,11)*r3(im, 6)) 195 196 s33(6)=2.d0*(r3(re, 6)*r3(re, 1)+r3(im, 6)*r3(im, 1)+& 197 & r3(re, 8)*r3(re,12)+r3(im, 8)*r3(im,12)+& 198 & r3(re,16)*r3(re,17)+r3(im,16)*r3(im,17)+& 199 & r3(re,10)*r3(re,18)+r3(im,10)*r3(im,18)+& 200 & r3(re,14)*r3(re,11)+r3(im,14)*r3(im,11)+& 201 & r3(re, 4)*r3(re,13)+r3(im, 4)*r3(im,13)+& 202 & r3(re,18)*r3(re, 5)+r3(im,18)*r3(im, 5)+& 203 & r3(re, 2)*r3(re, 7)+r3(im, 2)*r3(im, 7)+& 204 & r3(re,12)*r3(re, 6)+r3(im,12)*r3(im, 6)) 205 206 207 !Write out s13(a,b)=2*Re[r1(i)*r3(a,b,i)] 208 209 s13(1)=2.d0*(r1(re,1)*r3(re, 1)+r1(im,1)*r3(im, 1)+& 210 & r1(re,2)*r3(re, 7)+r1(im,2)*r3(im, 7)+& 211 & r1(re,3)*r3(re,13)+r1(im,3)*r3(im,13)) 212 s13(2)=2.d0*(r1(re,1)*r3(re, 2)+r1(im,1)*r3(im, 2)+& 213 & r1(re,2)*r3(re, 8)+r1(im,2)*r3(im, 8)+& 214 & r1(re,3)*r3(re,14)+r1(im,3)*r3(im,14)) 215 s13(3)=2.d0*(r1(re,1)*r3(re, 3)+r1(im,1)*r3(im, 3)+& 216 & r1(re,2)*r3(re, 9)+r1(im,2)*r3(im, 9)+& 217 & r1(re,3)*r3(re,15)+r1(im,3)*r3(im,15)) 218 s13(4)=2.d0*(r1(re,1)*r3(re, 4)+r1(im,1)*r3(im, 4)+& 219 & r1(re,2)*r3(re,10)+r1(im,2)*r3(im,10)+& 220 & r1(re,3)*r3(re,16)+r1(im,3)*r3(im,16)) 221 s13(5)=2.d0*(r1(re,1)*r3(re, 5)+r1(im,1)*r3(im, 5)+& 222 & r1(re,2)*r3(re,11)+r1(im,2)*r3(im,11)+& 223 & r1(re,3)*r3(re,17)+r1(im,3)*r3(im,17)) 224 s13(6)=2.d0*(r1(re,1)*r3(re, 6)+r1(im,1)*r3(im, 6)+& 225 & r1(re,2)*r3(re,12)+r1(im,2)*r3(im,12)+& 226 & r1(re,3)*r3(re,18)+r1(im,3)*r3(im,18)) 227 228 !Finally, write out the six terms as final answer 229 !rank2(a,b)=(15/2)*s33(a,b)-3*s13(a,b)-(3/2)*2*Re[r1(a)*r1(b)] 230 231 rank2(1)=7.5d0*s33(1)-3.d0*s13(1)& 232 & -3.d0*(r1(re,1)*r1(re,1)+r1(im,1)*r1(im,1)) 233 rank2(2)=7.5d0*s33(2)-3.d0*s13(2)& 234 & -3.d0*(r1(re,2)*r1(re,2)+r1(im,2)*r1(im,2)) 235 rank2(3)=7.5d0*s33(3)-3.d0*s13(3)& 236 & -3.d0*(r1(re,3)*r1(re,3)+r1(im,3)*r1(im,3)) 237 rank2(4)=7.5d0*s33(4)-3.d0*s13(4)& 238 & -3.d0*(r1(re,3)*r1(re,2)+r1(im,3)*r1(im,2)) 239 rank2(5)=7.5d0*s33(5)-3.d0*s13(5)& 240 & -3.d0*(r1(re,3)*r1(re,1)+r1(im,3)*r1(im,1)) 241 rank2(6)=7.5d0*s33(6)-3.d0*s13(6)& 242 & -3.d0*(r1(re,2)*r1(re,1)+r1(im,2)*r1(im,1)) 243 244 end subroutine cont3