subroutine gyrotropic_outprint_tensor_w(fermi_energy_list, fermi_n, file_unit, omega, arr33N, &
arrN, symmetrize)
!================================================!
implicit none
! arguments
real(kind=dp), allocatable, intent(in) :: fermi_energy_list(:)
integer, intent(in) :: file_unit
real(kind=dp), intent(in) :: omega
integer, intent(in) :: fermi_n
real(kind=dp), optional, intent(in) :: arr33N(:, :, :)
real(kind=dp), optional, intent(in) :: arrN(:)
! symmetrize= True - get symmetric and assimetric parts
! symmetrize= False - write the asymmetric (in xy) tensor gamma_{xyz}
! symmetrize not present - write as is
logical, optional, intent(in) :: symmetrize
! local variables
real(kind=dp) :: xx(fermi_n), yy(fermi_n), zz(fermi_n), &
xy(fermi_n), xz(fermi_n), yz(fermi_n), &
x(fermi_n), y(fermi_n), z(fermi_n)
integer :: i
logical :: lsym
if (present(arr33N)) then
lsym = .false.
if (present(symmetrize)) lsym = symmetrize
if (lsym) then
! Symmetric part
xx = arr33N(1, 1, :)
yy = arr33N(2, 2, :)
zz = arr33N(3, 3, :)
xy = (arr33N(1, 2, :) + arr33N(2, 1, :))/2.0_dp
xz = (arr33N(1, 3, :) + arr33N(3, 1, :))/2.0_dp
yz = (arr33N(2, 3, :) + arr33N(3, 2, :))/2.0_dp
! Antisymmetric part, in polar-vector form
x = (arr33N(2, 3, :) - arr33N(3, 2, :))/2.0_dp
y = (arr33N(3, 1, :) - arr33N(1, 3, :))/2.0_dp
z = (arr33N(1, 2, :) - arr33N(2, 1, :))/2.0_dp
else
xx = arr33N(1, 1, :)
yy = arr33N(2, 2, :)
zz = arr33N(3, 3, :)
xy = arr33N(1, 2, :)
xz = arr33N(1, 3, :)
yz = arr33N(2, 3, :)
x = arr33N(3, 2, :)
y = arr33N(3, 1, :)
z = arr33N(2, 1, :)
end if
if (present(symmetrize)) then
if (symmetrize) then
write (file_unit, '(a1,29x,a1,38x,a14,37x,a2,14x,a15,14x,a1)') '#', "|", "symmetric part", "||", "asymmetric part", "|"
write (file_unit, '(11a15)') '# EFERMI(eV)', "omega(eV)", 'xx', 'yy', 'zz', 'xy', 'xz', 'yz', 'x', 'y', 'z'
else
write (file_unit, '(11a15)') '# EFERMI(eV)', "omega(eV)", 'yzx', 'zxy', 'xyz', 'yzy', 'yzz', 'zxz', 'xyy', 'xyx', 'zxx'
end if
else
write (file_unit, '(11a15)') '# EFERMI(eV)', "omega(eV)", 'xx', 'yy', 'zz', 'xy', 'xz', 'yz', 'zy', 'xz', 'yx'
end if
do i = 1, fermi_n
write (file_unit, '(11E15.6)') fermi_energy_list(i), omega, xx(i), yy(i), zz(i), xy(i), xz(i), yz(i), x(i), y(i), z(i)
end do
end if
if (present(arrN)) then
write (file_unit, '(2a15)') '# EFERMI(eV) '
do i = 1, fermi_n
write (file_unit, '(11E15.6)') fermi_energy_list(i), arrN(i)
end do
end if
write (file_unit, *)
write (file_unit, *)
end subroutine gyrotropic_outprint_tensor_w