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