00001 subroutine sourceterm_MWspatial_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 def_emfield, only : vaxu, vayu, vazu
00006   use def_faraday_tensor, only : fxd, fyd, fzd, fijd, &
00007   &                              Lie_bFxd, Lie_bFyd, Lie_bFzd
00008   use make_array_3d
00009   use interface_interpo_linear_type0
00010   use interface_grgrad_midpoint
00011   use interface_dadbscalar_type0
00012   implicit none
00013   real(long), pointer :: souvec(:,:,:,:)
00014   real(long), pointer :: fnc2(:,:,:)
00015   real(long), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00016   real(long) :: san, san2
00017   real(long) :: psigc, alphgc
00018   real(long) :: tfkax, tfkay, tfkaz, traceK
00019   real(long) :: p4dival, psi4gc, aldivp2, dxps2al, dyps2al, dzps2al
00020   real(long) :: fidgc(3), fijdgc(3,3), Lie_bFdgc(3)
00021   real(long) :: dadbA(3,3,3), dabAx(3,3), dabAy(3,3), dabAz(3,3)
00022   real(long) :: Fapdpa, p4aLieF, psiAF, p4trKF, d2A
00023   integer :: ii, irg, itg, ipg
00024 
00025 
00026 
00027 
00028   san = 1.0d0/3.0d0
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   fnc2(0:nrg,0:ntg,0:npg) = psi(0:nrg,0:ntg,0:npg)**2/alph(0:nrg,0:ntg,0:npg)
00034   call grgrad_midpoint(fnc2,grad2x,grad2y,grad2z)
00035 
00036   do ii = 1, 3
00037     do ipg = 1, npg
00038       do itg = 1, ntg
00039         do irg = 1, nrg
00040           call interpo_linear_type0(alphgc,alph,irg,itg,ipg)
00041           call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00042           p4dival = psigc**4/alphgc
00043           psi4gc  = psigc**4
00044           aldivp2 = alphgc/psigc**2
00045           dxps2al = grad2x(irg,itg,ipg)
00046           dyps2al = grad2y(irg,itg,ipg)
00047           dzps2al = grad2z(irg,itg,ipg)
00048           fijdgc(1,1) = 0.0d0 ; fijdgc(2,2) = 0.0d0 ; fijdgc(3,3) = 0.0d0
00049           fijdgc(1,2) = fijd(irg,itg,ipg,1) ; fijdgc(2,1) = - fijdgc(1,2)
00050           fijdgc(1,3) = fijd(irg,itg,ipg,2) ; fijdgc(3,1) = - fijdgc(1,3)
00051           fijdgc(2,3) = fijd(irg,itg,ipg,3) ; fijdgc(3,2) = - fijdgc(2,3)
00052           Lie_bFdgc(1) = Lie_bFxd(irg,itg,ipg)
00053           Lie_bFdgc(2) = Lie_bFyd(irg,itg,ipg)
00054           Lie_bFdgc(3) = Lie_bFzd(irg,itg,ipg)
00055           fidgc(1) = fxd(irg,itg,ipg)  
00056           fidgc(2) = fyd(irg,itg,ipg)  
00057           fidgc(3) = fzd(irg,itg,ipg)  
00058           tfkax  = tfkij(irg,itg,ipg,ii,1)
00059           tfkay  = tfkij(irg,itg,ipg,ii,2)
00060           tfkaz  = tfkij(irg,itg,ipg,ii,3)
00061           traceK = 0.0d0
00062           call dadbscalar_type0(vaxu,dabAx,irg,itg,ipg)
00063           call dadbscalar_type0(vayu,dabAy,irg,itg,ipg)
00064           call dadbscalar_type0(vazu,dabAz,irg,itg,ipg)
00065           dadbA(1:3,1:3,1) = dabAx(1:3,1:3)
00066           dadbA(1:3,1:3,2) = dabAy(1:3,1:3)
00067           dadbA(1:3,1:3,3) = dabAz(1:3,1:3)
00068 
00069           d2A = dadbA(ii,1,1) + dadbA(ii,2,2) + dadbA(ii,3,3) 
00070           Fapdpa = aldivp2*(fijdgc(ii,1)*dxps2al + fijdgc(ii,2)*dyps2al &
00071           &               + fijdgc(ii,3)*dzps2al)
00072           p4aLieF = p4dival*Lie_bFdgc(ii)
00073           psiAF = 2.0d0*psi4gc*(tfkax*fidgc(1)+tfkay*fidgc(2)+tfkaz*fidgc(3))
00074           p4trKF= san*psi4gc*traceK*fidgc(ii)
00075 
00076           souvec(irg,itg,ipg,ii) = d2A + Fapdpa + p4aLieF - psiAF + p4trKF
00077 
00078         end do
00079       end do
00080     end do
00081   end do     
00082 
00083   deallocate(fnc2)
00084   deallocate(grad2x)
00085   deallocate(grad2y)
00086   deallocate(grad2z)
00087 end subroutine sourceterm_MWspatial_CF