TABLE OF CONTENTS


ABINIT/cont22cso [ Functions ]

[ Top ] [ 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