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