00001 subroutine hydrostatic_eq_peos(emd)
00002 use phys_constant, only : long
00003 use grid_parameter
00004 use def_matter, only : rs, omef, jomef, jomef_int, &
00005 & omeg, jomeg, jomeg_int
00006 use def_matter_parameter, only : ome, ber, ROT_LAW
00007 use def_metric, only : alph, psi, bvxd, bvyd, bvzd
00008 use coordinate_grav_r, only : rg
00009 use trigonometry_grav_theta, only : sinthg, costhg
00010 use trigonometry_grav_phi, only : sinphig, cosphig
00011 use def_vector_phi, only : vec_phif
00012 use def_vector_x, only : vec_xf, vec_xg
00013 use make_array_3d
00014 use interface_interpo_gr2fl
00015 implicit none
00016 real(long), pointer :: emd(:,:,:)
00017 real(long), pointer :: alphf(:,:,:), psif(:,:,:)
00018 real(long), pointer :: bvxdf(:,:,:), bvydf(:,:,:), bvzdf(:,:,:)
00019 real(long) :: vphif(3)
00020 real(long) :: ovufc(3), ovufc2
00021 real(long) :: alp_tmp, psi_tmp, bx_tmp, by_tmp
00022 real(long) :: omefc, jomefc, jomef_intfc, omegc, jomegc, jomeg_intgc
00023 real(long) :: hh, ut, pre, rho, ene, qq
00024 real(long) :: xx, yy, zz, Rcyl
00025 integer :: irf, itf, ipf
00026 call alloc_array3d(psif, 0, nrf, 0, ntf, 0, npf)
00027 call alloc_array3d(alphf, 0, nrf, 0, ntf, 0, npf)
00028 call alloc_array3d(bvxdf, 0, nrf, 0, ntf, 0, npf)
00029 call alloc_array3d(bvydf, 0, nrf, 0, ntf, 0, npf)
00030 call alloc_array3d(bvzdf, 0, nrf, 0, ntf, 0, npf)
00031 call interpo_gr2fl(alph, alphf)
00032 call interpo_gr2fl(psi, psif)
00033 call interpo_gr2fl(bvxd, bvxdf)
00034 call interpo_gr2fl(bvyd, bvydf)
00035 call interpo_gr2fl(bvzd, bvzdf)
00036
00037 if (ROT_LAW.eq.'DR') then
00038 do itf = 0, ntf
00039 do irf = 0, nrf
00040 ipf = 0
00041 xx = vec_xf(irf,itf,ipf,1)
00042 yy = vec_xf(irf,itf,ipf,2)
00043 zz = vec_xf(irf,itf,ipf,3)
00044 Rcyl = sqrt(xx**2 + yy**2)
00045 omefc = omef(irf,itf,ipf)
00046
00047 alp_tmp = alphf(irf,itf,ipf)
00048 psi_tmp = psif(irf,itf,ipf)
00049 bx_tmp = bvxdf(irf,itf,ipf)
00050 by_tmp = bvydf(irf,itf,ipf)
00051
00052 call calc_omega_drot(Rcyl,alp_tmp,psi_tmp,bx_tmp,by_tmp&
00053 & ,omefc,jomefc,jomef_intfc)
00054 omef(irf,itf,0:npf) = omefc
00055 jomef(irf,itf,0:npf) = jomefc
00056 jomef_int(irf,itf,0:npf) = jomef_intfc
00057
00058 xx = vec_xg(irf,itf,ipf,1)
00059 yy = vec_xg(irf,itf,ipf,2)
00060 zz = vec_xg(irf,itf,ipf,3)
00061 Rcyl = sqrt(xx**2 + yy**2)
00062 omegc = omeg(irf,itf,ipf)
00063 alp_tmp = alph(irf,itf,ipf)
00064 psi_tmp = psi(irf,itf,ipf)
00065 bx_tmp = bvxd(irf,itf,ipf)
00066 by_tmp = bvyd(irf,itf,ipf)
00067 call calc_omega_drot(Rcyl,alp_tmp,psi_tmp,bx_tmp,by_tmp&
00068 & ,omegc,jomegc,jomeg_intgc)
00069 omeg(irf,itf,0:npf) = omegc
00070 jomeg(irf,itf,0:npf) = jomegc
00071 jomeg_int(irf,itf,0:npf) = jomeg_intgc
00072 end do
00073 end do
00074 else
00075 omef(0:nrf,0:ntf,0:npf) = ome
00076 jomef(0:nrf,0:ntf,0:npf) = 0.0d0
00077 jomef_int(0:nrf,0:ntf,0:npf) = 0.0d0
00078 omeg(0:nrf,0:ntf,0:npf) = ome
00079 jomeg(0:nrf,0:ntf,0:npf) = 0.0d0
00080 jomeg_int(0:nrf,0:ntf,0:npf) = 0.0d0
00081 end if
00082
00083 do ipf = 0, npf
00084 do itf = 0, ntf
00085 do irf = 0, nrf
00086 vphif(1) = vec_phif(irf,itf,ipf,1)
00087 vphif(2) = vec_phif(irf,itf,ipf,2)
00088 vphif(3) = vec_phif(irf,itf,ipf,3)
00089 omefc = omef(irf,itf,ipf)
00090 ovufc(1) = bvxdf(irf,itf,ipf) + omefc*vphif(1)
00091 ovufc(2) = bvydf(irf,itf,ipf) + omefc*vphif(2)
00092 ovufc(3) = bvzdf(irf,itf,ipf) + omefc*vphif(3)
00093 ovufc2 = ovufc(1)**2 + ovufc(2)**2 + ovufc(3)**2
00094 ut = 1.0d0/sqrt(alphf(irf,itf,ipf)**2 &
00095 & - psif(irf,itf,ipf)**4*ovufc2)
00096 jomef_intfc = jomef_int(irf,itf,ipf)
00097 hh = ber*ut*dexp(-jomef_intfc)
00098 call peos_h2qprho(hh, qq, pre, rho, ene)
00099 emd(irf,itf,ipf) = qq
00100 end do
00101 end do
00102 end do
00103
00104 deallocate(alphf)
00105 deallocate(psif)
00106 deallocate(bvxdf)
00107 deallocate(bvydf)
00108 deallocate(bvzdf)
00109 end subroutine hydrostatic_eq_peos