00001 subroutine source_EMenergy_axisym_WL(sou_MtorB,sou_MpolB,sou_MeleE)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric, only : psi
00005 use def_metric_hij, only : hxxd, hxyd, hxzd, hyyd, hyzd, hzzd, &
00006 & hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00007 use def_faraday_tensor, only : fijd_grid, fiju_grid, fidfiu_grid
00008 use def_SEM_tensor_EMF, only : rhoH_EMF, jmd_EMF, smijd_EMF, trsm_EMF
00009 use interface_interpo_linear_type0_meridian
00010 use make_array_3d
00011 implicit none
00012 integer :: irg, itg, ipg
00013 real(long), pointer :: sou_MtorB(:,:,:), sou_MpolB(:,:,:), sou_MeleE(:,:,:)
00014 real(long), pointer :: sou_MtorB_grid(:,:,:), sou_MpolB_grid(:,:,:),
00015 sou_MeleE_grid(:,:,:)
00016 real(long) :: pi4inv, pi8inv, val
00017 real(long) :: psigc, psigc4inv, psigc8inv
00018 real(long) :: fidfiugc, fijdgc(3,3), fijugc(3,3)
00019
00020
00021
00022
00023 call alloc_array3d(sou_MtorB_grid,0,nrg,0,ntg,0,npg)
00024 call alloc_array3d(sou_MpolB_grid,0,nrg,0,ntg,0,npg)
00025 call alloc_array3d(sou_MeleE_grid,0,nrg,0,ntg,0,npg)
00026
00027 pi4inv = 1.0d0/(4.0d0*pi)
00028 pi8inv = 1.0d0/(8.0d0*pi)
00029
00030 fijdgc(1:3,1:3) = 0.0d0
00031 fijugc(1:3,1:3) = 0.0d0
00032 ipg = 0
00033 do itg = 0, ntg
00034 do irg = 0, nrg
00035
00036 psigc = psi(irg,itg,ipg)
00037 psigc4inv = 1.0d0/psigc**4
00038 psigc8inv = 1.0d0/psigc**8
00039
00040 fidfiugc = fidfiu_grid(irg,itg,ipg)
00041 fijdgc(1,2) = fijd_grid(irg,itg,ipg,1) ; fijdgc(2,1) = - fijdgc(1,2)
00042 fijdgc(1,3) = fijd_grid(irg,itg,ipg,2) ; fijdgc(3,1) = - fijdgc(1,3)
00043 fijdgc(2,3) = fijd_grid(irg,itg,ipg,3) ; fijdgc(3,2) = - fijdgc(2,3)
00044 fijugc(1,2) = fiju_grid(irg,itg,ipg,1) ; fijugc(2,1) = - fijugc(1,2)
00045 fijugc(1,3) = fiju_grid(irg,itg,ipg,2) ; fijugc(3,1) = - fijugc(1,3)
00046 fijugc(2,3) = fiju_grid(irg,itg,ipg,3) ; fijugc(3,2) = - fijugc(2,3)
00047
00048 sou_MtorB_grid(irg,itg,ipg) = pi8inv*psigc8inv* fijdgc(1,3)*fijugc(1,3)
00049 sou_MpolB_grid(irg,itg,ipg) = pi8inv*psigc8inv*(fijdgc(1,2)*fijugc(1,2) &
00050 & + fijdgc(3,2)*fijugc(3,2))
00051 sou_MeleE_grid(irg,itg,ipg) = pi8inv*psigc4inv* fidfiugc
00052
00053 end do
00054 end do
00055
00056 ipg = 0
00057 do itg = 1, ntg
00058 do irg = 1, nrg
00059 call interpo_linear_type0_meridian(val,sou_MtorB_grid,irg,itg,ipg)
00060 sou_MtorB(irg,itg,ipg) = val
00061 call interpo_linear_type0_meridian(val,sou_MpolB_grid,irg,itg,ipg)
00062 sou_MpolB(irg,itg,ipg) = val
00063 call interpo_linear_type0_meridian(val,sou_MeleE_grid,irg,itg,ipg)
00064 sou_MeleE(irg,itg,ipg) = val
00065 end do
00066 end do
00067
00068 do ipg = 1, npg
00069 sou_MtorB(0:nrg,0:ntg,ipg) = sou_MtorB(0:nrg,0:ntg,0)
00070 sou_MpolB(0:nrg,0:ntg,ipg) = sou_MpolB(0:nrg,0:ntg,0)
00071 sou_MeleE(0:nrg,0:ntg,ipg) = sou_MeleE(0:nrg,0:ntg,0)
00072 end do
00073
00074 deallocate(sou_MtorB_grid)
00075 deallocate(sou_MpolB_grid)
00076 deallocate(sou_MeleE_grid)
00077
00078 end subroutine source_EMenergy_axisym_WL