conv_index_NR.f90

Go to the documentation of this file.
00001 program  conv_index_NR
00002   implicit none
00003   integer :: i, k, n = 6, iter, iter_max = 100, ndata = 5
00004   real(8) :: xi(5),yi(5), yin(5,6)
00005   real(8) :: dd, od(6), dd_old, delta_dd
00006   real(8) :: fx, delta_fx, logfx, delta_logfx, error
00007 !
00008   open(1,file='data.dat',status='old')
00009   do i = 1, ndata
00010     read(1,*) xi(i), (yin(i,k), k = 1, n)
00011   end do
00012   close(1)
00013 !
00014   do k = 1, n
00015     yi(:) = yin(:,k)
00016 !
00017     dd = 2.0d0
00018     do iter = 1, iter_max
00019 !
00020       fx = (yi(3)-yi(4))*xi(5)**dd &
00021       &  + (yi(5)-yi(3))*xi(4)**dd &
00022       &  + (yi(4)-yi(5))*xi(3)**dd
00023       delta_fx = (yi(3)-yi(4))*xi(5)**dd*dlog(xi(5)) &
00024       &        + (yi(5)-yi(3))*xi(4)**dd*dlog(xi(4)) &
00025       &        + (yi(4)-yi(5))*xi(3)**dd*dlog(xi(3))
00026       logfx = dlog(fx)
00027       delta_logfx = delta_fx/fx
00028 !      delta_dd = - logfx/delta_logfx
00029       delta_dd = - fx/delta_fx
00030 !
00031       dd_old = dd
00032       dd = dd + delta_dd
00033       error = dabs((dd_old - dd)/dd)
00034       write(6,*) 'error = ', error
00035       if (error.le.1.0d-10) then 
00036         write(6,*) 'iteration=', iter ; exit
00037       end if
00038 !
00039     end do
00040     if (iter.eq.iter_max) stop 'iteration not converged'
00041 !
00042     od(k) = dd
00043   end do
00044 !
00045   write(6,*) (od(k), k = 1, n)
00046   open(1,file='output_index.dat',status='unknown')
00047     write(1,'(1p,9e18.10)') (od(k), k = 1, n)
00048   close(1)
00049 !
00050 end program conv_index_NR

Generated on 27 Oct 2011 for Cocal by  doxygen 1.6.1