00001 subroutine source_komar_mass_compact_peos_spin(souf)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrf, ntf, npf
00004 use def_metric_on_SFC_CF
00005 use def_velocity_rot
00006 use def_vector_phi, only : hvec_phif, vec_phif
00007 use def_matter
00008 use def_matter_parameter, only : radi, ber, ome
00009 use def_metric, only : psi, alph, bvxd, bvyd, bvzd
00010 use coordinate_grav_r, only : rg
00011 use trigonometry_grav_theta, only : sinthg, costhg
00012 use trigonometry_grav_phi, only : sinphig, cosphig
00013 use def_vector_phi, only : vec_phif
00014 use make_array_3d
00015 use interface_flgrad_4th_gridpoint
00016 use interface_flgrad_2nd_gridpoint
00017 use interface_interpo_gr2fl
00018 implicit none
00019 real(long), pointer :: souf(:,:,:)
00020 real(long) :: emdw, alphw, psiw, rhow, prew, hhw, utw, rhoHw, esseS
00021 real(long) :: rjjx, rjjy, rjjz, rjjbeta, ene
00022 real(long) :: vphif(1:3)
00023 real(long) :: otermx, otermy, otermz, bvxufw, bvyufw, bvzufw
00024 integer :: irf,itf,ipf
00025 real(long) :: dxvep, dyvep, dzvep, lam, alphw2
00026 real(long) :: zfac, small = 1.0d-15
00027 real(long) :: wx,wy,wz,psiw4,psiwp,dvep2,wdvep,w2,wterm,uih2,hut
00028
00029 do ipf = 0, npf
00030 do itf = 0, ntf
00031 do irf = 0, nrf
00032 emdw = emd(irf,itf,ipf)
00033 if (emdw <= small) emdw = small
00034 psiw = psif(irf,itf,ipf)
00035 alphw = alphf(irf,itf,ipf)
00036 bvxufw = bvxdf(irf,itf,ipf)
00037 bvyufw = bvydf(irf,itf,ipf)
00038 bvzufw = bvzdf(irf,itf,ipf)
00039 call peos_q2hprho(emdw, hhw, prew, rhow, ene)
00040
00041 vphif(1) = vec_phif(irf,itf,ipf,1)
00042 vphif(2) = vec_phif(irf,itf,ipf,2)
00043 vphif(3) = vec_phif(irf,itf,ipf,3)
00044 otermx = bvxufw + ome*vphif(1)
00045 otermy = bvyufw + ome*vphif(2)
00046 otermz = bvzufw + ome*vphif(3)
00047 dxvep = vepxf(irf,itf,ipf)
00048 dyvep = vepyf(irf,itf,ipf)
00049 dzvep = vepzf(irf,itf,ipf)
00050
00051 wx = wxspf(irf,itf,ipf)
00052 wy = wyspf(irf,itf,ipf)
00053 wz = wzspf(irf,itf,ipf)
00054 psiw4 = psiw**4
00055 psiwp = psiw**confpow
00056 alphw2 = alphw**2
00057 lam = ber + otermx*dxvep + otermy*dyvep + otermz*dzvep
00058 dvep2 = (dxvep**2 + dyvep**2 + dzvep**2)/psiw4
00059 wdvep = (wx*dxvep + wy*dyvep + wz*dzvep)*psiwp
00060 w2 = psiw4*(wx*wx + wy*wy + wz*wz)*psiwp**2.0d0
00061 wterm = wdvep + w2
00062 uih2 = dvep2 + 2.0d0*wdvep + w2
00063 if ( (lam*lam + 4.0d0*alphw2*wterm)<0.0d0 ) then
00064 write(6,*) "hut imaginary....exiting"
00065 stop
00066 end if
00067 hut = (lam + sqrt(lam*lam + 4.0d0*alphw2*wterm))/(2.0d0*alphw2)
00068 utw = hut/hhw
00069
00070 rhoHw = hhw*rhow*(alphw*utw)**2 - prew
00071 esseS = -hhw*rhow + 4.0d0*prew + rhoHw
00072
00073 rjjx = hhw*rhow*alphw*utw**2*psiw**4*otermx
00074 rjjy = hhw*rhow*alphw*utw**2*psiw**4*otermy
00075 rjjz = hhw*rhow*alphw*utw**2*psiw**4*otermz
00076
00077 rjjbeta = rjjx*bvxufw + rjjy*bvyufw + rjjz*bvzufw
00078
00079 souf(irf,itf,ipf) = (alphw*(esseS+rhoHw) - 2.0d0*rjjbeta)*psiw**6
00080 end do
00081 end do
00082 end do
00083
00084 end subroutine source_komar_mass_compact_peos_spin