00001 include '../Include_file/include_modulefiles_BBH_CF_3mpt.f90'
00002 include '../Include_file/include_interface_modulefiles_BBH_CF_3mpt.f90'
00003 include '../Include_file/include_subroutines_BBH_CF_3mpt.f90'
00004 include '../Include_file/include_functions.f90'
00005 
00006 PROGRAM Cocal_Kadath
00007   use phys_constant, only : long, nnrg, nntg, nnpg
00008   implicit none
00009   integer :: ir, it, ip, nrtmp, nttmp, nptmp, nrg, ntg, npg
00010   real(long) :: psi(0:nnrg,0:nntg,0:nnpg),  psi_K(0:nnrg),  psi_C
00011   real(long) :: alph(0:nnrg,0:nntg,0:nnpg), alph_K(0:nnrg), alph_C
00012   real(long) :: bvxd(0:nnrg,0:nntg,0:nnpg), bvxd_K(0:nnrg), bvxd_C
00013   real(long) :: bvyd(0:nnrg,0:nntg,0:nnpg), bvyd_K(0:nnrg), bvyd_C
00014   real(long) :: bvzd(0:nnrg,0:nntg,0:nnpg), bvzd_K(0:nnrg), bvzd_C
00015   real(long) :: rg(0:nnrg), thg(0:nntg), phig(0:nnpg)
00016   real(long) :: rg_K(0:nnrg), rv
00017 
00018 
00019   open(13,file='input_Cocal.dat',status='old')
00020   read(13,'(5i5)') nrtmp, nttmp, nptmp
00021   do ip = 0, nptmp
00022     do it = 0, nttmp
00023       do ir = 0, nrtmp
00024         read(13,'(1p,6e20.12)')  psi(ir,it,ip), &
00025     &                           alph(ir,it,ip), &
00026     &                           bvxd(ir,it,ip), &
00027     &                           bvyd(ir,it,ip), &
00028     &                           bvzd(ir,it,ip)
00029       end do
00030     end do
00031   end do
00032 
00033   open(14,file='input_Cocal_grid.dat',status='old')
00034   read(14,'(5i5)') nrtmp, nttmp, nptmp
00035   do ir = 0, nrtmp
00036     read(14,'(1p,6e20.12)') rg(ir)
00037   end do
00038   do it = 0, nttmp
00039     read(14,'(1p,6e20.12)') thg(it)
00040   end do
00041   do ip = 0, nptmp
00042     read(14,'(1p,6e20.12)') phig(ip)
00043   end do
00044   close(14)
00045 
00046   nrg = nrtmp; ntg = nttmp; npg = nptmp
00047   open(13,file='input_Kadath.dat',status='old')
00048   it = ntg/2; ip = 0
00049   do ir = 0, nrtmp
00050     read(13,*)  rg_K(ir), psi_K(ir), &
00051     &                    alph_K(ir), &
00052     &                    bvxd_K(ir), &
00053     &                    bvyd_K(ir), &
00054     &                    bvzd_K(ir)
00055   end do
00056   close(13)
00057 
00058 
00059 
00060   open(13,file='output_Cocal_Kadath.dat',status='unknown')
00061   rg(0:nrg) = rg(0:nrg)/rg(0)
00062   it = ntg/2; ip = 0
00063   do ir = 0, nrg
00064     rv = rg_K(ir)
00065     if (rv.gt.rg(nrg)) exit
00066     call interpo_radial(psi,psi_C,rv,rg,nrg,it,ip)
00067     call interpo_radial(alph,alph_C,rv,rg,nrg,it,ip)
00068     call interpo_radial(bvxd,bvxd_C,rv,rg,nrg,it,ip)
00069     call interpo_radial(bvyd,bvyd_C,rv,rg,nrg,it,ip)
00070     call interpo_radial(bvzd,bvzd_C,rv,rg,nrg,it,ip)
00071     write(13,'(1p,11e20.12)') rg_K(ir), psi_C,  psi_K(ir), &
00072     &                                  alph_C, alph_K(ir), &
00073     &                                  bvxd_C, bvxd_K(ir), &
00074     &                                  bvyd_C, bvyd_K(ir), &
00075     &                                  bvzd_C, bvzd_K(ir)
00076   end do
00077   close(13) 
00078 
00079 end program Cocal_Kadath
00080 
00081 subroutine interpo_radial(grv,val,rv,rg,nrg,it,ip)
00082   use phys_constant, only : long, nnrg, nntg, nnpg
00083   implicit none
00084   real(long), external :: lagint_4th
00085   real(long) :: rg(0:nnrg)
00086   real(long) :: grv(0:nnrg,0:nntg,0:nnpg)
00087   real(long), intent(out) :: val
00088   real(long), intent(in)  :: rv
00089   integer, intent(in)     :: it, ip
00090   real(long) :: x(4), f(4)
00091   integer :: nrg, irg, ir0
00092 
00093   do irg = 0, nrg-1
00094     if (rv.le.rg(irg)) then 
00095       ir0 = min0(max0(0,irg-2),nrg-3)
00096       exit
00097     end if
00098   end do
00099   x(1:4) = rg(ir0:ir0+3)
00100   f(1:4) = grv(ir0:ir0+3,it,ip)
00101   val = lagint_4th(x,f,rv)
00102 
00103 end subroutine interpo_radial