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, trk
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 use interface_dadbscalar_type3
00013 implicit none
00014 real(long), pointer :: souvec(:,:,:,:)
00015 real(long), pointer :: fnc2(:,:,:)
00016 real(long), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00017 real(long) :: san, san2
00018 real(long) :: psigc, alphgc
00019 real(long) :: tfkax, tfkay, tfkaz, traceK
00020 real(long) :: p4dival, psi4gc, p2dival, dxalps2, dyalps2, dzalps2
00021 real(long) :: fidgc(3), fijdgc(3,3), Lie_bFdgc(3)
00022 real(long) :: dadbA(3,3,3), dabAx(3,3), dabAy(3,3), dabAz(3,3)
00023 real(long) :: Fapdap, p4aLieF, psiAF, p4trKF, d2A
00024 integer :: ii, irg, itg, ipg
00025
00026
00027
00028
00029 san = 1.0d0/3.0d0
00030 call alloc_array3d(fnc2,0,nrg,0,ntg,0,npg)
00031 call alloc_array3d(grad2x,1,nrg,1,ntg,1,npg)
00032 call alloc_array3d(grad2y,1,nrg,1,ntg,1,npg)
00033 call alloc_array3d(grad2z,1,nrg,1,ntg,1,npg)
00034 fnc2(0:nrg,0:ntg,0:npg) = alph(0:nrg,0:ntg,0:npg)/psi(0:nrg,0:ntg,0:npg)**2
00035 call grgrad_midpoint(fnc2,grad2x,grad2y,grad2z)
00036
00037 do ii = 1, 3
00038 do ipg = 1, npg
00039 do itg = 1, ntg
00040 do irg = 1, nrg
00041 call interpo_linear_type0(alphgc,alph,irg,itg,ipg)
00042 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00043 p4dival = psigc**4/alphgc
00044 psi4gc = psigc**4
00045 p2dival = psigc**2/alphgc
00046 dxalps2 = grad2x(irg,itg,ipg)
00047 dyalps2 = grad2y(irg,itg,ipg)
00048 dzalps2 = grad2z(irg,itg,ipg)
00049 fijdgc(1,1) = 0.0d0 ; fijdgc(2,2) = 0.0d0 ; fijdgc(3,3) = 0.0d0
00050 fijdgc(1,2) = fijd(irg,itg,ipg,1) ; fijdgc(2,1) = - fijdgc(1,2)
00051 fijdgc(1,3) = fijd(irg,itg,ipg,2) ; fijdgc(3,1) = - fijdgc(1,3)
00052 fijdgc(2,3) = fijd(irg,itg,ipg,3) ; fijdgc(3,2) = - fijdgc(2,3)
00053 Lie_bFdgc(1) = Lie_bFxd(irg,itg,ipg)
00054 Lie_bFdgc(2) = Lie_bFyd(irg,itg,ipg)
00055 Lie_bFdgc(3) = Lie_bFzd(irg,itg,ipg)
00056 fidgc(1) = fxd(irg,itg,ipg)
00057 fidgc(2) = fyd(irg,itg,ipg)
00058 fidgc(3) = fzd(irg,itg,ipg)
00059 tfkax = tfkij(irg,itg,ipg,ii,1)
00060 tfkay = tfkij(irg,itg,ipg,ii,2)
00061 tfkaz = tfkij(irg,itg,ipg,ii,3)
00062 traceK = trk(irg,itg,ipg)
00063
00064
00065
00066
00067
00068
00069 call dadbscalar_type3(vaxu,dabAx,irg,itg,ipg)
00070
00071 call dadbscalar_type3(vayu,dabAy,irg,itg,ipg)
00072
00073 call dadbscalar_type3(vazu,dabAz,irg,itg,ipg)
00074
00075
00076 dadbA(1:3,1:3,1) = dabAx(1:3,1:3)
00077 dadbA(1:3,1:3,2) = dabAy(1:3,1:3)
00078 dadbA(1:3,1:3,3) = dabAz(1:3,1:3)
00079
00080 d2A = dadbA(ii,1,1) + dadbA(ii,2,2) + dadbA(ii,3,3)
00081 Fapdap = p2dival*(fijdgc(ii,1)*dxalps2 + fijdgc(ii,2)*dyalps2 &
00082 & + fijdgc(ii,3)*dzalps2)
00083 p4aLieF = p4dival*Lie_bFdgc(ii)
00084 psiAF = 2.0d0*psi4gc*(tfkax*fidgc(1)+tfkay*fidgc(2)+tfkaz*fidgc(3))
00085 p4trKF= san*psi4gc*traceK*fidgc(ii)
00086
00087 souvec(irg,itg,ipg,ii) = d2A + Fapdap + p4aLieF - psiAF + p4trKF
00088
00089 end do
00090 end do
00091 end do
00092 end do
00093
00094 deallocate(fnc2)
00095 deallocate(grad2x)
00096 deallocate(grad2y)
00097 deallocate(grad2z)
00098 end subroutine sourceterm_MWspatial_CF