00001 subroutine hydrostatic_eq_CF_peos_irrot(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
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
00086 ovdfc(1) = bvxdf(irf,itf,ipf) + omefc*vphif(1)
00087 ovdfc(2) = bvydf(irf,itf,ipf) + omefc*vphif(2)
00088 ovdfc(3) = bvzdf(irf,itf,ipf) + omefc*vphif(3)
00089
00090 call flgrad_2nd_gridpoint(vep,dxvep,dyvep,dzvep,irf,itf,ipf)
00091
00092 psifc = psif(irf,itf,ipf)
00093 psifc4 = psifc**4
00094 alpfc = alphf(irf,itf,ipf)
00095 alpfc2 = alpfc**2
00096 lam = ber + ovdfc(1)*dxvep + ovdfc(2)*dyvep + ovdfc(3)*dzvep
00097
00098 dvep2 = (dxvep**2 + dyvep**2 + dzvep**2)/psifc4
00099 uih2 = dvep2
00100
00101 hut = lam/alpfc2
00102
00103 if ( (hut*hut*alpfc2 - uih2)<0.0d0 ) then
00104 write(6,*) "hh imaginary....exiting"
00105 stop
00106 end if
00107 hh = sqrt(hut*hut*alpfc2 - uih2)
00108
00109
00110
00111
00112
00113
00114
00115 call peos_h2qprho(hh, qq, pre, rho, ene)
00116 emd(irf,itf,ipf) = qq
00117 end do
00118 end do
00119 end do
00120
00121 end subroutine hydrostatic_eq_CF_peos_irrot