00001 subroutine sourceterm_HaC_peos_spin(sou)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric
00005 use def_matter, only : emdg, jomeg_int, vepxg, vepyg, vepzg
00006 use def_matter_parameter, only : ome, ber, radi
00007 use def_velocity_rot
00008 use def_vector_phi
00009 use interface_interpo_linear_type0
00010 implicit none
00011 real(long), pointer :: sou(:,:,:)
00012 real(long) :: emdgc, rhogc, pregc, hhgc, utgc, rhoHc, zfac
00013 real(long) :: psigc, alpgc, alpsigc, aijaij, ene, jomeg_intgc
00014 real(long) :: vphig(3), ovdgc(3), bvxdgc, bvydgc, bvzdgc
00015 real(long) :: vepxgc, vepygc, vepzgc, lam
00016 real(long) :: wxgc, wygc, wzgc, psigc4, psigcp, alpgc2, dvep2, wdvep, w2,
00017 wterm, uih2, hut
00018 integer :: irg, itg, ipg
00019
00020
00021
00022
00023 do ipg = 1, npg
00024 do itg = 1, ntg
00025 do irg = 1, nrg
00026 call interpo_linear_type0(emdgc,emdg,irg,itg,ipg)
00027 call interpo_linear_type0(vepxgc ,vepxg ,irg,itg,ipg)
00028 call interpo_linear_type0(vepygc ,vepyg ,irg,itg,ipg)
00029 call interpo_linear_type0(vepzgc ,vepzg ,irg,itg,ipg)
00030 call interpo_linear_type0(jomeg_intgc,jomeg_int,irg,itg,ipg)
00031 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00032 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00033 call interpo_linear_type0(bvxdgc,bvxd,irg,itg,ipg)
00034 call interpo_linear_type0(bvydgc,bvyd,irg,itg,ipg)
00035 call interpo_linear_type0(bvzdgc,bvzd,irg,itg,ipg)
00036 call interpo_linear_type0(wxgc,wxspg,irg,itg,ipg)
00037 call interpo_linear_type0(wygc,wyspg,irg,itg,ipg)
00038 call interpo_linear_type0(wzgc,wzspg,irg,itg,ipg)
00039
00040 aijaij = tfkijkij(irg,itg,ipg)
00041 zfac = 1.0d0
00042 if (emdgc <= 1.0d-15) then
00043 emdgc = 1.0d-15
00044 zfac = 0.0d0
00045 end if
00046 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00047
00048 vphig(1) = hvec_phig(irg,itg,ipg,1)
00049 vphig(2) = hvec_phig(irg,itg,ipg,2)
00050 vphig(3) = hvec_phig(irg,itg,ipg,3)
00051 ovdgc(1) = bvxdgc + ome*vphig(1)
00052 ovdgc(2) = bvydgc + ome*vphig(2)
00053 ovdgc(3) = bvzdgc + ome*vphig(3)
00054 lam = ber + ovdgc(1)*vepxgc + ovdgc(2)*vepygc + ovdgc(3)*vepzgc
00055 psigc4 = psigc**4
00056 psigcp = psigc**confpow
00057 alpgc2 = alpgc**2
00058
00059 dvep2 = (vepxgc**2 + vepygc**2 + vepzgc**2)/psigc4
00060 wdvep = (wxgc*vepxgc + wygc*vepygc + wzgc*vepzgc)*psigcp
00061 w2 = psigc4*(wxgc*wxgc + wygc*wygc + wzgc*wzgc)*psigcp**2.0d0
00062
00063 wterm = wdvep + w2
00064 uih2 = dvep2 + 2.0d0*wdvep + w2
00065
00066 if ( (lam*lam + 4.0d0*alpgc2*wterm)<0.0d0 ) then
00067 write(6,*) "hut imaginary....exiting"
00068 stop
00069 end if
00070 hut = (lam + sqrt(lam*lam + 4.0d0*alpgc2*wterm))/(2.0d0*alpgc2)
00071
00072 utgc = hut/hhgc
00073
00074 rhoHc = hhgc*rhogc*(alpgc*utgc)**2 - pregc
00075
00076 sou(irg,itg,ipg) = - 0.125d0*psigc**5*aijaij &
00077 & - radi**2*2.0d0*pi*psigc**5*rhoHc*zfac
00078 end do
00079 end do
00080 end do
00081 end subroutine sourceterm_HaC_peos_spin
00082