write postw90 parameters to stdout
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(print_output_type), | intent(in) | :: | print_output | |||
| type(w90_system_type), | intent(in) | :: | w90_system | |||
| real(kind=dp), | intent(in), | allocatable | :: | fermi_energy_list(:) | ||
| type(atom_data_type), | intent(in) | :: | atom_data | |||
| integer, | intent(in) | :: | num_wann | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| type(kpoint_path_type), | intent(in) | :: | kpoint_path | |||
| type(pw90_calculation_type), | intent(in) | :: | pw90_calculation | |||
| type(pw90_oper_read_type), | intent(in) | :: | pw90_oper_read | |||
| real(kind=dp), | intent(in) | :: | scissors_shift | |||
| type(pw90_spin_mod_type), | intent(in) | :: | pw90_spin | |||
| type(pw90_kpath_mod_type), | intent(in) | :: | pw90_kpath | |||
| type(pw90_kslice_mod_type), | intent(in) | :: | pw90_kslice | |||
| type(pw90_dos_mod_type), | intent(in) | :: | pw90_dos | |||
| type(pw90_berry_mod_type), | intent(in) | :: | pw90_berry | |||
| type(pw90_gyrotropic_type), | intent(in) | :: | pw90_gyrotropic | |||
| type(pw90_geninterp_mod_type), | intent(in) | :: | pw90_geninterp | |||
| type(pw90_boltzwann_type), | intent(in) | :: | pw90_boltzwann | |||
| type(pw90_extra_io_type), | intent(in) | :: | pw90_extra_io | |||
| integer, | intent(in) | :: | optimisation | |||
| integer, | intent(in) | :: | stdout |
subroutine w90_postw90_readwrite_write(print_output, w90_system, fermi_energy_list, atom_data, & num_wann, real_lattice, kpoint_path, pw90_calculation, & pw90_oper_read, scissors_shift, pw90_spin, pw90_kpath, & pw90_kslice, pw90_dos, pw90_berry, pw90_gyrotropic, & pw90_geninterp, pw90_boltzwann, pw90_extra_io, & optimisation, stdout) !================================================! ! !! write postw90 parameters to stdout ! !================================================ use w90_utility, only: utility_recip_lattice_base, utility_inverse_mat, utility_cart_to_frac implicit none ! arguments type(print_output_type), intent(in) :: print_output type(w90_system_type), intent(in) :: w90_system type(atom_data_type), intent(in) :: atom_data type(kpoint_path_type), intent(in) :: kpoint_path type(pw90_calculation_type), intent(in) :: pw90_calculation type(pw90_oper_read_type), intent(in) :: pw90_oper_read type(pw90_spin_mod_type), intent(in) :: pw90_spin type(pw90_kpath_mod_type), intent(in) :: pw90_kpath type(pw90_kslice_mod_type), intent(in) :: pw90_kslice type(pw90_dos_mod_type), intent(in) :: pw90_dos type(pw90_berry_mod_type), intent(in) :: pw90_berry type(pw90_gyrotropic_type), intent(in) :: pw90_gyrotropic type(pw90_geninterp_mod_type), intent(in) :: pw90_geninterp type(pw90_boltzwann_type), intent(in) :: pw90_boltzwann type(pw90_extra_io_type), intent(in) :: pw90_extra_io real(kind=dp), allocatable, intent(in) :: fermi_energy_list(:) real(kind=dp), intent(in) :: real_lattice(3, 3) real(kind=dp), intent(in) :: scissors_shift integer, intent(in) :: num_wann integer, intent(in) :: optimisation integer, intent(in) :: stdout ! local variables real(kind=dp) :: recip_lattice(3, 3), inv_lattice(3, 3), pos_frac(3), volume real(kind=dp) :: cell_volume integer :: i, loop, nat, nsp ! System write (stdout, *) write (stdout, '(36x,a6)') '------' write (stdout, '(36x,a6)') 'SYSTEM' write (stdout, '(36x,a6)') '------' write (stdout, *) if (print_output%lenconfac .eq. 1.0_dp) 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 (print_output%lenconfac .eq. 1.0_dp) then write (stdout, '(2x,a7)') '(Ang^3)' else write (stdout, '(2x,a8)') '(Bohr^3)' end if write (stdout, *) if (print_output%lenconfac .eq. 1.0_dp) 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 (print_output%lenconfac .eq. 1.0_dp) 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)') '+----------------------------------------------------------------------------+' call utility_inverse_mat(real_lattice, inv_lattice) 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 write (stdout, *) ' ' ! Main write (stdout, *) ' ' write (stdout, '(1x,a78)') '*-------------------------------- POSTW90 -----------------------------------*' write (stdout, '(1x,a46,10x,I8,13x,a1)') '| Number of Wannier Functions :', num_wann, '|' write (stdout, '(1x,a46,10x,I8,13x,a1)') '| Number of electrons per state :', & w90_system%num_elec_per_state, '|' if (abs(scissors_shift) > 1.0e-7_dp .or. print_output%iprint > 0) then write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Scissor shift applied to conduction bands :', scissors_shift, '|' if (w90_system%num_valence_bands > 0) then write (stdout, '(1x,a46,10x,i8,13x,a1)') '| Number of valence bands :', & w90_system%num_valence_bands, '|' else write (stdout, '(1x,a78)') '| Number of valence bands : not defined |' end if end if if (pw90_calculation%spin_decomp .or. print_output%iprint > 2) & write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Spin decomposition :', pw90_calculation%spin_decomp, '|' if (pw90_calculation%spin_moment .or. print_output%iprint > 2) & write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Compute Spin moment :', pw90_calculation%spin_moment, '|' if (pw90_calculation%spin_decomp .or. pw90_calculation%spin_moment .or. print_output%iprint > 2) then write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Polar angle of spin quantisation axis :', pw90_spin%axis_polar, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Azimuthal angle of spin quantisation axis :', pw90_spin%axis_azimuth, '|' if (pw90_oper_read%spn_formatted) then write (stdout, '(1x,a46,9x,a9,13x,a1)') '| Spn file-type :', 'formatted', '|' else write (stdout, '(1x,a46,7x,a11,13x,a1)') '| Spn file-type :', 'unformatted', '|' end if if (pw90_oper_read%uHu_formatted) then write (stdout, '(1x,a46,9x,a9,13x,a1)') '| uHu file-type :', 'formatted', '|' else write (stdout, '(1x,a46,7x,a11,13x,a1)') '| uHu file-type :', 'unformatted', '|' end if end if 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,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,a78)') '*----------------------------------------------------------------------------*' write (stdout, '(1x,a78)') '*------------------------ Global Smearing Parameters ------------------------*' if (pw90_extra_io%smear%use_adaptive) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Adaptive width smearing :', ' T', '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Adaptive smearing factor :', & pw90_extra_io%smear%adaptive_prefactor, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Maximum allowed smearing width (eV) :', & pw90_extra_io%smear%adaptive_max_width, '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Fixed width smearing :', ' T', '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Smearing width :', & pw90_extra_io%smear%fixed_width, '|' end if write (stdout, '(1x,a21,5x,a47,4x,a1)') '| Smearing Function ', & trim(w90_readwrite_get_smearing_type(pw90_extra_io%smear%type_index)), '|' if (pw90_extra_io%global_kmesh_set) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Global interpolation k-points defined :', ' T', '|' if (pw90_extra_io%global_kmesh%spacing > 0.0_dp) then write (stdout, '(1x,a15,i4,1x,a1,i4,1x,a1,i4,16x,a11,f8.3,11x,1a)') '| Grid size = ', & pw90_extra_io%global_kmesh%mesh(1), 'x', pw90_extra_io%global_kmesh%mesh(2), 'x', & pw90_extra_io%global_kmesh%mesh(3), ' Spacing = ', pw90_extra_io%global_kmesh%spacing, '|' else write (stdout, '(1x,a46,2x,i4,1x,a1,i4,1x,a1,i4,13x,1a)') '| Grid size :' & , pw90_extra_io%global_kmesh%mesh(1), 'x', pw90_extra_io%global_kmesh%mesh(2), 'x', & pw90_extra_io%global_kmesh%mesh(3), '|' end if else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Global interpolation k-points defined :', ' F', '|' end if write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*' ! DOS if (pw90_calculation%dos .or. print_output%iprint > 2) then write (stdout, '(1x,a78)') '*---------------------------------- DOS -------------------------------------*' write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Plotting Density of States :', pw90_calculation%dos, '|' if (pw90_dos%num_project > 1) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Wannier Projected DOS :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Wannier Projected DOS :', ' F', '|' end if write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Minimum energy range for DOS plot :', pw90_dos%energy_min, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Maximum energy range for DOS plot :', pw90_dos%energy_max, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Energy step for DOS plot :', pw90_dos%energy_step, '|' if (pw90_dos%smearing%use_adaptive .eqv. pw90_extra_io%smear%use_adaptive .and. & pw90_dos%smearing%adaptive_prefactor == pw90_extra_io%smear%adaptive_prefactor .and. & pw90_dos%smearing%adaptive_max_width == pw90_extra_io%smear%adaptive_max_width .and. & pw90_dos%smearing%fixed_width == pw90_extra_io%smear%fixed_width .and. & pw90_extra_io%smear%type_index == pw90_dos%smearing%type_index) then write (stdout, '(1x,a78)') '| Using global smearing parameters |' else if (pw90_dos%smearing%use_adaptive) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Adaptive width smearing :', ' T', '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Adaptive smearing factor :', & pw90_dos%smearing%adaptive_prefactor, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Maximum allowed smearing width :', & pw90_dos%smearing%adaptive_max_width, '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Fixed width smearing :', ' T', '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Smearing width :', & pw90_dos%smearing%fixed_width, '|' end if write (stdout, '(1x,a21,5x,a47,4x,a1)') '| Smearing Function ', & trim(w90_readwrite_get_smearing_type(pw90_dos%smearing%type_index)), '|' end if if (pw90_berry%tetrahedron_method) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Tetrahedron method (PRB 106, 075125) :', ' T', '|' write (stdout, '(1x,a46,10x,a8,13x,L8)') '| with higher-order correction :', & pw90_berry%tetrahedron_higher_correction, '|' write (stdout, '(1x,a46,10x,E8.3,13x,a1)') '| Tetrahedron cutoff :', & pw90_berry%tetrahedron_cutoff, '|' write (stdout, '(1x,a46,10x,E8.3,13x,a1)') '| Cutoff to avoid band degeneracy :', & pw90_berry%tetrahedron_avoid_degeneracy, '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Tetrahedron method :', ' F', '|' end if if (pw90_extra_io%global_kmesh%mesh(1) == pw90_dos%kmesh%mesh(1) .and. & pw90_extra_io%global_kmesh%mesh(2) == pw90_dos%kmesh%mesh(2) .and. & pw90_extra_io%global_kmesh%mesh(3) == pw90_dos%kmesh%mesh(3)) then write (stdout, '(1x,a78)') '| Using global k-point set for interpolation |' else if (pw90_dos%kmesh%spacing > 0.0_dp) then write (stdout, '(1x,a15,i4,1x,a1,i4,1x,a1,i4,16x,a11,f8.3,11x,1a)') '| Grid size = ', & pw90_dos%kmesh%mesh(1), 'x', pw90_dos%kmesh%mesh(2), 'x', & pw90_dos%kmesh%mesh(3), ' Spacing = ', pw90_dos%kmesh%spacing, '|' else write (stdout, '(1x,a46,2x,i4,1x,a1,i4,1x,a1,i4,13x,1a)') '| Grid size :', & pw90_dos%kmesh%mesh(1), 'x', pw90_dos%kmesh%mesh(2), 'x', & pw90_dos%kmesh%mesh(3), '|' end if end if end if write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*' if (pw90_calculation%kpath .or. print_output%iprint > 2) then write (stdout, '(1x,a78)') '*--------------------------------- KPATH ------------------------------------*' write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Plot Properties along a path in k-space :', pw90_calculation%kpath, '|' write (stdout, '(1x,a46,10x,I8,13x,a1)') '| Divisions along first kpath section :', pw90_kpath%num_points, '|' if (index(pw90_kpath%task, 'bands') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot energy bands :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot energy bands :', ' F', '|' end if if (index(pw90_kpath%task, 'curv') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot Berry curvature :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot Berry curvature :', ' F', '|' end if if (index(pw90_kpath%task, 'morb') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot orbital magnetisation contribution :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot orbital magnetisation contribution :', ' F', '|' end if if (index(pw90_kpath%task, 'shc') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot spin Hall conductivity contribution :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot spin Hall conductivity contribution :', ' F', '|' end if write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Property used to colour code the bands :', trim(pw90_kpath%bands_colour), '|' write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*' write (stdout, '(1x,a78)') '| K-space path sections: |' if (.not. allocated(kpoint_path%labels)) then write (stdout, '(1x,a78)') '| None defined |' else do loop = 1, size(kpoint_path%labels), 2 write (stdout, '(1x,a10,2x,a1,2x,3F7.3,5x,a3,2x,a1,2x,3F7.3,7x,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 write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*' end if if (pw90_calculation%kslice .or. print_output%iprint > 2) then write (stdout, '(1x,a78)') '*--------------------------------- KSLICE -----------------------------------*' write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Plot Properties along a slice in k-space :', pw90_calculation%kslice, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Fermi level used for slice :', fermi_energy_list(1), '|' write (stdout, '(1x,a46,10x,I8,13x,a1)') '| Divisions along first kpath section :', pw90_kpath%num_points, '|' if (index(pw90_kslice%task, 'fermi_lines') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot energy contours (fermi lines) :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot energy contours (fermi lines) :', ' F', '|' end if if (index(pw90_kslice%task, 'curv') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot Berry curvature (sum over occ states):', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot Berry curvature (sum over occ states):', ' F', '|' end if if (index(pw90_kslice%task, 'morb') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot orbital magnetisation contribution :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot orbital magnetisation contribution :', ' F', '|' end if if (index(pw90_kslice%task, 'shc') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot spin Hall conductivity contribution :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Plot spin Hall conductivity contribution :', ' F', '|' end if write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Property used to colour code the lines :', & trim(pw90_kslice%fermi_lines_colour), '|' write (stdout, '(1x,a78)') '| 2D slice parameters (in reduced coordinates): |' write (stdout, '(1x,a14,2x,3F8.3,37x,a1)') '| Corner: ', (pw90_kslice%corner(i), i=1, 3), '|' write (stdout, '(1x,a14,2x,3F8.3,10x,a12,2x,i4,9x,a1)') & '| Vector1: ', (pw90_kslice%b1(i), i=1, 3), ' Divisions:', pw90_kslice%kmesh2d(1), '|' write (stdout, '(1x,a14,2x,3F8.3,10x,a12,2x,i4,9x,a1)') & '| Vector2: ', (pw90_kslice%b2(i), i=1, 3), ' Divisions:', pw90_kslice%kmesh2d(1), '|' write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*' end if if (pw90_calculation%berry .or. print_output%iprint > 2) then write (stdout, '(1x,a78)') '*--------------------------------- BERRY ------------------------------------*' write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Compute Berry Phase related properties :', pw90_calculation%berry, '|' if (index(pw90_berry%task, 'kubo') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Optical Conductivity and JDOS :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Optical Conductivity and JDOS :', ' F', '|' end if if (index(pw90_berry%task, 'ahc') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Anomalous Hall Conductivity :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Anomalous Hall Conductivity :', ' F', '|' end if if (index(pw90_berry%task, 'sc') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Shift Current :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Shift Current :', ' F', '|' end if if (index(pw90_berry%task, 'kdotp') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute k.p expansion coefficients :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute k.p expansion coefficients :', ' F', '|' end if if (index(pw90_berry%task, 'morb') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Orbital Magnetisation :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Orbital Magnetisation :', ' F', '|' end if if (index(pw90_berry%task, 'shc') > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Spin Hall Conductivity :', ' T', '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Compute Spin Hall Conductivity :', ' F', '|' end if write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Lower frequency for optical responses :', & pw90_extra_io%kubo_freq_min, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Upper frequency for optical responses :', & pw90_extra_io%kubo_freq_max, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Step size for optical responses :', & pw90_extra_io%kubo_freq_step, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Upper eigenvalue for optical responses :', pw90_berry%kubo_eigval_max, '|' if (index(pw90_berry%task, 'sc') > 0) then write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Smearing factor for shift current :', pw90_berry%sc_eta, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Frequency theshold for shift current :', pw90_berry%sc_w_thr, '|' write (stdout, '(1x,a46,1x,a27,3x,a1)') '| Bloch sums :', & trim(w90_readwrite_get_convention_type(pw90_berry%sc_phase_conv)), '|' write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Finite eta correction for shift current :', & pw90_berry%sc_use_eta_corr, '|' end if if (index(pw90_berry%task, 'kdotp') > 0) then write (stdout, '(1x,a46,10x,f8.3,1x,f8.3,1x,f8.3,1x,13x,a1)') '| Chosen k-point kdotp_kpoint :', & pw90_berry%kdotp_kpoint(1), pw90_berry%kdotp_kpoint(2), pw90_berry%kdotp_kpoint(3), '|' write (stdout, '(1x,a46,10x,i4,13x,a1)') '| kdotp_num_bands :', & size(pw90_berry%kdotp_bands), '|' write (stdout, '(1x,a46,10x,*(i4))') '| kdotp_bands :', & pw90_berry%kdotp_bands(:) end if if (pw90_berry%kubo_smearing%use_adaptive .eqv. pw90_extra_io%smear%use_adaptive .and. & pw90_berry%kubo_smearing%adaptive_prefactor == pw90_extra_io%smear%adaptive_prefactor .and. & pw90_berry%kubo_smearing%adaptive_max_width == pw90_extra_io%smear%adaptive_max_width & .and. pw90_berry%kubo_smearing%fixed_width == pw90_extra_io%smear%fixed_width .and. & pw90_extra_io%smear%type_index == pw90_berry%kubo_smearing%type_index) then write (stdout, '(1x,a78)') '| Using global smearing parameters |' else if (pw90_berry%kubo_smearing%use_adaptive) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Adaptive width smearing :', ' T', '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Adaptive smearing factor :', & pw90_berry%kubo_smearing%adaptive_prefactor, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Maximum allowed smearing width :', & pw90_berry%kubo_smearing%adaptive_max_width, '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Fixed width smearing :', ' T', '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Smearing width :', & pw90_berry%kubo_smearing%fixed_width, '|' end if write (stdout, '(1x,a21,5x,a47,4x,a1)') '| Smearing Function ', & trim(w90_readwrite_get_smearing_type(pw90_berry%kubo_smearing%type_index)), '|' end if if (pw90_extra_io%global_kmesh%mesh(1) == pw90_berry%kmesh%mesh(1) .and. & pw90_extra_io%global_kmesh%mesh(2) == pw90_berry%kmesh%mesh(2) .and. & pw90_extra_io%global_kmesh%mesh(3) == pw90_berry%kmesh%mesh(3)) then write (stdout, '(1x,a78)') '| Using global k-point set for interpolation |' else if (pw90_berry%kmesh%spacing > 0.0_dp) then write (stdout, '(1x,a15,i4,1x,a1,i4,1x,a1,i4,16x,a11,f8.3,11x,1a)') '| Grid size = ', & pw90_berry%kmesh%mesh(1), 'x', pw90_berry%kmesh%mesh(2), 'x', pw90_berry%kmesh%mesh(3), & ' Spacing = ', pw90_berry%kmesh%spacing, '|' else write (stdout, '(1x,a46,2x,i4,1x,a1,i4,1x,a1,i4,13x,1a)') '| Grid size :' & , pw90_berry%kmesh%mesh(1), 'x', pw90_berry%kmesh%mesh(2), 'x', pw90_berry%kmesh%mesh(3), '|' end if end if if (pw90_berry%curv_adpt_kmesh > 1) then write (stdout, '(1x,a46,10x,i8,13x,a1)') '| Using an adaptive refinement mesh of size :', pw90_berry%curv_adpt_kmesh, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Threshold for adaptive refinement :', & pw90_berry%curv_adpt_kmesh_thresh, '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Adaptive refinement :', ' none', '|' end if write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*' end if if (pw90_calculation%gyrotropic .or. print_output%iprint > 2) then write (stdout, '(1x,a78)') '*--------------------------------- GYROTROPIC ------------------------------------*' write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Compute Gyrotropic properties :', pw90_calculation%gyrotropic, '|' write (stdout, '(1x,a46,10x,a20,1x,a1)') '| gyrotropic_task :', pw90_gyrotropic%task, '|' call parameters_gyro_write_task(pw90_gyrotropic%task, '-d0', 'calculate the D tensor', stdout) call parameters_gyro_write_task(pw90_gyrotropic%task, '-dw', 'calculate the tildeD tensor', stdout) call parameters_gyro_write_task(pw90_gyrotropic%task, '-c', 'calculate the C tensor', stdout) call parameters_gyro_write_task(pw90_gyrotropic%task, '-k', 'calculate the K tensor', stdout) call parameters_gyro_write_task(pw90_gyrotropic%task, '-noa', 'calculate the interbad natural optical activity', stdout) call parameters_gyro_write_task(pw90_gyrotropic%task, '-dos', 'calculate the density of states', stdout) write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Lower frequency for tildeD,NOA :', & pw90_extra_io%gyrotropic_freq_min, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Upper frequency :', & pw90_extra_io%gyrotropic_freq_max, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Step size for frequency :', & pw90_extra_io%gyrotropic_freq_step, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Upper eigenvalue :', & pw90_gyrotropic%eigval_max, '|' if (pw90_gyrotropic%smearing%fixed_width == pw90_extra_io%smear%fixed_width & .and. pw90_extra_io%smear%type_index == pw90_gyrotropic%smearing%type_index) then write (stdout, '(1x,a78)') '| Using global smearing parameters |' else write (stdout, '(1x,a78)') '| Using local smearing parameters |' end if write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Fixed width smearing :', ' T', '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Smearing width :', & pw90_gyrotropic%smearing%fixed_width, '|' write (stdout, '(1x,a21,5x,a47,4x,a1)') '| Smearing Function :', & trim(w90_readwrite_get_smearing_type(pw90_gyrotropic%smearing%type_index)), '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| degen_thresh :', & pw90_gyrotropic%degen_thresh, '|' if (pw90_extra_io%global_kmesh%mesh(1) == pw90_gyrotropic%kmesh%mesh(1) .and. & pw90_extra_io%global_kmesh%mesh(2) == pw90_gyrotropic%kmesh%mesh(2) .and. & pw90_extra_io%global_kmesh%mesh(3) == pw90_gyrotropic%kmesh%mesh(3)) then write (stdout, '(1x,a78)') '| Using global k-point set for interpolation |' elseif (pw90_gyrotropic%kmesh%spacing > 0.0_dp) then write (stdout, '(1x,a15,i4,1x,a1,i4,1x,a1,i4,16x,a11,f8.3,11x,1a)') '| Grid size = ', & pw90_gyrotropic%kmesh%mesh(1), 'x', pw90_gyrotropic%kmesh%mesh(2), 'x', pw90_gyrotropic%kmesh%mesh(3), & ' Spacing = ', pw90_gyrotropic%kmesh%spacing, '|' else write (stdout, '(1x,a46,2x,i4,1x,a1,i4,1x,a1,i4,13x,1a)') '| Grid size :' & , pw90_gyrotropic%kmesh%mesh(1), 'x', pw90_gyrotropic%kmesh%mesh(2), 'x', pw90_gyrotropic%kmesh%mesh(3), '|' end if write (stdout, '(1x,a46,10x,a8,13x,a1)') '| Adaptive refinement :', ' not implemented', '|' write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*' end if if (pw90_calculation%boltzwann .or. print_output%iprint > 2) then write (stdout, '(1x,a78)') '*------------------------------- BOLTZWANN ----------------------------------*' write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Compute Boltzmann transport properties :', & pw90_calculation%boltzwann, '|' if (pw90_boltzwann%dir_num_2d > 0) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| 2d structure: non-periodic dimension :', & trim(pw90_extra_io%boltz_2d_dir), '|' else write (stdout, '(1x,a78)') '| 3d Structure : T |' end if write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Relaxation Time (fs) :', pw90_boltzwann%relax_time, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Minimum Value of Chemical Potential (eV) :', pw90_boltzwann%mu_min, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Maximum Value of Chemical Potential (eV) :', pw90_boltzwann%mu_max, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Step size for Chemical Potential (eV) :', pw90_boltzwann%mu_step, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Minimum Value of Temperature (K) :', pw90_boltzwann%temp_min, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Maximum Value of Temperature (K) :', pw90_boltzwann%temp_max, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Step size for Temperature (K) :', pw90_boltzwann%temp_step, '|' if (pw90_extra_io%global_kmesh%mesh(1) == pw90_boltzwann%kmesh%mesh(1) .and. & pw90_extra_io%global_kmesh%mesh(2) == pw90_boltzwann%kmesh%mesh(2) .and. & pw90_extra_io%global_kmesh%mesh(3) == pw90_boltzwann%kmesh%mesh(3)) then write (stdout, '(1x,a78)') '| Using global k-point set for interpolation |' else if (pw90_boltzwann%kmesh%spacing > 0.0_dp) then write (stdout, '(1x,a15,i4,1x,a1,i4,1x,a1,i4,16x,a11,f8.3,11x,1a)') '| Grid size = ', & pw90_boltzwann%kmesh%mesh(1), 'x', pw90_boltzwann%kmesh%mesh(2), 'x', pw90_boltzwann%kmesh%mesh(3), & ' Spacing = ', pw90_boltzwann%kmesh%spacing, '|' else write (stdout, '(1x,a46,2x,i4,1x,a1,i4,1x,a1,i4,13x,1a)') '| Grid size :' & , pw90_boltzwann%kmesh%mesh(1), 'x', pw90_boltzwann%kmesh%mesh(2), 'x', pw90_boltzwann%kmesh%mesh(3), '|' end if end if write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Step size for TDF (eV) :', & pw90_boltzwann%tdf_energy_step, '|' write (stdout, '(1x,a25,5x,a43,4x,a1)') '| TDF Smearing Function ', & trim(w90_readwrite_get_smearing_type(pw90_boltzwann%tdf_smearing%type_index)), '|' if (pw90_boltzwann%tdf_smearing%fixed_width > 0.0_dp) then write (stdout, '(1x,a46,10x,f8.3,13x,a1)') & '| TDF fixed Smearing width (eV) :', pw90_boltzwann%tdf_smearing%fixed_width, '|' else write (stdout, '(1x,a78)') '| TDF fixed Smearing width : unsmeared |' end if write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Compute DOS at same time :', pw90_boltzwann%calc_also_dos, '|' if (pw90_boltzwann%calc_also_dos .and. print_output%iprint > 2) then write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Minimum energy range for DOS plot :', & pw90_boltzwann%dos_energy_min, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Maximum energy range for DOS plot :', & pw90_boltzwann%dos_energy_max, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| Energy step for DOS plot :', & pw90_boltzwann%dos_energy_step, '|' if (pw90_boltzwann%dos_smearing%use_adaptive .eqv. pw90_extra_io%smear%use_adaptive .and. & pw90_boltzwann%dos_smearing%adaptive_prefactor == pw90_extra_io%smear%adaptive_prefactor & .and. pw90_boltzwann%dos_smearing%adaptive_max_width == pw90_extra_io%smear%adaptive_max_width & .and. pw90_boltzwann%dos_smearing%fixed_width == pw90_extra_io%smear%fixed_width .and. & pw90_extra_io%smear%type_index == pw90_boltzwann%dos_smearing%type_index) then write (stdout, '(1x,a78)') '| Using global smearing parameters |' else if (pw90_boltzwann%dos_smearing%use_adaptive) then write (stdout, '(1x,a46,10x,a8,13x,a1)') '| DOS Adaptive width smearing :', ' T', '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') & '| DOS Adaptive smearing factor :', pw90_boltzwann%dos_smearing%adaptive_prefactor, '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') & '| DOS Maximum allowed smearing width :', pw90_boltzwann%dos_smearing%adaptive_max_width, '|' else write (stdout, '(1x,a46,10x,a8,13x,a1)') '| DOS Fixed width smearing :', ' T', '|' write (stdout, '(1x,a46,10x,f8.3,13x,a1)') '| DOS Smearing width :', & pw90_boltzwann%dos_smearing%fixed_width, '|' end if write (stdout, '(1x,a21,5x,a47,4x,a1)') '| Smearing Function ', & trim(w90_readwrite_get_smearing_type(pw90_boltzwann%dos_smearing%type_index)), '|' end if end if write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*' end if if (pw90_calculation%geninterp .or. print_output%iprint > 2) then write (stdout, '(1x,a78)') '*------------------------Generic Band Interpolation--------------------------*' write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Compute Properties at given k-points :', pw90_calculation%geninterp, '|' write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Calculate band gradients :', pw90_geninterp%alsofirstder, '|' write (stdout, '(1x,a46,10x,L8,13x,a1)') '| Write data into a single file :', pw90_geninterp%single_file, '|' write (stdout, '(1x,a78)') '*----------------------------------------------------------------------------*' end if 101 format(20x, a3, 2x, 3F11.6) end subroutine w90_postw90_readwrite_write