00001 subroutine current_MHD
00002 use phys_constant, only : long
00003 use grid_parameter
00004 use coordinate_grav_r, only : rg
00005 use trigonometry_grav_phi, only : sinphig, cosphig
00006 use def_matter, only : emd, hhf, utf, uxdf, uydf, uzdf
00007 use def_matter_parameter, only : ome, ber
00008 use def_metric, only : alph, psi
00009 use def_emfield, only : vaxd, vayd, vazd, jtuf, jxuf, jyuf, jzuf
00010 use def_vector_phi, only : vec_phif
00011 use integrability_fnc_MHD
00012 use make_array_3d
00013 use interface_interpo_gr2fl
00014 use interface_flgrad_4th_gridpoint
00015 implicit none
00016 real(long), pointer :: alphf(:,:,:), psif(:,:,:), vaphidf(:,:,:)
00017 real(long), pointer :: vaxdf(:,:,:), vaydf(:,:,:), vazdf(:,:,:)
00018 real(long), pointer :: huxdf(:,:,:), huzdf(:,:,:), huphidf(:,:,:)
00019 real(long) :: vecphif(3)
00020 real(long) :: Aphi, dxAphi, dyAphi, dzAphi
00021 real(long) :: Bphi, dxAx, dyAx, dzAx, dxAz, dyAz, dzAz
00022 real(long) :: vorphi, dxhux, dyhux, dzhux, dxhuz, dyhuz, dzhuz
00023 real(long) :: huphi, dxhuphi, dyhuphi, dzhuphi
00024 real(long) :: hh, ut, ux, uy, uz, vx, vy, vz, pre, rho, ene, qq
00025 real(long) :: alphff, psiff, alps6f, jphiuf
00026 integer :: irf, itf, ipf
00027
00028 call alloc_array3d(psif, 0, nrf, 0, ntf, 0, npf)
00029 call alloc_array3d(alphf, 0, nrf, 0, ntf, 0, npf)
00030 call alloc_array3d(vaxdf, 0, nrf, 0, ntf, 0, npf)
00031 call alloc_array3d(vaydf, 0, nrf, 0, ntf, 0, npf)
00032 call alloc_array3d(vazdf, 0, nrf, 0, ntf, 0, npf)
00033 call alloc_array3d(vaphidf, 0, nrf, 0, ntf, 0, npf)
00034 call alloc_array3d(huxdf, 0, nrf, 0, ntf, 0, npf)
00035 call alloc_array3d(huzdf, 0, nrf, 0, ntf, 0, npf)
00036 call alloc_array3d(huphidf, 0, nrf, 0, ntf, 0, npf)
00037
00038 call interpo_gr2fl(alph, alphf)
00039 call interpo_gr2fl(psi, psif)
00040 call interpo_gr2fl(vaxd, vaxdf)
00041 call interpo_gr2fl(vayd, vaydf)
00042 call interpo_gr2fl(vazd, vazdf)
00043 vaphidf(0:nrf,0:ntf,0:npf)=vaydf(0:nrf,0:ntf,0:npf) &
00044 & *vec_phif(0:nrf,0:ntf,0:npf,2)
00045 huxdf(0:nrf,0:ntf,0:npf) = hhf(0:nrf,0:ntf,0:npf)*uxdf(0:nrf,0:ntf,0:npf)
00046 huzdf(0:nrf,0:ntf,0:npf) = hhf(0:nrf,0:ntf,0:npf)*uzdf(0:nrf,0:ntf,0:npf)
00047 huphidf(0:nrf,0:ntf,0:npf)=hhf(0:nrf,0:ntf,0:npf)*uydf(0:nrf,0:ntf,0:npf) &
00048 & *vec_phif(0:nrf,0:ntf,0:npf,2)
00049
00050
00051 ipf = 0
00052 do itf = 0, ntf
00053 do irf = 0, nrf
00054
00055 psiff = psif(irf,itf,ipf)
00056 alphff = alphf(irf,itf,ipf)
00057 alps6f = alphff*psiff**6
00058 Aphi = vaphidf(irf,itf,ipf)
00059 huphi = huphidf(irf,itf,ipf)
00060 ut = utf(irf,itf,ipf)
00061 vecphif(1)= vec_phif(irf,itf,ipf,1)
00062 vecphif(2)= vec_phif(irf,itf,ipf,2)
00063 vecphif(3)= vec_phif(irf,itf,ipf,3)
00064 call calc_integrability_fnc_MHD(Aphi)
00065 call flgrad_4th_gridpoint(vaphidf,dxAphi,dyAphi,dzAphi,irf,itf,ipf)
00066 call flgrad_4th_gridpoint(huphidf,dxhuphi,dyhuphi,dzhuphi,irf,itf,ipf)
00067 call flgrad_4th_gridpoint(vaxdf,dxAx,dyAx,dzAx,irf,itf,ipf)
00068 call flgrad_4th_gridpoint(vazdf,dxAz,dyAz,dzAz,irf,itf,ipf)
00069 Bphi = -(dxAz - dzAx)
00070 call flgrad_4th_gridpoint(huxdf,dxhux,dyhux,dzhux,irf,itf,ipf)
00071 call flgrad_4th_gridpoint(huzdf,dxhuz,dyhuz,dzhuz,irf,itf,ipf)
00072 vorphi = dxhuz - dzhux
00073 qq = emd(irf,itf,ipf)
00074 call peos_q2hprho(qq, hh, pre, rho, ene)
00075
00076
00077
00078 jxuf(irf,itf,ipf) = 1.0d0/alps6f &
00079 & *((MHDfnc_d2Psi*huphi + MHDfnc_dLambda_phi)*(-dzAphi) &
00080 & - MHDfnc_dPSI*(+dzhuphi))
00081 jzuf(irf,itf,ipf) = 1.0d0/alps6f &
00082 & *((MHDfnc_d2Psi*huphi + MHDfnc_dLambda_phi)*(+dxAphi) &
00083 & - MHDfnc_dPSI*(-dxhuphi))
00084
00085
00086
00087 jphiuf = 1.0d0/alps6f &
00088 & *((MHDfnc_d2Psi*huphi + MHDfnc_dLambda_phi)*Bphi &
00089 & - MHDfnc_dPSI*vorphi) &
00090 & -(MHDfnc_d2At*huphi + MHDfnc_dLambda)*rho*ut
00091 jyuf(irf,itf,ipf) = jphiuf*vecphif(2)
00092
00093
00094 jtuf(irf,itf,ipf) = 0.0d0
00095
00096
00097 end do
00098 end do
00099
00100
00101
00102 do ipf = 1, npf
00103 do itf = 0, ntf
00104 do irf = 0, nrf
00105 jtuf(irf,itf,ipf) = jtuf(irf,itf,0)
00106 jxuf(irf,itf,ipf) = cosphig(ipf)*jxuf(irf,itf,0) &
00107 & - sinphig(ipf)*jyuf(irf,itf,0)
00108 jyuf(irf,itf,ipf) = sinphig(ipf)*jxuf(irf,itf,0) &
00109 & + cosphig(ipf)*jyuf(irf,itf,0)
00110 jzuf(irf,itf,ipf) = jzuf(irf,itf,0)
00111 end do
00112 end do
00113 end do
00114
00115 deallocate(psif)
00116 deallocate(alphf)
00117 deallocate(vaxdf)
00118 deallocate(vaydf)
00119 deallocate(vazdf)
00120 deallocate(vaphidf)
00121 deallocate(huxdf)
00122 deallocate(huzdf)
00123 deallocate(huphidf)
00124
00125 end subroutine current_MHD