00001 subroutine sourceterm_MoC_CF_with_divshift_r3rd_ns(souvec)
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric
00005 use def_bh_parameter, only : ome_bh
00006 use make_array_3d
00007 use make_array_4d
00008 use interface_interpo_linear_type0
00009 use interface_grgrad_4th_gridpoint
00010 use interface_grgrad_midpoint_r3rd_nsbh
00011 use interface_grgrad_midpoint_r3rd_type0_ns
00012
00013
00014
00015 use interface_dadbscalar_3rd2nd_type0
00016 use def_vector_phi, only : vec_phig
00017 implicit none
00018 real(long), pointer :: souvec(:,:,:,:), ddivBeta(:,:,:,:)
00019 real(long), pointer :: fnc2(:,:,:), divBeta(:,:,:)
00020 real(long), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00021 real(long) :: san, san2
00022 real(long) :: alpgc, psigc, fnc2gc, afnc2inv, dxafn, dyafn, dzafn
00023 real(long) :: ovxu, ovyu, ovzu
00024 real(long) :: tfkax, tfkay, tfkaz
00025 real(long) :: dbxdx,dbxdy,dbxdz, dbydx,dbydy,dbydz, dbzdx,dbzdy,dbzdz
00026 real(long) :: d2bvx(3,3), d2bvy(3,3), d2bvz(3,3)
00027 integer :: ii, irg, itg, ipg, impt
00028
00029 call alloc_array3d(fnc2,0,nrg,0,ntg,0,npg)
00030 call alloc_array3d(grad2x,1,nrg,1,ntg,1,npg)
00031 call alloc_array3d(grad2y,1,nrg,1,ntg,1,npg)
00032 call alloc_array3d(grad2z,1,nrg,1,ntg,1,npg)
00033 call alloc_array3d(divBeta,0,nrg,0,ntg,0,npg)
00034 call alloc_array4d(ddivBeta,1,nrg,1,ntg,1,npg,1,3)
00035
00036 san = 1.0d0/3.0d0
00037 san2= 2.0d0/3.0d0
00038
00039
00040
00041
00042 do ipg = 0, npg
00043 do itg = 0, ntg
00044 do irg = 0, nrg
00045
00046
00047 psigc = psi(irg,itg,ipg)
00048 alpgc = alph(irg,itg,ipg)
00049 if (alpgc.le.0.0d0) alpgc = 1.0d-20
00050 fnc2(irg,itg,ipg) = psi(irg,itg,ipg)**6/alpgc
00051
00052 call grgrad_4th_gridpoint(bvxd,dbxdx,dbxdy,dbxdz,irg,itg,ipg)
00053 call grgrad_4th_gridpoint(bvyd,dbydx,dbydy,dbydz,irg,itg,ipg)
00054 call grgrad_4th_gridpoint(bvzd,dbzdx,dbzdy,dbzdz,irg,itg,ipg)
00055
00056
00057
00058
00059 divBeta(irg,itg,ipg) = dbxdx + dbydy + dbzdz
00060
00061
00062
00063
00064
00065
00066 end do
00067 end do
00068 end do
00069
00070
00071 call grgrad_midpoint_r3rd_nsbh(fnc2,grad2x,grad2y,grad2z,'ns')
00072
00073 do ipg = 1, npg
00074 do itg = 1, ntg
00075 do irg = 1, nrg
00076
00077 call grgrad_midpoint_r3rd_type0_ns(divBeta,dxafn,dyafn,dzafn,irg,itg,ipg)
00078 ddivBeta(irg,itg,ipg,1) = dxafn
00079 ddivBeta(irg,itg,ipg,2) = dyafn
00080 ddivBeta(irg,itg,ipg,3) = dzafn
00081
00082
00083
00084
00085
00086
00087 end do
00088 end do
00089 end do
00090
00091 do ii = 1, 3
00092 do ipg = 1, npg
00093 do itg = 1, ntg
00094 do irg = 1, nrg
00095 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00096 call interpo_linear_type0(fnc2gc,fnc2,irg,itg,ipg)
00097 afnc2inv = alpgc/fnc2gc
00098
00099
00100
00101 dxafn = grad2x(irg,itg,ipg)
00102 dyafn = grad2y(irg,itg,ipg)
00103 dzafn = grad2z(irg,itg,ipg)
00104 tfkax = tfkij(irg,itg,ipg,ii,1)
00105 tfkay = tfkij(irg,itg,ipg,ii,2)
00106 tfkaz = tfkij(irg,itg,ipg,ii,3)
00107
00108 souvec(irg,itg,ipg,ii) = - 2.0d0*afnc2inv &
00109 & *(tfkax*dxafn + tfkay*dyafn + tfkaz*dzafn) &
00110 & - san*ddivBeta(irg,itg,ipg,ii)
00111
00112 end do
00113 end do
00114 end do
00115 end do
00116
00117 deallocate(fnc2)
00118 deallocate(grad2x)
00119 deallocate(grad2y)
00120 deallocate(grad2z)
00121 deallocate(divBeta)
00122 deallocate(ddivBeta)
00123
00124 end subroutine sourceterm_MoC_CF_with_divshift_r3rd_ns