Line data Source code
1 : MODULE m_bloechl 2 : 3 : IMPLICIT NONE 4 : 5 : PRIVATE 6 : PUBLIC :: bloechl 7 : 8 : CONTAINS 9 : 10 23362560 : PURE REAL FUNCTION bloechl(efermi,etetra,ind,vol,film) 11 : 12 : REAL, INTENT(IN) :: efermi 13 : REAL, INTENT(IN) :: etetra(:) 14 : INTEGER, INTENT(IN) :: ind 15 : REAL, INTENT(IN) :: vol 16 : LOGICAL, INTENT(IN) :: film 17 : 18 : REAL dos_ef 19 : 20 23362560 : bloechl = 0.0 21 23362560 : IF(.NOT. film) THEN 22 23362560 : dos_ef = dos_tetra(efermi,etetra,vol) 23 116812800 : bloechl = 1/40.0*dos_ef*sum(etetra-etetra(ind)) 24 : ENDIF 25 : 26 23362560 : END FUNCTION bloechl 27 : 28 23362560 : PURE REAL FUNCTION dos_tetra(energy,etetra,vol) 29 : 30 : REAL, INTENT(IN) :: energy 31 : REAL, INTENT(IN) :: etetra(:) 32 : REAL, INTENT(IN) :: vol 33 : 34 23362560 : IF((energy.GT.etetra(4)).OR.(energy.LT.etetra(1))) THEN 35 : dos_tetra = 0.0 36 1559088 : ELSE IF(energy.GE.etetra(3)) THEN 37 : 38 698384 : dos_tetra = 3.0 * vol * (etetra(4)-energy)**2/((etetra(4)-etetra(1))*(etetra(4)-etetra(2))*(etetra(4)-etetra(3))) 39 : 40 860704 : ELSE IF(energy.GE.etetra(2)) THEN 41 : 42 : dos_tetra = vol * 3.0/((etetra(3)-etetra(1))*(etetra(4)-etetra(1))) * (etetra(2) - etetra(1) + 2*(energy - etetra(2)) & 43 298864 : -(etetra(3)-etetra(1)+etetra(4)-etetra(2)) * (energy-etetra(2))**2/((etetra(3)-etetra(2))*(etetra(4)-etetra(2)))) 44 : 45 : ELSE IF(energy.GE.etetra(1)) THEN 46 : 47 561840 : dos_tetra = 3.0 * vol * (energy-etetra(1))**2/((etetra(2)-etetra(1))*(etetra(3)-etetra(1))*(etetra(4)-etetra(1))) 48 : 49 : END IF 50 : 51 23362560 : END FUNCTION dos_tetra 52 : 53 : END MODULE m_bloechl