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