00001 subroutine hydrostatic_eq_CF_peos_spin(emd,utf,vepxf,vepyf,vepzf)
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, vep
00006 use def_velocity_potential
00007 use def_velocity_rot
00008 use def_matter_parameter, only : ome, ber, ROT_LAW
00009 use def_metric, only : alph, psi, bvxd, bvyd, bvzd
00010 use def_metric_on_SFC_CF
00011 use coordinate_grav_r, only : rg
00012 use trigonometry_grav_theta, only : sinthg, costhg
00013 use trigonometry_grav_phi, only : sinphig, cosphig
00014 use def_vector_phi, only : vec_phif
00015 use def_vector_x, only : vec_xf, vec_xg
00016 use make_array_3d
00017 use interface_flgrad_4th_gridpoint
00018 use interface_flgrad_2nd_gridpoint
00019 implicit none
00020 real(long), pointer :: emd(:,:,:), utf(:,:,:), vepxf(:,:,:), vepyf(:,:,:), vepzf(:,:,:)
00021 real(long) :: vphif(3)
00022 real(long) :: ovdfc(3), ovdfc2
00023 real(long) :: dxvep, dyvep, dzvep, lam, wx, wy, wz, wterm
00024 real(long) :: psifc, psifc4, alpfc, alpfc2, hut, psifcp
00025 real(long) :: dvep2, wdvep, w2, uih2
00026 real(long) :: alp_tmp, psi_tmp, bx_tmp, by_tmp
00027 real(long) :: omefc, jomefc, jomef_intfc, omegc, jomegc, jomeg_intgc
00028 real(long) :: hh, ut, pre, rho, ene, qq
00029 real(long) :: xx, yy, zz, Rcyl
00030 integer :: irf, itf, ipf
00031
00032 if (ROT_LAW.eq.'DR') then
00033 do itf = 0, ntf
00034 do irf = 0, nrf
00035 ipf = 0
00036 xx = vec_xf(irf,itf,ipf,1)
00037 yy = vec_xf(irf,itf,ipf,2)
00038 zz = vec_xf(irf,itf,ipf,3)
00039 Rcyl = sqrt(xx**2 + yy**2)
00040 omefc = omef(irf,itf,ipf)
00041
00042 alp_tmp = alphf(irf,itf,ipf)
00043 psi_tmp = psif(irf,itf,ipf)
00044 bx_tmp = bvxdf(irf,itf,ipf)
00045 by_tmp = bvydf(irf,itf,ipf)
00046
00047 call calc_omega_drot(Rcyl,alp_tmp,psi_tmp,bx_tmp,by_tmp&
00048 & ,omefc,jomefc,jomef_intfc)
00049 omef(irf,itf,0:npf) = omefc
00050 jomef(irf,itf,0:npf) = jomefc
00051 jomef_int(irf,itf,0:npf) = jomef_intfc
00052
00053 xx = vec_xg(irf,itf,ipf,1)
00054 yy = vec_xg(irf,itf,ipf,2)
00055 zz = vec_xg(irf,itf,ipf,3)
00056 Rcyl = sqrt(xx**2 + yy**2)
00057 omegc = omeg(irf,itf,ipf)
00058 alp_tmp = alph(irf,itf,ipf)
00059 psi_tmp = psi(irf,itf,ipf)
00060 bx_tmp = bvxd(irf,itf,ipf)
00061 by_tmp = bvyd(irf,itf,ipf)
00062 call calc_omega_drot(Rcyl,alp_tmp,psi_tmp,bx_tmp,by_tmp&
00063 & ,omegc,jomegc,jomeg_intgc)
00064 omeg(irf,itf,0:npf) = omegc
00065 jomeg(irf,itf,0:npf) = jomegc
00066 jomeg_int(irf,itf,0:npf) = jomeg_intgc
00067 end do
00068 end do
00069 else
00070 omef(0:nrf,0:ntf,0:npf) = ome
00071 jomef(0:nrf,0:ntf,0:npf) = 0.0d0
00072 jomef_int(0:nrf,0:ntf,0:npf) = 0.0d0
00073 omeg(0:nrf,0:ntf,0:npf) = ome
00074 jomeg(0:nrf,0:ntf,0:npf) = 0.0d0
00075 jomeg_int(0:nrf,0:ntf,0:npf) = 0.0d0
00076 end if
00077
00078 do ipf = 0, npf
00079 do itf = 0, ntf
00080 do irf = 0, nrf
00081 vphif(1) = vec_phif(irf,itf,ipf,1)
00082 vphif(2) = vec_phif(irf,itf,ipf,2)
00083 vphif(3) = vec_phif(irf,itf,ipf,3)
00084 omefc = omef(irf,itf,ipf)
00085 ovdfc(1) = bvxdf(irf,itf,ipf) + omefc*vphif(1)
00086 ovdfc(2) = bvydf(irf,itf,ipf) + omefc*vphif(2)
00087 ovdfc(3) = bvzdf(irf,itf,ipf) + omefc*vphif(3)
00088 call flgrad_2nd_gridpoint(vep,dxvep,dyvep,dzvep,irf,itf,ipf)
00089
00090 wx = wxspf(irf,itf,ipf)
00091 wy = wyspf(irf,itf,ipf)
00092 wz = wzspf(irf,itf,ipf)
00093 psifc = psif(irf,itf,ipf)
00094 psifc4 = psifc**4
00095 psifcp = psifc**confpow
00096 alpfc = alphf(irf,itf,ipf)
00097 alpfc2 = alpfc**2
00098 lam = ber + ovdfc(1)*dxvep + ovdfc(2)*dyvep + ovdfc(3)*dzvep
00099
00100 dvep2 = (dxvep**2 + dyvep**2 + dzvep**2)/psifc4
00101 wdvep = (wx*dxvep + wy*dyvep + wz*dzvep)*psifcp
00102 w2 = psifc4*(wx*wx + wy*wy + wz*wz)*psifcp**2.0d0
00103
00104 wterm = wdvep + w2
00105 uih2 = dvep2 + 2.0d0*wdvep + w2
00106
00107 if ( (lam*lam + 4.0d0*alpfc2*wterm)<0.0d0 ) then
00108 write(6,*) "hut imaginary....exiting"
00109 stop
00110 end if
00111 hut = (lam + sqrt(lam*lam + 4.0d0*alpfc2*wterm))/(2.0d0*alpfc2)
00112
00113 if ( (hut*hut*alpfc2 - uih2)<0.0d0 ) then
00114 write(6,*) "hh imaginary....exiting"
00115 stop
00116 end if
00117 hh = sqrt(hut*hut*alpfc2 - uih2)
00118
00119
00120
00121 call peos_h2qprho(hh, qq, pre, rho, ene)
00122 emd(irf,itf,ipf) = qq
00123 end do
00124 end do
00125 end do
00126
00127 end subroutine hydrostatic_eq_CF_peos_spin