TABLE OF CONTENTS
ABINIT/cont22 [ Functions ]
NAME
cont22
FUNCTION
Contract symmetric rank 2 tensor gxa with itself using gmet to produce symmetric rank 2 tensor.
COPYRIGHT
Copyright (C) 1998-2018 ABINIT group (DXA, XG) 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,6)=rank 2 complex tensor gmet(3,3)=real symmetric metric tensor (full storage)
OUTPUT
rank2(6)=rank 2 real tensor (symmetric storage)
NOTES
Symmetric gxa is stored as 11 22 33 32 31 21; gmet(3,3) is symmetric but stored fully (9 elements); output rank2 is stored as 11 22 33 32 31 21. Want $2 Re[contraction]$. $rank2(a,b)=2 Re[gxa(i,a)^"*" gmet(i,j) gxa(j,b)]$.
PARENTS
nonlop_pl
CHILDREN
SOURCE
38 #if defined HAVE_CONFIG_H 39 #include "config.h" 40 #endif 41 42 #include "abi_common.h" 43 44 45 subroutine cont22(gxa,gmet,rank2) 46 47 use defs_basis 48 49 !This section has been created automatically by the script Abilint (TD). 50 !Do not modify the following lines by hand. 51 #undef ABI_FUNC 52 #define ABI_FUNC 'cont22' 53 !End of the abilint section 54 55 implicit none 56 57 !Arguments ------------------------------------ 58 !arrays 59 real(dp),intent(in) :: gmet(3,3),gxa(2,6) 60 real(dp),intent(out) :: rank2(6) 61 62 !Local variables------------------------------- 63 !scalars 64 integer,parameter :: im=2,re=1 65 66 ! ************************************************************************* 67 68 !Simply write out index summations 69 !a=1, b=1 in rank2(a,b) --> maps to index 1 70 rank2(1)=2.0d0*(& 71 & gmet(1,1)*(gxa(re,1)*gxa(re,1)+gxa(im,1)*gxa(im,1))+& 72 & gmet(2,2)*(gxa(re,6)*gxa(re,6)+gxa(im,6)*gxa(im,6))+& 73 & gmet(3,3)*(gxa(re,5)*gxa(re,5)+gxa(im,5)*gxa(im,5))+& 74 & 2.0d0*(& 75 & gmet(3,2)*(gxa(re,5)*gxa(re,6)+gxa(im,5)*gxa(im,6))+& 76 & gmet(3,1)*(gxa(re,5)*gxa(re,1)+gxa(im,5)*gxa(im,1))+& 77 & gmet(2,1)*(gxa(re,6)*gxa(re,1)+gxa(im,6)*gxa(im,1)))) 78 79 !a=2, b=2 in rank2(a,b) --> maps to index 2 80 rank2(2)=2.0d0*(& 81 & gmet(1,1)*(gxa(re,6)*gxa(re,6)+gxa(im,6)*gxa(im,6))+& 82 & gmet(2,2)*(gxa(re,2)*gxa(re,2)+gxa(im,2)*gxa(im,2))+& 83 & gmet(3,3)*(gxa(re,4)*gxa(re,4)+gxa(im,4)*gxa(im,4))+& 84 & 2.0d0*(& 85 & gmet(3,2)*(gxa(re,4)*gxa(re,2)+gxa(im,4)*gxa(im,2))+& 86 & gmet(3,1)*(gxa(re,4)*gxa(re,6)+gxa(im,4)*gxa(im,6))+& 87 & gmet(2,1)*(gxa(re,2)*gxa(re,6)+gxa(im,2)*gxa(im,6)))) 88 89 !a=3, b=3 in rank2(a,b) --> maps to index 3 90 rank2(3)=2.0d0*(& 91 & gmet(1,1)*(gxa(re,5)*gxa(re,5)+gxa(im,5)*gxa(im,5))+& 92 & gmet(2,2)*(gxa(re,4)*gxa(re,4)+gxa(im,4)*gxa(im,4))+& 93 & gmet(3,3)*(gxa(re,3)*gxa(re,3)+gxa(im,3)*gxa(im,3))+& 94 & 2.0d0*(& 95 & gmet(3,2)*(gxa(re,4)*gxa(re,3)+gxa(im,4)*gxa(im,3))+& 96 & gmet(3,1)*(gxa(re,5)*gxa(re,3)+gxa(im,5)*gxa(im,3))+& 97 & gmet(2,1)*(gxa(re,5)*gxa(re,4)+gxa(im,5)*gxa(im,4)))) 98 99 !a=3, b=2 in rank2(a,b) --> maps to index 4 100 rank2(4)=2.0d0*(& 101 & gmet(1,1)*(gxa(re,5)*gxa(re,6)+gxa(im,5)*gxa(im,6))+& 102 & gmet(2,2)*(gxa(re,4)*gxa(re,2)+gxa(im,4)*gxa(im,2))+& 103 & gmet(3,3)*(gxa(re,3)*gxa(re,4)+gxa(im,3)*gxa(im,4))+& 104 & gmet(3,2)*(gxa(re,3)*gxa(re,2)+gxa(im,3)*gxa(im,2))+& 105 & gmet(3,1)*(gxa(re,3)*gxa(re,6)+gxa(im,3)*gxa(im,6))+& 106 & gmet(2,1)*(gxa(re,4)*gxa(re,6)+gxa(im,4)*gxa(im,6))+& 107 & gmet(2,3)*(gxa(re,4)*gxa(re,4)+gxa(im,4)*gxa(im,4))+& 108 & gmet(1,3)*(gxa(re,5)*gxa(re,4)+gxa(im,5)*gxa(im,4))+& 109 & gmet(1,2)*(gxa(re,5)*gxa(re,2)+gxa(im,5)*gxa(im,2))) 110 111 !a=3, b=1 in rank2(a,b) --> maps to index 5 112 rank2(5)=2.0d0*(& 113 & gmet(1,1)*(gxa(re,5)*gxa(re,1)+gxa(im,5)*gxa(im,1))+& 114 & gmet(2,2)*(gxa(re,4)*gxa(re,6)+gxa(im,4)*gxa(im,6))+& 115 & gmet(3,3)*(gxa(re,3)*gxa(re,5)+gxa(im,3)*gxa(im,5))+& 116 & gmet(3,2)*(gxa(re,3)*gxa(re,6)+gxa(im,3)*gxa(im,6))+& 117 & gmet(3,1)*(gxa(re,3)*gxa(re,1)+gxa(im,3)*gxa(im,1))+& 118 & gmet(2,1)*(gxa(re,4)*gxa(re,1)+gxa(im,4)*gxa(im,1))+& 119 & gmet(2,3)*(gxa(re,4)*gxa(re,5)+gxa(im,4)*gxa(im,5))+& 120 & gmet(1,3)*(gxa(re,5)*gxa(re,5)+gxa(im,5)*gxa(im,5))+& 121 & gmet(1,2)*(gxa(re,5)*gxa(re,6)+gxa(im,5)*gxa(im,6))) 122 123 !a=2, b=1 in rank2(a,b) --> maps to index 6 124 rank2(6)=2.0d0*(& 125 & gmet(1,1)*(gxa(re,6)*gxa(re,1)+gxa(im,6)*gxa(im,1))+& 126 & gmet(2,2)*(gxa(re,2)*gxa(re,6)+gxa(im,2)*gxa(im,6))+& 127 & gmet(3,3)*(gxa(re,4)*gxa(re,5)+gxa(im,4)*gxa(im,5))+& 128 & gmet(3,2)*(gxa(re,4)*gxa(re,6)+gxa(im,4)*gxa(im,6))+& 129 & gmet(3,1)*(gxa(re,4)*gxa(re,1)+gxa(im,4)*gxa(im,1))+& 130 & gmet(2,1)*(gxa(re,2)*gxa(re,1)+gxa(im,2)*gxa(im,1))+& 131 & gmet(2,3)*(gxa(re,2)*gxa(re,5)+gxa(im,2)*gxa(im,5))+& 132 & gmet(1,3)*(gxa(re,6)*gxa(re,5)+gxa(im,6)*gxa(im,5))+& 133 & gmet(1,2)*(gxa(re,6)*gxa(re,6)+gxa(im,6)*gxa(im,6))) 134 135 end subroutine cont22