00001 subroutine sourceterm_MWtemp_WL(sou)
00002 use def_metric, only : psi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_gamma_crist, only : gmcrix, gmcriy, gmcriz
00005 use def_metric, only : psi, alph
00006 use def_metric_hij, only : hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00007 use def_metric_hij_dirac, only : dagmabu
00008 use def_emfield, only : alva
00009 use def_emfield_derivatives, only : Lie_bAxd, Lie_bAyd, Lie_bAzd, &
00010 & Lie_bAxd_grid, Lie_bAyd_grid, Lie_bAzd_grid
00011 use def_faraday_tensor, only : fxd, fyd, fzd
00012 use make_array_4d
00013 use make_array_3d
00014 use interface_interpo_linear_type0
00015 use interface_grgrad_midpoint
00016 use interface_dadbscalar_type0
00017 implicit none
00018
00019 real(long), pointer :: sou(:,:,:)
00020 real(long), pointer :: fnc2(:,:,:)
00021 real(long), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00022 real(long), pointer :: dxLbAx(:,:,:), dyLbAx(:,:,:), dzLbAx(:,:,:)
00023 real(long), pointer :: dxLbAy(:,:,:), dyLbAy(:,:,:), dzLbAy(:,:,:)
00024 real(long), pointer :: dxLbAz(:,:,:), dyLbAz(:,:,:), dzLbAz(:,:,:)
00025 real(long), pointer :: dfdx(:,:,:), dfdy(:,:,:), dfdz(:,:,:)
00026 real(long) :: hiju(3,3), dabfnc(3,3), dpafa(3,3), dLbAgc(3,3)
00027 real(long) :: psigc, alphgc, a2divp2, dxalva, dyalva, dzalva,
00028 Lie_bAxdgc, Lie_bAydgc, Lie_bAzdgc, &
00029 diracx, diracy, diracz, zfac, &
00030 hd2va, diracdva, dps2alfa, diracLieA, trdLieA, &
00031 gmxxu, gmxyu, gmxzu, gmyyu, gmyzu, gmzzu, gmyxu, gmzxu, gmzyu, &
00032 hhxxu, hhxyu, hhxzu, hhyyu, hhyzu, hhzzu, hhyxu, hhzxu, hhzyu
00033 integer :: ipg, irg, itg
00034
00035
00036
00037
00038 call alloc_array3d(dfdx,1,nrg,1,ntg,1,npg)
00039 call alloc_array3d(dfdy,1,nrg,1,ntg,1,npg)
00040 call alloc_array3d(dfdz,1,nrg,1,ntg,1,npg)
00041 call alloc_array3d(fnc2,0,nrg,0,ntg,0,npg)
00042 call alloc_array3d(grad2x,1,nrg,1,ntg,1,npg)
00043 call alloc_array3d(grad2y,1,nrg,1,ntg,1,npg)
00044 call alloc_array3d(grad2z,1,nrg,1,ntg,1,npg)
00045 call alloc_array3d(dxLbAx,1,nrg,1,ntg,1,npg)
00046 call alloc_array3d(dyLbAx,1,nrg,1,ntg,1,npg)
00047 call alloc_array3d(dzLbAx,1,nrg,1,ntg,1,npg)
00048 call alloc_array3d(dxLbAy,1,nrg,1,ntg,1,npg)
00049 call alloc_array3d(dyLbAy,1,nrg,1,ntg,1,npg)
00050 call alloc_array3d(dzLbAy,1,nrg,1,ntg,1,npg)
00051 call alloc_array3d(dxLbAz,1,nrg,1,ntg,1,npg)
00052 call alloc_array3d(dyLbAz,1,nrg,1,ntg,1,npg)
00053 call alloc_array3d(dzLbAz,1,nrg,1,ntg,1,npg)
00054 fnc2(0:nrg,0:ntg,0:npg) = psi(0:nrg,0:ntg,0:npg)**2/alph(0:nrg,0:ntg,0:npg)
00055 call grgrad_midpoint(fnc2,grad2x,grad2y,grad2z)
00056 call grgrad_midpoint(Lie_bAxd_grid,dxLbAx,dyLbAx,dzLbAx)
00057 call grgrad_midpoint(Lie_bAyd_grid,dxLbAy,dyLbAy,dzLbAy)
00058 call grgrad_midpoint(Lie_bAzd_grid,dxLbAz,dyLbAz,dzLbAz)
00059 call grgrad_midpoint(alva,dfdx,dfdy,dfdz)
00060
00061 do ipg = 1, npg
00062 do itg = 1, ntg
00063 do irg = 1, nrg
00064
00065 call interpo_linear_type0(psigc, psi,irg,itg,ipg)
00066 call interpo_linear_type0(alphgc,alph,irg,itg,ipg)
00067 call interpo_linear_type0(hhxxu,hxxu,irg,itg,ipg)
00068 call interpo_linear_type0(hhxyu,hxyu,irg,itg,ipg)
00069 call interpo_linear_type0(hhxzu,hxzu,irg,itg,ipg)
00070 call interpo_linear_type0(hhyyu,hyyu,irg,itg,ipg)
00071 call interpo_linear_type0(hhyzu,hyzu,irg,itg,ipg)
00072 call interpo_linear_type0(hhzzu,hzzu,irg,itg,ipg)
00073 hiju(1,1) = hhxxu ; hiju(1,2) = hhxyu ; hiju(1,3) = hhxzu
00074 hiju(2,1) = hhxyu ; hiju(2,2) = hhyyu ; hiju(2,3) = hhyzu
00075 hiju(3,1) = hhxzu ; hiju(3,2) = hhyzu ; hiju(3,3) = hhzzu
00076 gmxxu = hhxxu + 1.0d0
00077 gmyyu = hhyyu + 1.0d0
00078 gmzzu = hhzzu + 1.0d0
00079 gmyxu = hhxyu
00080 gmzxu = hhxzu
00081 gmzyu = hhyzu
00082 a2divp2 = alphgc**2/psigc**2
00083 dxalva = dfdx(irg,itg,ipg)
00084 dyalva = dfdy(irg,itg,ipg)
00085 dzalva = dfdz(irg,itg,ipg)
00086 Lie_bAxdgc = Lie_bAxd(irg,itg,ipg)
00087 Lie_bAydgc = Lie_bAyd(irg,itg,ipg)
00088 Lie_bAzdgc = Lie_bAzd(irg,itg,ipg)
00089 diracx = dagmabu(irg,itg,ipg,1)
00090 diracy = dagmabu(irg,itg,ipg,2)
00091 diracz = dagmabu(irg,itg,ipg,3)
00092
00093 dpafa(1,1) = grad2x(irg,itg,ipg)*fxd(irg,itg,ipg)
00094 dpafa(1,2) = grad2x(irg,itg,ipg)*fyd(irg,itg,ipg)
00095 dpafa(1,3) = grad2x(irg,itg,ipg)*fzd(irg,itg,ipg)
00096 dpafa(2,1) = grad2y(irg,itg,ipg)*fxd(irg,itg,ipg)
00097 dpafa(2,2) = grad2y(irg,itg,ipg)*fyd(irg,itg,ipg)
00098 dpafa(2,3) = grad2y(irg,itg,ipg)*fzd(irg,itg,ipg)
00099 dpafa(3,1) = grad2z(irg,itg,ipg)*fxd(irg,itg,ipg)
00100 dpafa(3,2) = grad2z(irg,itg,ipg)*fyd(irg,itg,ipg)
00101 dpafa(3,3) = grad2z(irg,itg,ipg)*fzd(irg,itg,ipg)
00102
00103 dLbAgc(1,1) = dxLbAx(irg,itg,ipg)
00104 dLbAgc(1,2) = dyLbAx(irg,itg,ipg)
00105 dLbAgc(1,3) = dzLbAx(irg,itg,ipg)
00106 dLbAgc(2,1) = dxLbAy(irg,itg,ipg)
00107 dLbAgc(2,2) = dyLbAy(irg,itg,ipg)
00108 dLbAgc(2,3) = dzLbAy(irg,itg,ipg)
00109 dLbAgc(3,1) = dxLbAz(irg,itg,ipg)
00110 dLbAgc(3,2) = dyLbAz(irg,itg,ipg)
00111 dLbAgc(3,3) = dzLbAz(irg,itg,ipg)
00112
00113 diracdva = diracx*dxalva + diracy*dyalva + diracz*dzalva
00114 diracLieA= diracx*Lie_bAxdgc + diracy*Lie_bAydgc + diracz*Lie_bAzdgc
00115 call dadbscalar_type0(alva,dabfnc,irg,itg,ipg)
00116 call compute_trace(hiju,dabfnc,hd2va)
00117 call compute_trace(hiju,dpafa,dps2alfa)
00118 dps2alfa = a2divp2*dps2alfa
00119 call compute_trace(hiju,dLbAgc,trdLieA)
00120
00121 sou(irg,itg,ipg) = - hd2va - diracdva &
00122 & + dps2alfa + diracLieA + trdLieA
00123
00124 end do
00125 end do
00126 end do
00127
00128 deallocate(dfdx)
00129 deallocate(dfdy)
00130 deallocate(dfdz)
00131 deallocate(fnc2)
00132 deallocate(grad2x)
00133 deallocate(grad2y)
00134 deallocate(grad2z)
00135 deallocate(dxLbAx)
00136 deallocate(dyLbAx)
00137 deallocate(dzLbAx)
00138 deallocate(dxLbAy)
00139 deallocate(dyLbAy)
00140 deallocate(dzLbAy)
00141 deallocate(dxLbAz)
00142 deallocate(dyLbAz)
00143 deallocate(dzLbAz)
00144
00145 end subroutine sourceterm_MWtemp_WL