Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=8), | dimension(M) | :: | fi | |||
real(kind=8), | dimension(M) | :: | wr | |||
integer | :: | M |
function kronig(fi,wr,M) result(fr) integer :: i,j,M real(8),dimension(M) :: fi,wr,fr real(8),dimension(M) :: logo,deriv real(8) :: dh,sum dh=wr(2)-wr(1) logo=0.d0 do i=2,M-1 logo(i) = log( (wr(M)-wr(i))/(wr(i)-wr(1)) ) enddo deriv(1)= (fi(2)-fi(1))/dh deriv(M)= (fi(M)-fi(M-1))/dh do i=2,M-1 deriv(i) = (fi(i+1)-fi(i-1))/(2*dh) enddo fr=0.d0 do i=1,M sum=0.d0 do j=1,M if(i/=j)then sum=sum+(fi(j)-fi(i))*dh/(wr(j)-wr(i)) else sum=sum+deriv(i)*dh endif enddo fr(i) = (sum + fi(i)*logo(i))/pi enddo return end function kronig