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
00005 use make_array_3d
00006 use interface_grgrad_midpoint
00007 use interface_interpo_linear_type0
00008 implicit none
00009 real(long), pointer :: souvec(:,:,:,:)
00010 real(long), pointer :: fnc2(:,:,:)
00011 real(long), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00012 real(long) :: san, san2
00013 real(long) :: alpgc, fnc2gc, afnc2inv, dxafn, dyafn, dzafn
00014 real(long) :: tfkax, tfkay, tfkaz
00015 integer :: ii, irg, itg, ipg
00016
00017 call alloc_array3d(fnc2,0,nrg,0,ntg,0,npg)
00018 call alloc_array3d(grad2x,1,nrg,1,ntg,1,npg)
00019 call alloc_array3d(grad2y,1,nrg,1,ntg,1,npg)
00020 call alloc_array3d(grad2z,1,nrg,1,ntg,1,npg)
00021
00022 san = 1.0d0/3.0d0
00023 san2= 2.0d0/3.0d0
00024
00025
00026
00027
00028 do ipg = 0, npg
00029 do itg = 0, ntg
00030 do irg = 0, nrg
00031 fnc2(irg,itg,ipg) = psi(irg,itg,ipg)**6/alph(irg,itg,ipg)
00032 end do
00033 end do
00034 end do
00035
00036 call grgrad_midpoint(fnc2,grad2x,grad2y,grad2z)
00037
00038 do ii = 1, 3
00039 do ipg = 1, npg
00040 do itg = 1, ntg
00041 do irg = 1, nrg
00042 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00043 call interpo_linear_type0(fnc2gc,fnc2,irg,itg,ipg)
00044 afnc2inv = alpgc/fnc2gc
00045 dxafn = grad2x(irg,itg,ipg)
00046 dyafn = grad2y(irg,itg,ipg)
00047 dzafn = grad2z(irg,itg,ipg)
00048 tfkax = tfkij(irg,itg,ipg,ii,1)
00049 tfkay = tfkij(irg,itg,ipg,ii,2)
00050 tfkaz = tfkij(irg,itg,ipg,ii,3)
00051
00052 souvec(irg,itg,ipg,ii) = - 2.0d0*afnc2inv &
00053 & *(tfkax*dxafn + tfkay*dyafn + tfkaz*dzafn)
00054 end do
00055 end do
00056 end do
00057 end do
00058
00059 deallocate(fnc2)
00060 deallocate(grad2x)
00061 deallocate(grad2y)
00062 deallocate(grad2z)
00063 end subroutine sourceterm_MoC_CF