00001 subroutine sourceterm_MoC_CF(souvec)
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric, only : psi, alph, tfkij, trk_grid
00005 use make_array_3d
00006 use make_array_4d
00007 use interface_grgrad_midpoint
00008 use interface_interpo_linear_type0
00009 implicit none
00010 real(long), pointer :: souvec(:,:,:,:)
00011 real(long), pointer :: fnc2(:,:,:), gradtrK(:,:,:,:)
00012 real(long), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00013 real(long) :: san, san2, san4
00014 real(long) :: alpgc, fnc2gc, afnc2inv, dxafn, dyafn, dzafn
00015 real(long) :: tfkax, tfkay, tfkaz, dtrK
00016 integer :: ii, irg, itg, ipg
00017
00018 call alloc_array3d(fnc2,0,nrg,0,ntg,0,npg)
00019 call alloc_array3d(grad2x,1,nrg,1,ntg,1,npg)
00020 call alloc_array3d(grad2y,1,nrg,1,ntg,1,npg)
00021 call alloc_array3d(grad2z,1,nrg,1,ntg,1,npg)
00022 call alloc_array4d(gradtrK,1,nrg,1,ntg,1,npg,1,3)
00023
00024 san = 1.0d0/3.0d0
00025 san2= 2.0d0/3.0d0
00026 san4= 4.0d0/3.0d0
00027
00028
00029
00030
00031 call grgrad_midpoint(trk_grid,grad2x,grad2y,grad2z)
00032 gradtrK(1:nrg,1:ntg,1:npg,1) = grad2x(1:nrg,1:ntg,1:npg)
00033 gradtrK(1:nrg,1:ntg,1:npg,2) = grad2y(1:nrg,1:ntg,1:npg)
00034 gradtrK(1:nrg,1:ntg,1:npg,3) = grad2z(1:nrg,1:ntg,1:npg)
00035
00036 do ipg = 0, npg
00037 do itg = 0, ntg
00038 do irg = 0, nrg
00039 fnc2(irg,itg,ipg) = psi(irg,itg,ipg)**6/alph(irg,itg,ipg)
00040 end do
00041 end do
00042 end do
00043
00044 call grgrad_midpoint(fnc2,grad2x,grad2y,grad2z)
00045
00046 do ii = 1, 3
00047 do ipg = 1, npg
00048 do itg = 1, ntg
00049 do irg = 1, nrg
00050 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00051 call interpo_linear_type0(fnc2gc,fnc2,irg,itg,ipg)
00052 afnc2inv = alpgc/fnc2gc
00053 dxafn = grad2x(irg,itg,ipg)
00054 dyafn = grad2y(irg,itg,ipg)
00055 dzafn = grad2z(irg,itg,ipg)
00056 tfkax = tfkij(irg,itg,ipg,ii,1)
00057 tfkay = tfkij(irg,itg,ipg,ii,2)
00058 tfkaz = tfkij(irg,itg,ipg,ii,3)
00059 dtrK = gradtrK(irg,itg,ipg,ii)
00060
00061 souvec(irg,itg,ipg,ii) = - 2.0d0*afnc2inv &
00062 & *(tfkax*dxafn + tfkay*dyafn + tfkaz*dzafn) &
00063 & + san4*alpgc*dtrK
00064 end do
00065 end do
00066 end do
00067 end do
00068
00069 deallocate(fnc2)
00070 deallocate(grad2x)
00071 deallocate(grad2y)
00072 deallocate(grad2z)
00073 deallocate(gradtrK)
00074 end subroutine sourceterm_MoC_CF