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