gyrotropic_outprint_tensor_w Subroutine

private subroutine gyrotropic_outprint_tensor_w(fermi_energy_list, fermi_n, file_unit, omega, arr33N, arrN, symmetrize)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), allocatable :: fermi_energy_list(:)
integer, intent(in) :: fermi_n
integer, intent(in) :: file_unit
real(kind=dp), intent(in) :: omega
real(kind=dp), intent(in), optional :: arr33N(:,:,:)
real(kind=dp), intent(in), optional :: arrN(:)
logical, intent(in), optional :: symmetrize

Called by

proc~~gyrotropic_outprint_tensor_w~~CalledByGraph proc~gyrotropic_outprint_tensor_w gyrotropic_outprint_tensor_w proc~gyrotropic_outprint_tensor gyrotropic_outprint_tensor proc~gyrotropic_outprint_tensor->proc~gyrotropic_outprint_tensor_w proc~gyrotropic_main gyrotropic_main proc~gyrotropic_main->proc~gyrotropic_outprint_tensor program~postw90 postw90 program~postw90->proc~gyrotropic_main

Source Code

  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