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