w90_wannier90_readwrite_write Subroutine

public subroutine w90_wannier90_readwrite_write(atom_data, band_plot, dis_control, dis_spheres, fermi_energy_list, fermi_surface_data, kpt_latt, output_file, wvfn_read, wann_control, proj, proj_input, real_space_ham, select_proj, kpoint_path, tran, print_output, wannier_data, wann_plot, w90_calculation, real_lattice, symmetrize_eps, mp_grid, num_bands, num_kpts, num_proj, num_wann, optimisation, cp_pp, gamma_only, lsitesymmetry, spinors, use_bloch_phases, stdout)

Uses

  • proc~~w90_wannier90_readwrite_write~~UsesGraph proc~w90_wannier90_readwrite_write w90_wannier90_readwrite_write module~w90_utility w90_utility proc~w90_wannier90_readwrite_write->module~w90_utility module~w90_comms w90_comms module~w90_utility->module~w90_comms module~w90_constants w90_constants module~w90_utility->module~w90_constants module~w90_comms->module~w90_constants module~w90_error_base w90_error_base module~w90_comms->module~w90_error_base

write wannier90 parameters to stdout

Arguments

Type IntentOptional Attributes Name
type(atom_data_type), intent(in) :: atom_data
type(band_plot_type), intent(in) :: band_plot
type(dis_control_type), intent(in) :: dis_control
type(dis_spheres_type), intent(in) :: dis_spheres
real(kind=dp), intent(in), allocatable :: fermi_energy_list(:)
type(fermi_surface_plot_type), intent(in) :: fermi_surface_data
real(kind=dp), intent(in) :: kpt_latt(:,:)
type(output_file_type), intent(in) :: output_file
type(wvfn_read_type), intent(in) :: wvfn_read
type(wann_control_type), intent(in) :: wann_control
type(proj_type), intent(in), allocatable :: proj(:)
type(proj_type), intent(in), allocatable :: proj_input(:)
type(real_space_ham_type), intent(in) :: real_space_ham
type(select_projection_type), intent(in) :: select_proj
type(kpoint_path_type), intent(in) :: kpoint_path
type(transport_type), intent(in) :: tran
type(print_output_type), intent(in) :: print_output
type(wannier_data_type), intent(in) :: wannier_data
type(wannier_plot_type), intent(in) :: wann_plot
type(w90_calculation_type), intent(in) :: w90_calculation
real(kind=dp), intent(in) :: real_lattice(3,3)
real(kind=dp), intent(in) :: symmetrize_eps
integer, intent(in) :: mp_grid(3)
integer, intent(in) :: num_bands
integer, intent(in) :: num_kpts
integer, intent(in) :: num_proj
integer, intent(in) :: num_wann
integer, intent(in) :: optimisation
logical, intent(in) :: cp_pp
logical, intent(in) :: gamma_only
logical, intent(in) :: lsitesymmetry
logical, intent(in) :: spinors
logical, intent(in) :: use_bloch_phases
integer, intent(in) :: stdout

Calls

proc~~w90_wannier90_readwrite_write~~CallsGraph proc~w90_wannier90_readwrite_write w90_wannier90_readwrite_write proc~utility_cart_to_frac utility_cart_to_frac proc~w90_wannier90_readwrite_write->proc~utility_cart_to_frac proc~utility_frac_to_cart utility_frac_to_cart proc~w90_wannier90_readwrite_write->proc~utility_frac_to_cart proc~utility_inverse_mat utility_inverse_mat proc~w90_wannier90_readwrite_write->proc~utility_inverse_mat proc~utility_recip_lattice_base utility_recip_lattice_base proc~w90_wannier90_readwrite_write->proc~utility_recip_lattice_base proc~utility_inv3 utility_inv3 proc~utility_inverse_mat->proc~utility_inv3 proc~utility_recip_lattice_base->proc~utility_inv3

Called by

proc~~w90_wannier90_readwrite_write~~CalledByGraph proc~w90_wannier90_readwrite_write w90_wannier90_readwrite_write proc~w90_print_info~2 w90_print_info proc~w90_print_info~2->proc~w90_wannier90_readwrite_write proc~w90_print_info w90_print_info proc~w90_print_info->proc~w90_print_info~2 program~wannier wannier program~wannier->proc~w90_print_info~2

Source Code

  subroutine w90_wannier90_readwrite_write(atom_data, band_plot, dis_control, dis_spheres, &
                                           fermi_energy_list, fermi_surface_data, kpt_latt, &
                                           output_file, wvfn_read, wann_control, proj, proj_input, &
                                           real_space_ham, select_proj, kpoint_path, tran, &
                                           print_output, wannier_data, wann_plot, w90_calculation, &
                                           real_lattice, symmetrize_eps, mp_grid, num_bands, &
                                           num_kpts, num_proj, num_wann, optimisation, cp_pp, &
                                           gamma_only, lsitesymmetry, spinors, use_bloch_phases, &
                                           stdout)
    !================================================!
    !
    !! write wannier90 parameters to stdout
    !
    !================================================
    use w90_utility, only: utility_recip_lattice_base, utility_inverse_mat, utility_cart_to_frac, &
                           utility_frac_to_cart

    implicit none

    !passed vaiables
    type(w90_calculation_type), intent(in) :: w90_calculation
    type(output_file_type), intent(in) :: output_file
    type(real_space_ham_type), intent(in) :: real_space_ham
    type(wvfn_read_type), intent(in) :: wvfn_read
    type(print_output_type), intent(in) :: print_output
    type(band_plot_type), intent(in) :: band_plot
    type(wann_control_type), intent(in) :: wann_control
    type(wannier_data_type), intent(in) :: wannier_data
    type(dis_control_type), intent(in) :: dis_control
    type(dis_spheres_type), intent(in) :: dis_spheres
    type(fermi_surface_plot_type), intent(in) :: fermi_surface_data
    type(transport_type), intent(in) :: tran
    type(atom_data_type), intent(in) :: atom_data
    type(select_projection_type), intent(in) :: select_proj
    type(proj_type), allocatable, intent(in) :: proj_input(:)
    type(kpoint_path_type), intent(in) :: kpoint_path
    type(wannier_plot_type), intent(in) :: wann_plot
    type(proj_type), allocatable, intent(in) :: proj(:)

    integer, intent(in) :: num_bands
    integer, intent(in) :: num_wann
    integer, intent(in) :: stdout
    integer, intent(in) :: mp_grid(3)
    integer, intent(in) :: num_proj
    integer, intent(in) :: num_kpts
    integer, intent(in) :: optimisation

    real(kind=dp), intent(in) :: real_lattice(3, 3)
    real(kind=dp), intent(in) :: symmetrize_eps
    real(kind=dp), intent(in) :: kpt_latt(:, :)
    real(kind=dp), allocatable, intent(in) :: fermi_energy_list(:)

    ! RS: symmetry-adapted Wannier functions
    logical, intent(in) :: lsitesymmetry
    logical, intent(in) :: cp_pp, use_bloch_phases
    logical, intent(in) :: gamma_only
    logical, intent(in) :: spinors

    ! local variables
    character(len=4) :: one_dim_axis
    integer :: i, nkp, loop, nat, nsp, bands_num_spec_points
    logical :: disentanglement
    real(kind=dp) :: ccentres_frac(3)
    real(kind=dp) :: cell_volume
    real(kind=dp) :: recip_lattice(3, 3), inv_lattice(3, 3), pos_frac(3), kpt_cart(3), volume

    disentanglement = (num_bands > num_wann)

    ! `one_dim_axis` is only meaningful when the system is treated as reduced-
    ! dimensional, but it is printed unconditionally below (for any run with
    ! transport enabled or iprint > 2). Without a default it would be written
    ! while undefined whenever the input does not set `one_dim_axis`.
    one_dim_axis = 'none'
    if (real_space_ham%one_dim_dir == 1) one_dim_axis = 'x'
    if (real_space_ham%one_dim_dir == 2) one_dim_axis = 'y'
    if (real_space_ham%one_dim_dir == 3) one_dim_axis = 'z'

    call utility_inverse_mat(real_lattice, inv_lattice)

    ! skip most printout if (w90_calculation%transport .and. tran%read_ht); continues with transport at end

    if (print_output%iprint > 0 .and. .not. (w90_calculation%transport .and. tran%read_ht)) then

      ! System
      write (stdout, *)
      write (stdout, '(36x,a6)') '------'
      write (stdout, '(36x,a6)') 'SYSTEM'
      write (stdout, '(36x,a6)') '------'
      write (stdout, *)
      if (trim(print_output%length_unit) == 'Ang') then
        write (stdout, '(30x,a21)') 'Lattice Vectors (Ang)'
      else
        write (stdout, '(28x,a22)') 'Lattice Vectors (Bohr)'
      end if
      write (stdout, 101) 'a_1', (real_lattice(1, I)*print_output%lenconfac, i=1, 3)
      write (stdout, 101) 'a_2', (real_lattice(2, I)*print_output%lenconfac, i=1, 3)
      write (stdout, 101) 'a_3', (real_lattice(3, I)*print_output%lenconfac, i=1, 3)
      write (stdout, *)
      cell_volume = real_lattice(1, 1)*(real_lattice(2, 2)*real_lattice(3, 3) - real_lattice(3, 2)*real_lattice(2, 3)) + &
                    real_lattice(1, 2)*(real_lattice(2, 3)*real_lattice(3, 1) - real_lattice(3, 3)*real_lattice(2, 1)) + &
                    real_lattice(1, 3)*(real_lattice(2, 1)*real_lattice(3, 2) - real_lattice(3, 1)*real_lattice(2, 2))
      write (stdout, '(19x,a17,3x,f11.5)', advance='no') &
        'Unit Cell Volume:', cell_volume*print_output%lenconfac**3
      if (trim(print_output%length_unit) == 'Ang') then
        write (stdout, '(2x,a7)') '(Ang^3)'
      else
        write (stdout, '(2x,a8)') '(Bohr^3)'
      end if
      write (stdout, *)
      if (trim(print_output%length_unit) == 'Ang') then
        write (stdout, '(24x,a33)') 'Reciprocal-Space Vectors (Ang^-1)'
      else
        write (stdout, '(22x,a34)') 'Reciprocal-Space Vectors (Bohr^-1)'
      end if
      call utility_recip_lattice_base(real_lattice, recip_lattice, volume)
      write (stdout, 101) 'b_1', (recip_lattice(1, I)/print_output%lenconfac, i=1, 3)
      write (stdout, 101) 'b_2', (recip_lattice(2, I)/print_output%lenconfac, i=1, 3)
      write (stdout, 101) 'b_3', (recip_lattice(3, I)/print_output%lenconfac, i=1, 3)
      write (stdout, *) ' '
      ! Atoms
      if (atom_data%num_atoms > 0) then
        write (stdout, '(1x,a)') '*----------------------------------------------------------------------------*'
        if (trim(print_output%length_unit) == 'Ang') then
          write (stdout, '(1x,a)') '|   Site       Fractional Coordinate          Cartesian Coordinate (Ang)     |'
        else
          write (stdout, '(1x,a)') '|   Site       Fractional Coordinate          Cartesian Coordinate (Bohr)    |'
        end if
        write (stdout, '(1x,a)') '+----------------------------------------------------------------------------+'
        do nsp = 1, atom_data%num_species
          do nat = 1, atom_data%species_num(nsp)
            call utility_cart_to_frac(atom_data%pos_cart(:, nat, nsp), pos_frac, inv_lattice)
            write (stdout, '(1x,a1,1x,a2,1x,i3,3F10.5,3x,a1,1x,3F10.5,4x,a1)') &
    &                 '|', atom_data%symbol(nsp), nat, pos_frac(:),&
    &                 '|', atom_data%pos_cart(:, nat, nsp)*print_output%lenconfac, '|'
          end do
        end do
        write (stdout, '(1x,a)') '*----------------------------------------------------------------------------*'
      else
        write (stdout, '(25x,a)') 'No atom positions specified'
      end if
      ! Constrained centres
      if (wann_control%constrain%selective_loc .and. &
          wann_control%constrain%constrain) then
        write (stdout, *) ' '
        write (stdout, '(1x,a)') '*----------------------------------------------------------------------------*'
        write (stdout, '(1x,a)') '| Wannier#        Original Centres              Constrained centres          |'
        write (stdout, '(1x,a)') '+----------------------------------------------------------------------------+'
        do i = 1, wann_control%constrain%slwf_num
          call utility_cart_to_frac(wann_control%constrain%centres(i, :), ccentres_frac, inv_lattice)
          ! note, this printout is in crystal coordinates; not sure why wannier_centres are printed here??
          write (stdout, '(1x,a1,2x,i3,2x,3F10.5,3x,a1,1x,3F10.5,4x,a1)') &
    &                    '|', i, ccentres_frac(:), '|', wannier_data%centres(:, i), '|'
        end do
        write (stdout, '(1x,a)') '*----------------------------------------------------------------------------*'
      end if
      ! Projections
      if (print_output%iprint > 1 .and. allocated(proj_input)) then
        write (stdout, '(32x,a)') '-----------'
        write (stdout, '(32x,a)') 'PROJECTIONS'
        write (stdout, '(32x,a)') '-----------'
        write (stdout, *) ' '
        write (stdout, '(1x,a)') '+----------------------------------------------------------------------------+'
        write (stdout, '(1x,a)') '|     Frac. Coord.   l mr  r        z-axis               x-axis          Z/a |'
        write (stdout, '(1x,a)') '+----------------------------------------------------------------------------+'
        do nsp = 1, num_proj
          write (stdout, '(1x,a1,3(1x,f5.2),1x,i2,1x,i2,1x,i2,3(1x,f6.3),3(1x,f6.3),2x,f4.1,1x,a1)') &
            '|', proj_input(nsp)%site(1), proj_input(nsp)%site(2), &
            proj_input(nsp)%site(3), proj_input(nsp)%l, &
            proj_input(nsp)%m, proj_input(nsp)%radial, &
            proj_input(nsp)%z(1), proj_input(nsp)%z(2), &
            proj_input(nsp)%z(3), proj_input(nsp)%x(1), &
            proj_input(nsp)%x(2), proj_input(nsp)%x(3), &
            proj_input(nsp)%zona, '|'
        end do
        write (stdout, '(1x,a)') '+----------------------------------------------------------------------------+'
        write (stdout, *) ' '
      end if

      if (print_output%iprint > 1 .and. select_proj%lselproj .and. &
          allocated(wann_control%guiding_centres%centres)) then
        write (stdout, '(30x,a)') '--------------------'
        write (stdout, '(30x,a)') 'SELECTED PROJECTIONS'
        write (stdout, '(30x,a)') '--------------------'
        write (stdout, *) ' '
        write (stdout, '(1x,a)') '+----------------------------------------------------------------------------+'
        write (stdout, '(1x,a)') '|     Frac. Coord.   l mr  r        z-axis               x-axis          Z/a |'
        write (stdout, '(1x,a)') '+----------------------------------------------------------------------------+'
        do nsp = 1, num_wann
          if (select_proj%proj2wann_map(nsp) < 0) cycle
          write (stdout, '(1x,a1,3(1x,f5.2),1x,i2,1x,i2,1x,i2,3(1x,f6.3),3(1x,f6.3),2x,f4.1,1x,a1)')&
              &              '|', wann_control%guiding_centres%centres(1, nsp), &
              wann_control%guiding_centres%centres(2, nsp), &
              wann_control%guiding_centres%centres(3, nsp), proj(nsp)%l, &
              proj(nsp)%m, proj(nsp)%radial, &
               proj(nsp)%z(1), proj(nsp)%z(2), proj(nsp)%z(3), proj(nsp)%x(1), &
               proj(nsp)%x(2), proj(nsp)%x(3), proj(nsp)%zona, '|'
        end do
        write (stdout, '(1x,a)') '+----------------------------------------------------------------------------+'
        write (stdout, *) ' '
      end if

      ! K-points
      write (stdout, '(32x,a)') '------------'
      write (stdout, '(32x,a)') 'K-POINT GRID'
      write (stdout, '(32x,a)') '------------'
      write (stdout, *) ' '
      write (stdout, '(13x,a,i3,1x,a1,i3,1x,a1,i3,6x,a,i5)') 'Grid size =', mp_grid(1), 'x', mp_grid(2), 'x', mp_grid(3), &
        'Total points =', num_kpts
      write (stdout, *) ' '
      if (print_output%iprint > 1) then
        write (stdout, '(1x,a)') '*----------------------------------------------------------------------------*'
        if (trim(print_output%length_unit) == 'Ang') then
          write (stdout, '(1x,a)') '| k-point      Fractional Coordinate        Cartesian Coordinate (Ang^-1)    |'
        else
          write (stdout, '(1x,a)') '| k-point      Fractional Coordinate        Cartesian Coordinate (Bohr^-1)   |'
        end if
        write (stdout, '(1x,a)') '+----------------------------------------------------------------------------+'
        do nkp = 1, num_kpts
          call utility_frac_to_cart(kpt_latt(:, nkp), kpt_cart, recip_lattice)
          write (stdout, '(1x,a1,i6,1x,3F10.5,3x,a1,1x,3F10.5,4x,a1)') '|', nkp, kpt_latt(:, nkp), '|', &
            kpt_cart(:)/print_output%lenconfac, '|'
        end do
        write (stdout, '(1x,a)') '*----------------------------------------------------------------------------*'
        write (stdout, *) ' '
      end if
      ! Main
      write (stdout, *) ' '
      write (stdout, '(1x,a78)') '*---------------------------------- MAIN ------------------------------------*'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Number of Wannier Functions               :', num_wann, '|'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Number of Objective Wannier Functions     :', &
        wann_control%constrain%slwf_num, '|'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Number of input Bloch states              :', num_bands, '|'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Output verbosity (1=low, 5=high)          :', print_output%iprint, '|'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Timing Level (1=low, 5=high)              :', print_output%timing_level, '|'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Optimisation (0=memory, 3=speed)          :', optimisation, '|'
      write (stdout, '(1x,a46,10x,a8,13x,a1)') '|  Length Unit                               :', trim(print_output%length_unit), '|'
      write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Post-processing setup (write *.nnkp)      :', &
        w90_calculation%postproc_setup, '|'
      write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Using Gamma-only branch of algorithms     :', gamma_only, '|'
      !YN: RS:
      if (lsitesymmetry) then
        write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Using symmetry-adapted WF mode            :', lsitesymmetry, '|'
        write (stdout, '(1x,a46,8x,E10.3,13x,a1)') '|  Tolerance for symmetry condition on U     :', symmetrize_eps, '|'
      end if

      if (cp_pp .or. print_output%iprint > 2) &
        write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  CP code post-processing                   :', &
        cp_pp, '|'
      if (w90_calculation%wannier_plot .or. print_output%iprint > 2) then
        if (wvfn_read%formatted) then
          write (stdout, '(1x,a46,9x,a9,13x,a1)') '|  Wavefunction (UNK) file-type              :', 'formatted', '|'
        else
          write (stdout, '(1x,a46,7x,a11,13x,a1)') '|  Wavefunction (UNK) file-type              :', 'unformatted', '|'
        end if
        if (wvfn_read%spin_channel == 1) then
          write (stdout, '(1x,a46,16x,a2,13x,a1)') '|  Wavefunction spin channel                 :', 'up', '|'
        else
          write (stdout, '(1x,a46,14x,a4,13x,a1)') '|  Wavefunction spin channel                 :', 'down', '|'
        end if
      end if

      write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*'

      ! Wannierise
      write (stdout, '(1x,a78)') '*------------------------------- WANNIERISE ---------------------------------*'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Total number of iterations                :', &
        wann_control%num_iter, '|'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Number of CG steps before reset           :', &
        wann_control%num_cg_steps, '|'
      if (wann_control%lfixstep) then
        write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '|  Fixed step length for minimisation        :', &
          wann_control%fixed_step, '|'
      else
        write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '|  Trial step length for line search         :', &
          wann_control%trial_step, '|'
      end if
      write (stdout, '(1x,a46,8x,E10.3,13x,a1)') '|  Convergence tolerence                     :', &
        wann_control%conv_tol, '|'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Convergence window                        :', &
        wann_control%conv_window, '|'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Iterations between writing output         :', &
        wann_control%num_print_cycles, '|'
      write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Iterations between backing up to disk     :', &
        wann_control%num_dump_cycles, '|'
      write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Write r^2_nm to file                      :', &
        output_file%write_r2mn, '|'
      write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Write xyz WF centres to file              :', &
        output_file%write_xyz, '|'
      write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Write on-site energies <0n|H|0n> to file  :', &
        output_file%write_hr_diag, '|'
      write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Use guiding centre to control phases      :', &
        wann_control%guiding_centres%enable, '|'
      write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Use phases for initial projections        :', &
        use_bloch_phases, '|'
      if (wann_control%guiding_centres%enable .or. print_output%iprint > 2) then
        write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Iterations before starting guiding centres:', &
          wann_control%guiding_centres%num_no_guide_iter, '|'
        write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Iterations between using guiding centres  :', &
          wann_control%guiding_centres%num_guide_cycles, '|'
      end if
      if (wann_control%constrain%selective_loc .or. print_output%iprint > 2) then
        write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Perform selective localization            :', &
          wann_control%constrain%selective_loc, '|'
      end if
      if (wann_control%constrain%constrain .or. print_output%iprint > 2) then
        write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Use constrains in selective localization  :', &
          wann_control%constrain%constrain, '|'
        write (stdout, '(1x,a46,8x,E10.3,13x,a1)') '|  Value of the Lagrange multiplier          :',&
             &wann_control%constrain%lambda, '|'
      end if
      write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*'
      !
      ! Disentanglement
      !
      if (disentanglement .or. print_output%iprint > 2) then
        write (stdout, '(1x,a78)') '*------------------------------- DISENTANGLE --------------------------------*'
        write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Using band disentanglement                :', &
          disentanglement, '|'
        write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Total number of iterations                :', dis_control%num_iter, '|'
        write (stdout, '(1x,a46,10x,F8.3,13x,a1)') '|  Mixing ratio                              :', dis_control%mix_ratio, '|'
        write (stdout, '(1x,a46,8x,ES10.3,13x,a1)') '|  Convergence tolerence                     :', dis_control%conv_tol, '|'
        write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Convergence window                        :', dis_control%conv_window, '|'
        ! GS-start
        if (dis_spheres%num .gt. 0) then
          write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Number of spheres in k-space              :', dis_spheres%num, '|'
          do nkp = 1, dis_spheres%num
            write (stdout, '(1x,a13,I4,a2,2x,3F8.3,a15,F8.3,9x,a1)') &
              '|   center n.', nkp, ' :', dis_spheres%spheres(1:3, nkp), ',    radius   =', dis_spheres%spheres(4, nkp), '|'
          end do
          write (stdout, '(1x,a46,10x,I8,13x,a1)') '|  Index of first Wannier band               :', &
            dis_spheres%first_wann, '|'
        end if
        ! GS-end
        write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*'
      end if
      !
      ! Plotting
      !
      if (w90_calculation%wannier_plot .or. w90_calculation%bands_plot .or. w90_calculation%fermi_surface_plot &
          .or. output_file%write_hr .or. print_output%iprint > 2) then
        !
        write (stdout, '(1x,a78)') '*-------------------------------- PLOTTING ----------------------------------*'
        !
        if (w90_calculation%wannier_plot .or. print_output%iprint > 2) then
          write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Plotting Wannier functions                :', &
            w90_calculation%wannier_plot, '|'
          write (stdout, '(1x,a46,1x,I5,a1,I5,a1,I5,13x,a1)') &
            '|   Size of supercell for plotting           :', &
            wann_plot%supercell(1), 'x', wann_plot%supercell(2), 'x', wann_plot%supercell(3), '|'

          if (real_space_ham%translate_home_cell) then
            write (stdout, '(1x,a46,10x,L8,13x,a1)') &
              '|  Translating WFs to home cell              :', real_space_ham%translate_home_cell, '|'
          end if

          write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   Plotting mode (molecule or crystal)      :', &
            trim(wann_plot%mode), '|'
          if (spinors) then
            write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   Plotting mode for spinor WFs             :', &
              trim(wann_plot%spinor_mode), '|'
            write (stdout, '(1x,a46,10x,L8,13x,a1)') '|   Include phase for spinor WFs             :', &
              wann_plot%spinor_phase, '|'
          end if
          write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   Plotting format                          :', &
            trim(wann_plot%format), '|'
          if (index(wann_plot%format, 'cub') > 0 .or. print_output%iprint > 2) then
            write (stdout, '(1x,a46,10x,F8.3,13x,a1)') '|   Plot radius                              :', &
              wann_plot%radius, '|'
            write (stdout, '(1x,a46,10x,F8.3,13x,a1)') '|   Plot scale                               :', &
              wann_plot%scale, '|'
          end if
          write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*'
        end if
        !
        if (w90_calculation%fermi_surface_plot .or. print_output%iprint > 2) then
          write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Plotting Fermi surface                    :', &
            w90_calculation%fermi_surface_plot, '|'
          write (stdout, '(1x,a46,10x,I8,13x,a1)') '|   Number of plotting points (along b_1)    :', &
            fermi_surface_data%num_points, '|'
          write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   Plotting format                          :', &
            trim(fermi_surface_data%plot_format), '|'
          write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*'
        end if
        !
        if (w90_calculation%bands_plot .or. print_output%iprint > 2) then
          write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Plotting interpolated bandstructure       :', w90_calculation%bands_plot, '|'
          bands_num_spec_points = 0
          if (allocated(kpoint_path%labels)) bands_num_spec_points = size(kpoint_path%labels)
          if (kpoint_path%bands_kpt_explicit) then
            write (stdout, '(1x,a46,10x,I8,13x,a1)') '|   Number of high-symmetry points           :', bands_num_spec_points, '|'
            write (stdout, '(1x,a46,10x,I8,13x,a1)') '|   Total number of points along K-path      :', &
              size(kpoint_path%bands_kpt_frac, 2), '|'
          else
            write (stdout, '(1x,a46,10x,I8,13x,a1)') '|   Number of K-path sections                :', &
              bands_num_spec_points/2, '|'
            write (stdout, '(1x,a46,10x,I8,13x,a1)') '|   Divisions along first K-path section     :', &
              kpoint_path%num_points_first_segment, '|'
          end if
          write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   Output format                            :', &
            trim(band_plot%format), '|'
          write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   Output mode                              :', &
            trim(band_plot%mode), '|'
          if (index(band_plot%mode, 'cut') .ne. 0) then
            write (stdout, '(1x,a46,10x,I8,13x,a1)') '|   Dimension of the system                  :', &
              real_space_ham%system_dim, '|'
            if (real_space_ham%system_dim .eq. 1) &
              write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   System extended in                       :', &
              adjustr(one_dim_axis), '|'
            if (real_space_ham%system_dim .eq. 2) &
              write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   System confined in                       :', &
              adjustr(one_dim_axis), '|'
            write (stdout, '(1x,a46,10x,F8.3,13x,a1)') '|   Hamiltonian cut-off value                :', &
              real_space_ham%hr_cutoff, '|'
            write (stdout, '(1x,a46,10x,F8.3,13x,a1)') '|   Hamiltonian cut-off distance             :', &
              real_space_ham%dist_cutoff, '|'
            write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   Hamiltonian cut-off distance mode        :', &
              trim(real_space_ham%dist_cutoff_mode), '|'
          end if
          write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*'
          if (kpoint_path%bands_kpt_explicit) then
            write (stdout, '(1x,a78)') '|   K-space path high symmetry points:                                       |'
          else
            write (stdout, '(1x,a78)') '|   K-space path sections:                                                   |'
          end if
          if (bands_num_spec_points == 0) then
            write (stdout, '(1x,a78)') '|     None defined                                                           |'
          else
            if (kpoint_path%bands_kpt_explicit) then
              do loop = 1, bands_num_spec_points
                write (stdout, '(1x,a5,a5,1x,3F7.3,a46)') '|    ', kpoint_path%labels(loop), &
                  (kpoint_path%points(i, loop), i=1, 3), '                                             |'
              end do
            else
              do loop = 1, bands_num_spec_points, 2
                write (stdout, '(1x,a10,1x,a5,1x,3F7.3,5x,a3,1x,a5,1x,3F7.3,3x,a1)') '|    From:', &
                  kpoint_path%labels(loop), (kpoint_path%points(i, loop), i=1, 3), &
                  'To:', kpoint_path%labels(loop + 1), (kpoint_path%points(i, loop + 1), i=1, 3), '|'
              end do
            end if
          end if
          write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*'
        end if
        !
        if (output_file%write_hr .or. print_output%iprint > 2) then
          write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Plotting Hamiltonian in WF basis          :', output_file%write_hr, '|'
          write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*'
        end if
        if (output_file%write_vdw_data .or. print_output%iprint > 2) then
          write (stdout, '(1x,a46,10x,L8,13x,a1)') '|  Writing data for Van der Waals post-proc  :', &
            output_file%write_vdw_data, '|'
          write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*'
        end if
        !
      end if
    end if !iprint > 0 and not (transport && read_ht)

    !
    ! Transport
    !
    if (w90_calculation%transport .or. print_output%iprint > 2) then
      !
      write (stdout, '(1x,a78)') '*------------------------------- TRANSPORT ----------------------------------*'
      !
      write (stdout, '(1x,a46,10x,a8,13x,a1)') '|  Transport mode                            :', trim(tran%mode), '|'
      !
      if (tran%read_ht) then
        !
        write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   Hamiltonian from external files          :', 'T', '|'
        !
      else
        !
        write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   Hamiltonian from external files          :', 'F', '|'

        write (stdout, '(1x,a46,10x,a8,13x,a1)') '|   System extended in                       :', &
          adjustr(one_dim_axis), '|'
        !
      end if

      write (stdout, '(1x,a78)') '|   Centre of the unit cell to which WF are translated (fract. coords):      |'
      write (stdout, '(1x,a1,35x,F12.6,a1,F12.6,a1,F12.6,3x,a1)') '|', real_space_ham%translation_centre_frac(1), ',', &
        real_space_ham%translation_centre_frac(2), ',', &
        real_space_ham%translation_centre_frac(3), '|'

      if (size(fermi_energy_list) == 1) then
        write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '|  Fermi energy (eV)                         :', fermi_energy_list(1), '|'
      else
        write (stdout, '(1x,a21,I8,a12,f8.3,a4,f8.3,a3,13x,a1)') '|  Fermi energy     :', size(fermi_energy_list), &
          ' steps from ', fermi_energy_list(1), ' to ', &
          fermi_energy_list(size(fermi_energy_list)), ' eV', '|'
      end if
      !
      write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*'
      !
    end if

101 format(20x, a3, 2x, 3F11.6)

  end subroutine w90_wannier90_readwrite_write