Write the Hamiltonian in the WF basis
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| complex(kind=dp), | intent(in) | :: | ham_r(:,:,:) | |||
| integer, | intent(in) | :: | irvec(:,:) | |||
| integer, | intent(in) | :: | ndegen(:) | |||
| integer, | intent(in) | :: | nrpts | |||
| integer, | intent(in) | :: | num_wann | |||
| integer, | intent(in) | :: | timing_level | |||
| character(len=50), | intent(in) | :: | seedname | |||
| type(timer_list_type), | intent(inout) | :: | timer | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm |
subroutine hamiltonian_write_hr(ham_r, irvec, ndegen, nrpts, num_wann, timing_level, seedname, & timer, error, comm) !================================================! ! !! Write the Hamiltonian in the WF basis ! !================================================! use w90_io, only: io_stopwatch_start, io_stopwatch_stop, io_date use w90_types, only: timer_list_type use w90_comms, only: w90_comm_type ! arguments type(timer_list_type), intent(inout) :: timer type(w90_error_type), allocatable, intent(out) :: error type(w90_comm_type), intent(in) :: comm integer, intent(in) :: irvec(:, :) integer, intent(in) :: ndegen(:) integer, intent(in) :: nrpts integer, intent(in) :: num_wann integer, intent(in) :: timing_level complex(kind=dp), intent(in) :: ham_r(:, :, :) character(len=50), intent(in) :: seedname ! local variables integer :: i, j, irpt, file_unit, ierr character(len=33) :: header character(len=9) :: cdate, ctime if (timing_level > 1) call io_stopwatch_start('hamiltonian: write_hr', timer) ! write the whole matrix with all the indices open (newunit=file_unit, file=trim(seedname)//'_hr.dat', form='formatted', status='unknown', & iostat=ierr) if (ierr /= 0) then call set_error_file(error, 'Error: hamiltonian_write_hr: problem opening file '//trim(seedname)//'_hr.dat', comm) return end if call io_date(cdate, ctime) header = 'written on '//cdate//' at '//ctime write (file_unit, *) header ! Date and time write (file_unit, *) num_wann write (file_unit, *) nrpts write (file_unit, '(15I5)') (ndegen(i), i=1, nrpts) do irpt = 1, nrpts do i = 1, num_wann do j = 1, num_wann write (file_unit, '(5I5,2F12.6)') irvec(:, irpt), j, i, & ham_r(j, i, irpt) end do end do end do close (file_unit) if (timing_level > 1) call io_stopwatch_stop('hamiltonian: write_hr', timer) end subroutine hamiltonian_write_hr