00001 subroutine current_modify_MHD(cobj)
00002 use phys_constant, only : long, pi
00003 use grid_parameter
00004 use coordinate_grav_r, only : rg
00005 use trigonometry_grav_phi, only : sinphig, cosphig
00006 use def_metric, only : alph, psi
00007 use def_metric_hij, only : hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00008 use def_matter, only : rs
00009 use def_matter_parameter, only : radi
00010 use def_emfield, only : va, vaxd, vayd, vazd, jtu, jxu, jyu, jzu
00011 use def_emfield_derivatives, only : Lie_bAxd_grid, Lie_bAyd_grid, &
00012 & Lie_bAzd_grid
00013 use def_vector_phi, only : vec_phig
00014 use integrability_fnc_MHD
00015 use make_array_3d
00016 use interface_interpo_gr2fl
00017 use interface_grgrad_gridpoint_4th_type0
00018 use interface_calc_integrability_modify_At
00019 implicit none
00020 real(long), pointer :: vaphid(:,:,:), va_mod(:,:,:), alva_mod(:,:,:)
00021 real(long), pointer :: fxd_grid_mod(:,:,:), p2fxu(:,:,:)
00022 real(long), pointer :: fyd_grid_mod(:,:,:), p2fyu(:,:,:)
00023 real(long), pointer :: fzd_grid_mod(:,:,:), p2fzu(:,:,:)
00024 real(long) :: vecphi(3)
00025 real(long) :: dfxudx, dfxudy, dfxudz
00026 real(long) :: dfyudx, dfyudy, dfyudz
00027 real(long) :: dfzudx, dfzudy, dfzudz
00028 real(long) :: alps6inv, pi4invR2, jphiu, Aphi
00029 real(long) :: dalvadxgp, dalvadygp, dalvadzgp
00030 real(long) :: lie_bAx, lie_bAy, lie_bAz, ainvh
00031 integer :: irg, itg, ipg
00032 character(len=2), intent(in) :: cobj
00033
00034 call alloc_array3d(vaphid, 0, nrg, 0, ntg, 0, npg)
00035 call alloc_array3d(va_mod, 0, nrg, 0, ntg, 0, npg)
00036 call alloc_array3d(alva_mod, 0, nrg, 0, ntg, 0, npg)
00037 call alloc_array3d(fxd_grid_mod, 0, nrg, 0, ntg, 0, npg)
00038 call alloc_array3d(fyd_grid_mod, 0, nrg, 0, ntg, 0, npg)
00039 call alloc_array3d(fzd_grid_mod, 0, nrg, 0, ntg, 0, npg)
00040 call alloc_array3d(p2fxu, 0, nrg, 0, ntg, 0, npg)
00041 call alloc_array3d(p2fyu, 0, nrg, 0, ntg, 0, npg)
00042 call alloc_array3d(p2fzu, 0, nrg, 0, ntg, 0, npg)
00043
00044 vaphid(0:nrg,0:ntg,0:npg)=vayd(0:nrg,0:ntg,0:npg) &
00045 & *vec_phig(0:nrg,0:ntg,0:npg,2)
00046
00047 call calc_integrability_modify_At(va_mod,'gr')
00048 alva_mod(0:nrg,0:ntg,0:npg) = alph(0:nrg,0:ntg,0:npg) &
00049 & *va_mod(0:nrg,0:ntg,0:npg)
00050
00051 do ipg = 0, npg
00052 do itg = 0, ntg
00053 do irg = 0, nrg
00054
00055 call grgrad_gridpoint_4th_type0(alva_mod, &
00056 & dalvadxgp,dalvadygp,dalvadzgp,irg,itg,ipg,cobj)
00057 ainvh = 1.0d0/alph(irg,itg,ipg)
00058 lie_bAx = Lie_bAxd_grid(irg,itg,ipg)
00059 lie_bAy = Lie_bAyd_grid(irg,itg,ipg)
00060 lie_bAz = Lie_bAzd_grid(irg,itg,ipg)
00061 fxd_grid_mod(irg,itg,ipg) = ainvh*(lie_bAx - dalvadxgp)
00062 fyd_grid_mod(irg,itg,ipg) = ainvh*(lie_bAy - dalvadygp)
00063 fzd_grid_mod(irg,itg,ipg) = ainvh*(lie_bAz - dalvadzgp)
00064
00065 end do
00066 end do
00067 end do
00068
00069 p2fxu(0:nrg,0:ntg,0:npg) = psi(0:nrg,0:ntg,0:npg)**2 &
00070 & *((1.0d0 + hxxu(0:nrg,0:ntg,0:npg))*fxd_grid_mod(0:nrg,0:ntg,0:npg) &
00071 & + hxyu(0:nrg,0:ntg,0:npg) *fyd_grid_mod(0:nrg,0:ntg,0:npg) &
00072 & + hxzu(0:nrg,0:ntg,0:npg) *fzd_grid_mod(0:nrg,0:ntg,0:npg))
00073 p2fyu(0:nrg,0:ntg,0:npg) = psi(0:nrg,0:ntg,0:npg)**2 &
00074 & *(hxyu(0:nrg,0:ntg,0:npg) *fxd_grid_mod(0:nrg,0:ntg,0:npg) &
00075 & + (1.0d0 + hyyu(0:nrg,0:ntg,0:npg))*fyd_grid_mod(0:nrg,0:ntg,0:npg) &
00076 & + hyzu(0:nrg,0:ntg,0:npg) *fzd_grid_mod(0:nrg,0:ntg,0:npg))
00077 p2fzu(0:nrg,0:ntg,0:npg) = psi(0:nrg,0:ntg,0:npg)**2 &
00078 & *(hxzu(0:nrg,0:ntg,0:npg) *fxd_grid_mod(0:nrg,0:ntg,0:npg) &
00079 & + hyzu(0:nrg,0:ntg,0:npg) *fyd_grid_mod(0:nrg,0:ntg,0:npg) &
00080 & + (1.0d0 + hzzu(0:nrg,0:ntg,0:npg))*fzd_grid_mod(0:nrg,0:ntg,0:npg))
00081
00082
00083 pi4invR2 = 1.0d0/(4.0d0*pi*radi**2)
00084 ipg = 0
00085 do itg = 0, ntg
00086 do irg = 0, nrg
00087
00088 vecphi(1)= vec_phig(irg,itg,ipg,1)
00089 vecphi(2)= vec_phig(irg,itg,ipg,2)
00090 vecphi(3)= vec_phig(irg,itg,ipg,3)
00091 alps6inv = 1.0d0/(alph(irg,itg,ipg)*psi(irg,itg,ipg)**6)
00092 Aphi = vaphid(irg,itg,ipg)
00093 call calc_integrability_fnc_MHD(Aphi)
00094 call grgrad_gridpoint_4th_type0(p2fxu,dfxudx,dfxudy,dfxudz,&
00095 & irg,itg,ipg,cobj)
00096 call grgrad_gridpoint_4th_type0(p2fyu,dfyudx,dfyudy,dfyudz,&
00097 & irg,itg,ipg,cobj)
00098 call grgrad_gridpoint_4th_type0(p2fzu,dfzudx,dfzudy,dfzudz,&
00099 & irg,itg,ipg,cobj)
00100
00101 jtu(irg,itg,ipg) = pi4invR2*alps6inv*(dfxudx + dfyudy +dfzudz)
00102
00103 if (irg.eq.0.or.itg.eq.0) then
00104 jphiu = 0.0d0
00105 else
00106 jphiu = jyu(irg,itg,ipg)/vecphi(2) - MHDfnc_dAt*jtu(irg,itg,ipg)
00107 end if
00108
00109 jyu(irg,itg,ipg) = jphiu*vecphi(2)
00110
00111 if (rg(irg).gt.rs(itg,ipg)) then
00112 jtu(irg,itg,ipg) = 0.0d0
00113 jyu(irg,itg,ipg) = 0.0d0
00114 end if
00115
00116 end do
00117 end do
00118
00119
00120
00121 do ipg = 0, npg
00122 do itg = 0, ntg
00123 do irg = 0, nrg
00124 jtu(irg,itg,ipg) = jtu(irg,itg,0)
00125 jxu(irg,itg,ipg) = cosphig(ipg)*jxu(irg,itg,0) &
00126 & - sinphig(ipg)*jyu(irg,itg,0)
00127 jyu(irg,itg,ipg) = sinphig(ipg)*jxu(irg,itg,0) &
00128 & + cosphig(ipg)*jyu(irg,itg,0)
00129 jzu(irg,itg,ipg) = jzu(irg,itg,0)
00130
00131 if (rg(irg).gt.rs(itg,ipg)) then
00132 jtu(irg,itg,ipg) = 0.0d0
00133 jxu(irg,itg,ipg) = 0.0d0
00134 jyu(irg,itg,ipg) = 0.0d0
00135 jzu(irg,itg,ipg) = 0.0d0
00136 end if
00137
00138 end do
00139 end do
00140 end do
00141
00142 deallocate(vaphid)
00143 deallocate(va_mod)
00144 deallocate(alva_mod)
00145 deallocate(fxd_grid_mod)
00146 deallocate(fyd_grid_mod)
00147 deallocate(fzd_grid_mod)
00148 deallocate(p2fxu)
00149 deallocate(p2fyu)
00150 deallocate(p2fzu)
00151
00152 end subroutine current_modify_MHD