hubbard1_io.f90 16.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
MODULE m_hubbard1_io
   
   !------------------------------------------------------------------------------
   !
   ! MODULE: m_hubbard1_io
   !
   !> @author
   !> Henning Janßen
   !
   ! DESCRIPTION: 
   !>  This module provides an interface with the Hubbard 1 Solver written by 
   !>  J. Kolorenč
   !
   ! REVISION HISTORY:
   ! 20 03 2019 - Initial Version
   ! TODO:  Replace Stop by calls to juDFT_error
   !------------------------------------------------------------------------------

   USE m_juDFT
   USE m_types
21
   USE m_constants
22 23

   IMPLICIT NONE
Henning Janssen's avatar
Henning Janssen committed
24 25 26 27
   !------------------------------------------------------------------
   !Here the keywords for the hubbard 1 solver input file are defined
   !------------------------------------------------------------------

28 29 30 31
   !Filenames for input
   CHARACTER(*), PARAMETER :: cfg_file_main ="hubbard1.cfg"
   CHARACTER(*), PARAMETER :: cfg_file_bath ="bath.cfg"
   CHARACTER(*), PARAMETER :: cfg_file_hloc ="hloc.cfg"
32
   CHARACTER(*), PARAMETER :: cfg_file_ccf = "ccf.dat"
33 34 35 36 37 38 39 40 41 42 43
   CHARACTER(*), PARAMETER :: file_G0_fits  ="G0_fit_monitor.dat"
   CHARACTER(*), PARAMETER :: file_hybr_fits ="hyb_fit_monitor.dat"
   INTEGER, PARAMETER      :: input_iounit  = 17

   !Real freq axis parameters
   REAL, PARAMETER    :: emin = -13.0
   REAL, PARAMETER    :: emax =  13.0
   INTEGER, PARAMETER :: ne   =  2600
   REAL, PARAMETER    :: sigma = 0.0314
   INTEGER, PARAMETER :: nmats = 0

Henning Janssen's avatar
Henning Janssen committed
44

45 46
   CONTAINS

Henning Janssen's avatar
Fixes  
Henning Janssen committed
47
   SUBROUTINE hubbard1_input(path,i_hia,l,f0,f2,f4,f6,hub1,mu,n,l_bath,l_first,l_new)
48 49 50 51 52 53 54 55 56 57

      IMPLICIT NONE

      CHARACTER(len=*), INTENT(IN)  :: path
      INTEGER,          INTENT(IN)  :: i_hia
      INTEGER,          INTENT(IN)  :: l
      REAL,             INTENT(IN)  :: f0,f2,f4,f6
      TYPE(t_hub1ham),  INTENT(IN)  :: hub1
      REAL,             INTENT(IN)  :: mu
      INTEGER,          INTENT(IN)  :: n
Henning Janssen's avatar
Henning Janssen committed
58
      LOGICAL,          INTENT(IN)  :: l_bath
Henning Janssen's avatar
Fixes  
Henning Janssen committed
59
      LOGICAL,          INTENT(IN)  :: l_first
60 61 62 63
      LOGICAL,          INTENT(IN)  :: l_new

      !Old or new input format
      IF(l_new) THEN
Henning Janssen's avatar
Fixes  
Henning Janssen committed
64
         CALL write_hubbard1_input_new(path,i_hia,l,f0,f2,f4,f6,hub1,mu,n,l_bath,l_first)
65 66 67 68 69 70 71
      ELSE
         CALL write_hubbard1_input_old(path,i_hia,l,f0,f2,f4,f6,hub1,mu,n)
      ENDIF

   END SUBROUTINE hubbard1_input


Henning Janssen's avatar
Fixes  
Henning Janssen committed
72
   SUBROUTINE write_hubbard1_input_new(path,i_hia,l,f0,f2,f4,f6,hub1,mu,n,l_bath,l_first)
73 74 75 76 77 78 79 80 81 82 83 84

      USE m_generic_txtio

      IMPLICIT NONE

      CHARACTER(len=*), INTENT(IN)  :: path
      INTEGER,          INTENT(IN)  :: i_hia
      INTEGER,          INTENT(IN)  :: l
      REAL,             INTENT(IN)  :: f0,f2,f4,f6
      TYPE(t_hub1ham),  INTENT(IN)  :: hub1
      REAL,             INTENT(IN)  :: mu
      INTEGER,          INTENT(IN)  :: n
85
      LOGICAL,          INTENT(IN)  :: l_bath
Henning Janssen's avatar
Fixes  
Henning Janssen committed
86
      LOGICAL,          INTENT(IN)  :: l_first
87
      
88 89
      INTEGER :: info, io_error,i,j,k,ind1,ind2,i_exc,i_arg
      REAL exc
90 91 92 93 94 95 96 97 98 99 100
      TYPE(t_mat) :: cfmat

      !Main input file
      OPEN(unit=input_iounit, file=TRIM(ADJUSTL(path)) // TRIM(ADJUSTL(cfg_file_main)),&
          status="replace", action="write", iostat=io_error)
      IF(io_error.NE.0) CALL juDFT_error("IO-Error in Hubbard 1 IO", calledby="write_hubbard1_input_new")

      CALL startSection(input_iounit,"hamiltonian")
      CALL comment(input_iounit,"Slater Integrals",1)
      CALL writeValue(input_iounit,"Fk",(/f0,f2,f4,f6/))
      CALL writeValue(input_iounit, "include", cfg_file_hloc)
101
      IF(l_bath) CALL writeValue(input_iounit, "include", cfg_file_bath)
102 103 104 105
      CALL endSection(input_iounit)

      CALL startSection(input_iounit,"fock_space")
      CALL comment(input_iounit,"Min/Max Occupation",1)
106 107 108 109 110 111 112 113 114 115
      IF(l_bath) THEN
         CALL writeValue(input_iounit,"Np_min",5)
         CALL writeValue(input_iounit,"Np_max",18)
      ELSE
         CALL writeValue(input_iounit,"Np_min",MAX(0,n-hub1%n_exc))
         CALL writeValue(input_iounit,"Np_max",MIN(2*(2*l+1),n+hub1%n_exc))
      ENDIF
      CALL comment(input_iounit,"Parameters for the case with bath states (only used when bath is present)",1)
      CALL writeValue(input_iounit,"Nbath_exc",2)
      CALL writeValue(input_iounit, "strict_perturb_order")
116 117 118 119 120
      CALL endSection(input_iounit)

      CALL startSection(input_iounit,"GC_ensemble")
      CALL comment(input_iounit,"Inverse temperature",1)
      CALL writeValue(input_iounit,"beta",hub1%beta)
Henning Janssen's avatar
Henning Janssen committed
121 122
      !CALL comment(input_iounit,"States with smaller weight are dropped",1)
      !CALL writeValue(input_iounit, "weight_limit",1.0e-4)
123 124 125 126 127 128 129
      CALL endSection(input_iounit)

      CALL startSection(input_iounit,"method")
      CALL writeValue(input_iounit, "lancz")
      CALL comment(input_iounit,"Number of iterations",1)
      CALL writeValue(input_iounit,"N_lancz_iter",100)
      CALL comment(input_iounit,"Number of eigenstates calculated",1)
130
      CALL writeValue(input_iounit,"N_lancz_states",400)
131 132
      CALL endSection(input_iounit)

133
      CALL comment(input_iounit,"This discretization is only used by the dos utility. The actual energy points are provided in the function call",1)
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
      CALL startSection(input_iounit,"real_freq_axis")
      CALL writeValue(input_iounit, "omegamin", emin)
      CALL writeValue(input_iounit, "omegamax", emax)
      CALL writeValue(input_iounit, "Nomega", ne)
      CALL writeValue(input_iounit, "eps", sigma)
      CALL endSection(input_iounit)

      CLOSE(input_iounit)


      !local hamiltonian
      OPEN(unit=input_iounit, file=TRIM(ADJUSTL(path)) // TRIM(ADJUSTL(cfg_file_hloc)),&
      status="replace", action="write", iostat=io_error)
      IF(io_error.NE.0) CALL juDFT_error("IO-Error in Hubbard 1 IO", calledby="write_hubbard1_input_new")

      CALL comment(input_iounit,"Orbital quantum number",1)
      CALL writeValue(input_iounit,"Lorb",l)
      CALL comment(input_iounit,"Energy level of the atomic level",1)
      CALL writeValue(input_iounit,"ea",-mu)
      CALL comment(input_iounit,"Spin-orbit-coupling parameter",1)
      CALL writeValue(input_iounit,"xiSOC",hub1%xi(i_hia))
155 156 157 158 159
      !calculate the additional exchange splitting
      exc = 0.0
      DO i_exc = 1, hub1%n_exc_given(i_hia)
         exc = exc + hub1%exc(i_hia,i_exc)*hub1%mag_mom(i_hia,i_exc)
      ENDDO
Henning Janssen's avatar
Henning Janssen committed
160
      !Only write the exchange splitting here if its not zero to not conflict with possible additional args
161 162
      IF(exc.NE.0.0) THEN
         CALL comment(input_iounit,"Exchange splitting",1)
163
         !The sign flip is just a convention between the solver and the DFT calculation
164
         CALL writeValue(input_iounit,"Exc",-exc)
165
      ENDIF
Henning Janssen's avatar
Henning Janssen committed
166 167 168
      !---------------------------------------------------------
      ! Addtional arguments given by addArg are simply passed on
      !---------------------------------------------------------
169 170
      CALL comment(input_iounit,"Additional arguments",1)
      DO i_arg = 1, hub1%n_addArgs(i_hia)
171 172 173
         !----------------------------------------------
         ! Write out a warning about the sign convention
         !----------------------------------------------
Henning Janssen's avatar
Henning Janssen committed
174
         IF(TRIM(ADJUSTL(hub1%arg_keys(i_hia,i_arg))).EQ.'Exc'.AND.hub1%arg_vals(i_hia,i_arg).GT.0.0) THEN
175 176 177 178 179
            WRITE(*,*) "-----------------------------------------------------------------------------------------"
            WRITE(*,*) "You provided a positive exchange splitting."
            WRITE(*,*) "Due to different conventions in the solver this will result in a negative magnetic moment"
            WRITE(*,*) "-----------------------------------------------------------------------------------------"
         ENDIF
180 181
         CALL writeValue(input_iounit, TRIM(ADJUSTL(hub1%arg_keys(i_hia,i_arg))),hub1%arg_vals(i_hia,i_arg))
      ENDDO
Henning Janssen's avatar
Henning Janssen committed
182 183 184
      !------------------------------------
      ! Crystal field contribution
      !------------------------------------
Henning Janssen's avatar
Fixes  
Henning Janssen committed
185
      IF(hub1%ccf(i_hia).NE.0.0.AND..NOT.l_first) THEN
186 187 188 189 190 191 192 193 194 195 196
         CALL writeValue(input_iounit, "cf")

         CALL cfmat%init(.true.,2*(2*l+1),2*(2*l+1))
         cfmat%data_r= 0.0
         DO i = 1, 2
            DO j = 1, (2*l+1)
               DO k = 1, (2*l+1)
                  ind1 = (i-1)*(2*l+1) + j
                  ind2 = (i-1)*(2*l+1) + k
                  cfmat%data_r(ind1,ind2) = hub1%ccfmat(i_hia,j-l-1,k-l-1)*hartree_to_ev_const*hub1%ccf(i_hia)
               ENDDO
197 198
            ENDDO
         ENDDO
199 200
         CALL writeValue(input_iounit, cfmat)
      ENDIF
201

202 203 204
      CLOSE(unit=input_iounit,iostat=io_error)
      IF(io_error.NE.0) CALL juDFT_error("IO-Error in Hubbard 1 IO", calledby="write_hubbard1_input_new")

205 206 207 208
   END SUBROUTINE write_hubbard1_input_new
   

   SUBROUTINE write_hubbard1_input_old(path,i_hia,l,f0,f2,f4,f6,hub1,mu,n)
Henning Janssen's avatar
Henning Janssen committed
209 210 211 212

      USE m_generic_txtio

      IMPLICIT NONE
213 214

      CHARACTER(len=*), INTENT(IN)  :: path
215
      INTEGER,          INTENT(IN)  :: i_hia
216
      INTEGER,          INTENT(IN)  :: l
Henning Janssen's avatar
Henning Janssen committed
217
      REAL,             INTENT(IN)  :: f0,f2,f4,f6
218 219 220
      TYPE(t_hub1ham),  INTENT(IN)  :: hub1
      REAL,             INTENT(IN)  :: mu
      INTEGER,          INTENT(IN)  :: n
221
      
222 223
      INTEGER :: info, io_error,i_exc
      REAL exc
224

Henning Janssen's avatar
Henning Janssen committed
225
      !Main input file
226
      OPEN(unit=input_iounit, file=TRIM(ADJUSTL(path)) // TRIM(ADJUSTL(cfg_file_main)),&
Henning Janssen's avatar
Henning Janssen committed
227
          status="replace", action="write", iostat=io_error)
228
      IF(io_error.NE.0) CALL juDFT_error("IO-Error in Hubbard 1 IO", calledby="write_hubbard1_input_old")
229

Henning Janssen's avatar
Henning Janssen committed
230
      CALL header(input_iounit,"Parameters for the atomic Hamiltonian in eV",1)
231

Henning Janssen's avatar
Henning Janssen committed
232 233
      CALL comment(input_iounit,"Orbital quantum number",1)
      CALL writeValue(input_iounit,"Lorb",l)
234

Henning Janssen's avatar
Henning Janssen committed
235 236
      CALL comment(input_iounit,"Slater Integrals",1)
      CALL writeValue(input_iounit,"Fk",(/f0,f2,f4,f6/))
237

Henning Janssen's avatar
Henning Janssen committed
238
      CALL comment(input_iounit,"Spin-orbit-coupling parameter",1)
239
      CALL writeValue(input_iounit,"gfact",hub1%xi(i_hia))
Henning Janssen's avatar
Henning Janssen committed
240

241 242 243 244 245 246
      !calculate the additional exchange splitting
      exc = 0.0
      DO i_exc = 1, hub1%n_exc_given(i_hia)
         exc = exc + hub1%exc(i_hia,i_exc)*hub1%mag_mom(i_hia,i_exc)
      ENDDO

Henning Janssen's avatar
Henning Janssen committed
247
      CALL comment(input_iounit,"External field",1)
248
      CALL writeValue(input_iounit,"Bz",exc)
Henning Janssen's avatar
Henning Janssen committed
249 250

      CALL comment(input_iounit,"Inverse temperature",1)
251
      CALL writeValue(input_iounit,"beta",hub1%beta)
Henning Janssen's avatar
Henning Janssen committed
252 253 254

      CALL comment(input_iounit,"Chemical potential",1)
      CALL writeValue(input_iounit,"mu",mu)
255

256 257 258 259
      IF(hub1%ccf(i_hia).NE.0.0) THEN
         CALL comment(input_iounit,"Crystal field factor",1)
         CALL writeValue(input_iounit,"ccf",hub1%ccf(i_hia))
      ENDIF
Henning Janssen's avatar
Henning Janssen committed
260 261 262 263

      CALL header(input_iounit,"Parameters for the Solver",1)

      CALL comment(input_iounit,"Minimum and maximum occupation of the orbital",1)
264 265
      CALL writeValue(input_iounit,"Nap_min",MAX(0,n-hub1%n_exc))
      CALL writeValue(input_iounit,"Nap_max",MIN(2*(2*l+1),n+hub1%n_exc))
Henning Janssen's avatar
Henning Janssen committed
266 267

      CALL comment(input_iounit,"Setting the solver to use the power lanczos method",1)
268
      CALL writeValue(input_iounit, "method_lancz")
Henning Janssen's avatar
Henning Janssen committed
269 270 271 272 273 274 275

      CALL comment(input_iounit,"Number of iterations",1)
      CALL writeValue(input_iounit,"N_lancz_iter",100)

      CALL comment(input_iounit,"Number of eigenstates calculated",1)
      CALL writeValue(input_iounit,"N_lancz_states",35)

276 277 278
      CALL header(input_iounit,"Parameters for the frequency/energy axis",1)

      CALL startSection(input_iounit,"real_freq_axis")
279 280
         CALL writeValue(input_iounit, "omegamin", emin)
         CALL writeValue(input_iounit, "omegamax", emax)
281
         CALL writeValue(input_iounit, "Nomega", ne)
282
         CALL writeValue(input_iounit, "eps", sigma)
283 284 285
      CALL endSection(input_iounit)

      CALL startSection(input_iounit,"matsub_freq_axis")
286
         CALL writeValue(input_iounit, "Nmatsub", nmats)
287
      CALL endSection(input_iounit)
Henning Janssen's avatar
Henning Janssen committed
288 289

      CLOSE(unit=input_iounit)
290 291

      WRITE(*,"(A)") "You are using an old input file format. This does not support the additional arguments"
292
   END SUBROUTINE write_hubbard1_input_old
293

Henning Janssen's avatar
Henning Janssen committed
294
   SUBROUTINE write_gf(app,gOnsite,i_gf)
295 296 297 298

      !writes out the onsite green's function calculated from the KS-eigenstates

      TYPE(t_greensf),  INTENT(IN)  :: gOnsite
Henning Janssen's avatar
Henning Janssen committed
299
      CHARACTER(len=*), INTENT(IN)  :: app
300 301 302
      INTEGER,          INTENT(IN)  :: i_gf

      INTEGER  io_unit,io_error
Henning Janssen's avatar
Henning Janssen committed
303 304
      INTEGER  iz,ipm
      CHARACTER(len=2) :: ret
305 306

      io_unit = 17
Henning Janssen's avatar
Henning Janssen committed
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
      DO ipm = 1, 2
         IF(ipm.EQ.1) THEN
            ret = "_R"
         ELSE
            ret = "_A"
         ENDIF
         OPEN(unit=io_unit, file=TRIM(ADJUSTL(app)) // TRIM(ADJUSTL(ret)), status="replace", action="write", iostat=io_error)

         IF(io_error.NE.0) CALL juDFT_error("IO-Error in Hubbard 1 IO", calledby="write_onsite_gf")

         DO iz = 1, gOnsite%nz-gOnsite%Nmatsub
            !Write out energy
            WRITE(io_unit,9020) gOnsite%e(iz)
            WRITE(io_unit,"(A)") "Spin up"
            WRITE(io_unit,"(A)") "   Real part"
322
            WRITE(io_unit,9010)  REAL(gOnsite%gmmpMat(iz,i_gf,:,:,1,ipm))
Henning Janssen's avatar
Henning Janssen committed
323
            WRITE(io_unit,"(A)") "   Imaginary part"
324
            WRITE(io_unit,9010)  AIMAG(gOnsite%gmmpMat(iz,i_gf,:,:,1,ipm))
Henning Janssen's avatar
Henning Janssen committed
325 326
            WRITE(io_unit,"(A)") "Spin down"
            WRITE(io_unit,"(A)") "   Real part"
327
            WRITE(io_unit,9010)  REAL(gOnsite%gmmpMat(iz,i_gf,:,:,2,ipm))
Henning Janssen's avatar
Henning Janssen committed
328
            WRITE(io_unit,"(A)") "   Imaginary part"
329
            WRITE(io_unit,9010)  AIMAG(gOnsite%gmmpMat(iz,i_gf,:,:,2,ipm))
Henning Janssen's avatar
Henning Janssen committed
330 331
         ENDDO
         CLOSE(unit=io_unit)
332 333 334 335
      ENDDO

9010  FORMAT(7f14.8)
9020  FORMAT("Energy:"2f14.8)
Henning Janssen's avatar
Henning Janssen committed
336
   END SUBROUTINE write_gf
337

338 339 340 341 342 343 344 345 346 347 348
   SUBROUTINE write_ccfmat(path,ccfmat,l)

      CHARACTER(len=*), INTENT(IN)  :: path
      REAL,             INTENT(IN)  :: ccfmat(-l:l,-l:l)
      INTEGER,          INTENT(IN)  :: l

      INTEGER :: info, io_error,io_unit

      io_unit = 17


349 350

      OPEN(unit=io_unit, file=TRIM(ADJUSTL(path)) // TRIM(ADJUSTL(cfg_file_ccf)), status="replace", action="write", iostat=io_error)
351 352

      IF(l.EQ.2) THEN
Henning Janssen's avatar
Henning Janssen committed
353
         WRITE(io_unit,"(5f10.5)") ccfmat*hartree_to_ev_const
354
      ELSE IF(l.EQ.3) THEN
Henning Janssen's avatar
Henning Janssen committed
355
         WRITE(io_unit,"(7f10.5)") ccfmat*hartree_to_ev_const
356 357 358 359 360 361
      ENDIF

      CLOSE(io_unit)

   END SUBROUTINE write_ccfmat

362 363 364
   SUBROUTINE read_ccfmat(path,ccfmat,l)

      CHARACTER(len=*), INTENT(IN)  :: path
Henning Janssen's avatar
Henning Janssen committed
365
      REAL,             INTENT(INOUT) :: ccfmat(-l:l,-l:l)
366 367 368 369
      INTEGER,          INTENT(IN)  :: l

      INTEGER :: info, io_error,io_unit

Henning Janssen's avatar
Henning Janssen committed
370
      ccfmat = 0.0
Henning Janssen's avatar
Henning Janssen committed
371
      OPEN(unit=io_unit, file=TRIM(ADJUSTL(path)) // "/" // TRIM(ADJUSTL(cfg_file_ccf)), status="old", action="read", iostat=io_error)
372 373
      IF(io_error.NE.0) CALL juDFT_error("IO-error in Hubbard1-IO",calledby="read_ccfmat")

Henning Janssen's avatar
Henning Janssen committed
374
      READ(io_unit,*) ccfmat
375

Henning Janssen's avatar
Henning Janssen committed
376 377 378
      !convert to htr (in writing the input file its converted back)
      ccfmat = ccfmat/hartree_to_ev_const

379 380 381 382
      CLOSE(unit=io_unit)

   END SUBROUTINE read_ccfmat

Henning Janssen's avatar
Henning Janssen committed
383
   SUBROUTINE read_selfen(path,selfen,ne,matsize,l_matsub)
384
      
385
      USE m_constants
386 387 388
      !This Subroutine reads in the self-energy
      !produced by the hubbard 1 solver

389 390 391 392
      COMPLEX,          INTENT(OUT) :: selfen(:,:,:)
      CHARACTER(len=*), INTENT(IN)  :: path
      INTEGER,          INTENT(IN)  :: ne
      INTEGER,          INTENT(IN)  :: matsize
Henning Janssen's avatar
Henning Janssen committed
393
      LOGICAL,          INTENT(IN)  :: l_matsub  
394 395
      
      INTEGER io_error,io_unit
396
      INTEGER n,m,i
397
      REAL tmp(matsize,matsize)
398 399
      io_unit = 17
      !Open the selfenergy file
Henning Janssen's avatar
Henning Janssen committed
400 401 402 403
      IF(l_matsub) THEN
         OPEN(unit=io_unit, file=TRIM(ADJUSTL(path)) // "selfen_matsub_bundle.dat",status="old", action="read", iostat=io_error)

         IF(io_error.NE.0) CALL juDFT_error("IO-Error in reading the self-energy", calledby="read_selfen")
404
         READ(io_unit,*)
Henning Janssen's avatar
Henning Janssen committed
405
         DO i = 1, ne
Henning Janssen's avatar
Henning Janssen committed
406
            READ(io_unit,*) 
Henning Janssen's avatar
Henning Janssen committed
407
            DO m = 1, matsize
408
               READ(io_unit,*) selfen(1:matsize,m,i)
Henning Janssen's avatar
Henning Janssen committed
409 410 411 412 413 414 415 416
            ENDDO
         ENDDO
      ELSE
         OPEN(unit=io_unit, file=TRIM(ADJUSTL(path)) // "se.atom", status="old", action="read", iostat=io_error)

         IF(io_error.NE.0) CALL juDFT_error("IO-Error in reading the self-energy", calledby="read_selfen")
         
         DO i = 1, ne
Henning Janssen's avatar
Henning Janssen committed
417
            READ(io_unit,9010) 
Henning Janssen's avatar
Henning Janssen committed
418
            READ(io_unit,9020) ((tmp(m,n), m= 1, matsize), n= 1, matsize)
419
            selfen(1:matsize,1:matsize,i) = tmp(1:matsize,1:matsize)/hartree_to_ev_const 
Henning Janssen's avatar
Henning Janssen committed
420
            READ(io_unit,9020) ((tmp(m,n), m= 1, matsize), n= 1, matsize)
421
            selfen(1:matsize,1:matsize,i) = selfen(1:matsize,1:matsize,i) + ImagUnit * tmp(1:matsize,1:matsize)/hartree_to_ev_const 
Henning Janssen's avatar
Henning Janssen committed
422 423 424 425 426
         ENDDO
      ENDIF


      CLOSE(io_unit)
427 428

9010  FORMAT(f10.5)
Henning Janssen's avatar
Henning Janssen committed
429
9020  FORMAT(7f11.5)
Henning Janssen's avatar
Henning Janssen committed
430
   END SUBROUTINE read_selfen
431

432 433 434

END MODULE m_hubbard1_io