1 ! 2 ! Copyright (C) 2010-2019 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino 3 ! Copyright (C) 2007-2009 Jesse Noffsinger, Brad Malone, Feliciano Giustino 4 ! 5 ! This file is distributed under the terms of the GNU General Public 6 ! License. See the file `LICENSE' in the root directory of the 7 ! present distribution, or http://www.gnu.org/copyleft.gpl.txt . 8 ! 9 ! 10 !---------------------------------------------------------------------- 11 MODULE close_epw 12 !---------------------------------------------------------------------- 13 !! 14 !! This module contains routines related to deallocation and closing of files 15 !! 16 IMPLICIT NONE 17 ! 18 CONTAINS 19 ! 20 ! 21 !---------------------------------------------------------------------------- 22 SUBROUTINE iter_close 23 !---------------------------------------------------------------------------- 24 !! 25 !! This subroutine opens all the files needed to save scattering rates for the IBTE. 26 !! 27 USE kinds, ONLY : DP 28 USE io_var, ONLY : iunepmat, iunsparseq, & 29 iunsparseqcb, iunepmatcb, iunepmatwp2 30 USE epwcom, ONLY : iterative_bte, int_mob, carrier, etf_mem, assume_metal 31 USE epwcom, ONLY : int_mob, carrier, ncarrier 32#if defined(__MPI) 33 USE parallel_include, ONLY : MPI_MODE_WRONLY, MPI_MODE_CREATE, MPI_INFO_NULL 34#endif 35 ! 36 IMPLICIT NONE 37 ! 38 ! Local variables 39 INTEGER :: ierr 40 !! Error status 41 ! 42#if defined(__MPI) 43 IF (etf_mem == 1) then 44 CALL MPI_FILE_CLOSE(iunepmatwp2, ierr) 45 IF (ierr /= 0) CALL errore('iter_close', 'error in MPI_FILE_CLOSE', 1) 46 ENDIF 47#endif 48 ! 49 IF (iterative_bte) THEN 50 IF ((int_mob .AND. carrier) .OR. ((.NOT. int_mob .AND. carrier) .AND. (ncarrier < 0.0)) .OR. assume_metal) THEN 51 CLOSE(iunepmat) 52 CLOSE(iunsparseq) 53 ENDIF 54 IF ((int_mob .AND. carrier) .OR. ((.NOT. int_mob .AND. carrier) .AND. (ncarrier > 0.0)) .AND. .NOT. assume_metal) THEN 55 CLOSE(iunepmatcb) 56 CLOSE(iunsparseqcb) 57 ENDIF ! in all other cases it is still to decide which files to open 58 ENDIF 59 ! 60 !---------------------------------------------------------------------------- 61 END SUBROUTINE iter_close 62 !---------------------------------------------------------------------------- 63 ! 64 !---------------------------------------------------------------------- 65 SUBROUTINE deallocate_epw() 66 !---------------------------------------------------------------------- 67 !! 68 !! deallocates the variables allocated by allocate_epw 69 !! this routine is unchanged as of 3/9/09 and should be cleaned and fixed 70 !! 09/2009 Cleanup still necessary 71 !! 12/2009 Added variables from elph.f90 72 !! 73 !! RM - Nov/Dec 2014 74 !! Imported the noncolinear case implemented by xlzhang 75 !! 76 !---------------------------------------------------------------------- 77 USE phcom, ONLY : drc, dyn 78 USE noncollin_module, ONLY : m_loc 79 USE control_lr, ONLY : nbnd_occ 80 USE elph2, ONLY : epsi, etf, wkf, wqf, & 81 zstar, xkf, xqf 82 USE klist_epw, ONLY : xk_all, xk_loc, xk_cryst, et_all, et_loc, & 83 isk_loc, isk_all 84 USE epwcom, ONLY : epbread, epwread 85 USE qpoint, ONLY : igkq 86 ! 87 IMPLICIT NONE 88 ! 89 IF (epwread .AND. .NOT. epbread) THEN 90 ! EPW variables only 91 ! 92 IF(ALLOCATED(etf)) DEALLOCATE(etf) 93 IF(ALLOCATED(xkf)) DEALLOCATE(xkf) 94 IF(ALLOCATED(wkf)) DEALLOCATE(wkf) 95 IF(ALLOCATED(xqf)) DEALLOCATE(xqf) 96 IF(ALLOCATED(wqf)) DEALLOCATE(wqf) 97 IF(ALLOCATED(et_all)) DEALLOCATE(et_all) 98 ! 99 ELSE 100 ! 101 IF(ASSOCIATED(igkq)) DEALLOCATE(igkq) 102 IF(ALLOCATED(dyn)) DEALLOCATE(dyn) 103 IF(ALLOCATED(epsi)) DEALLOCATE(epsi) 104 IF(ALLOCATED(zstar)) DEALLOCATE(zstar) 105 IF(ALLOCATED(nbnd_occ)) DEALLOCATE(nbnd_occ) 106 IF(ALLOCATED(m_loc)) DEALLOCATE(m_loc) 107 IF(ALLOCATED(drc)) DEALLOCATE(drc) 108 ! 109 ! EPW variables 110 ! 111 IF(ALLOCATED(etf)) DEALLOCATE(etf) 112 IF(ALLOCATED(xkf)) DEALLOCATE(xkf) 113 IF(ALLOCATED(wkf)) DEALLOCATE(wkf) 114 IF(ALLOCATED(xqf)) DEALLOCATE(xqf) 115 IF(ALLOCATED(wqf)) DEALLOCATE(wqf) 116 IF(ALLOCATED(xk_all)) DEALLOCATE(xk_all) 117 IF(ALLOCATED(xk_loc)) DEALLOCATE(xk_loc) 118 IF(ALLOCATED(xk_cryst)) DEALLOCATE(xk_cryst) 119 IF(ALLOCATED(et_all)) DEALLOCATE(et_all) 120 IF(ALLOCATED(et_loc)) DEALLOCATE(et_loc) 121 IF(ALLOCATED(isk_loc)) DEALLOCATE(isk_loc) 122 IF(ALLOCATED(isk_all)) DEALLOCATE(isk_all) 123 ENDIF ! epwread .AND. .NOT. epbread 124 ! 125 !--------------------------------------------------------------- 126 END SUBROUTINE deallocate_epw 127 !--------------------------------------------------------------- 128 ! 129 !------------------------------------------------------------------ 130 SUBROUTINE close_final 131 !------------------------------------------------------------------ 132 ! 133 USE units_lr, ONLY : iuwfc 134 USE units_ph, ONLY : iudwf, iudrho 135 USE phcom, ONLY : fildrho 136 USE mp_global, ONLY : me_pool,root_pool 137 USE io_var, ONLY : iunepmatwe 138 USE epwcom, ONLY : etf_mem 139 ! 140 IMPLICIT NONE 141 ! 142 !IF (etf_mem == 1 .OR. etf_mem == 2) THEN 143 ! CLOSE(UNIT = iunepmatwe, STATUS = 'delete') 144 !ENDIF 145 ! 146 CLOSE(UNIT = iuwfc, STATUS = 'keep') 147 CLOSE(UNIT = iudwf, STATUS = 'keep') 148 IF (me_pool == root_pool) THEN 149 IF (fildrho/=' ') CLOSE(UNIT = iudrho, STATUS = 'keep') 150 ENDIF 151 ! 152 !------------------------------------------------------------------ 153 END SUBROUTINE close_final 154 !------------------------------------------------------------------ 155 ! 156 !------------------------------------------------------------------ 157 END MODULE close_epw 158 !------------------------------------------------------------------ 159