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