00001 subroutine sourceterm_MoC_peos(souvec,sou)
00002   use phys_constant, only : long, pi
00003   use grid_parameter, only : nrg, ntg, npg
00004   use coordinate_grav_r, only : hrg, rg
00005   use trigonometry_grav_theta, only : hsinthg,  hcosthg
00006   use trigonometry_grav_phi,   only : hsinphig, hcosphig
00007   use def_metric, only : psi, alph, tfkijkij, bvxd, bvyd, bvzd, tfkij
00008   use def_matter, only : emdg, omeg, jomeg_int
00009   use def_matter_parameter, only : ome, ber, radi
00010   use def_vector_x,   only : hvec_xg
00011   use def_vector_phi, only : hvec_phig
00012   use make_array_3d
00013   use interface_grgrad_midpoint
00014   use interface_interpo_linear_type0
00015   implicit none
00016   real(long), pointer :: sou(:,:,:) 
00017   real(long), pointer :: souvec(:,:,:,:)
00018   real(long), pointer :: fnc2(:,:,:)
00019   real(long), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00020   real(long) :: vphig(3), xxx, yyy, zzz, san, san2
00021   real(long) :: emdgc, rhogc, pregc, hhgc, utgc, oterm, zfac, rjj
00022   real(long) :: psigc, alpgc, fnc2gc, afnc2inv, dxafn, dyafn, dzafn
00023   real(long) :: bvxdgc, bvydgc, bvzdgc, tfkax, tfkay, tfkaz, ene
00024   real(long) :: omegc, jomeg_intgc
00025   integer :: ii, irg, itg, ipg
00026 
00027   call alloc_array3d(fnc2,0,nrg,0,ntg,0,npg)
00028   call alloc_array3d(grad2x,1,nrg,1,ntg,1,npg)
00029   call alloc_array3d(grad2y,1,nrg,1,ntg,1,npg)
00030   call alloc_array3d(grad2z,1,nrg,1,ntg,1,npg)
00031 
00032   san = 1.0d0/3.0d0
00033   san2= 2.0d0/3.0d0
00034 
00035 
00036 
00037 
00038   do ipg = 0, npg
00039     do itg = 0, ntg
00040       do irg = 0, nrg
00041         fnc2(irg,itg,ipg) = psi(irg,itg,ipg)**6/alph(irg,itg,ipg)
00042       end do
00043     end do
00044   end do
00045 
00046   call grgrad_midpoint(fnc2,grad2x,grad2y,grad2z)
00047 
00048   do ii = 1, 3
00049     do ipg = 1, npg
00050       do itg = 1, ntg
00051         do irg = 1, nrg
00052           call interpo_linear_type0(emdgc,emdg,irg,itg,ipg)
00053           call interpo_linear_type0(omegc,omeg,irg,itg,ipg)
00054           call interpo_linear_type0(jomeg_intgc,jomeg_int,irg,itg,ipg)
00055           call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00056           call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00057           call interpo_linear_type0(fnc2gc,fnc2,irg,itg,ipg)
00058           call interpo_linear_type0(bvxdgc,bvxd,irg,itg,ipg)
00059           call interpo_linear_type0(bvydgc,bvyd,irg,itg,ipg)
00060           call interpo_linear_type0(bvzdgc,bvzd,irg,itg,ipg)
00061           afnc2inv = alpgc/fnc2gc
00062           dxafn = grad2x(irg,itg,ipg)
00063           dyafn = grad2y(irg,itg,ipg)
00064           dzafn = grad2z(irg,itg,ipg)
00065           tfkax  = tfkij(irg,itg,ipg,ii,1)
00066           tfkay  = tfkij(irg,itg,ipg,ii,2)
00067           tfkaz  = tfkij(irg,itg,ipg,ii,3)
00068 
00069           zfac = 1.0d0
00070           if (emdgc <= 1.0d-15) then
00071             emdgc = 1.0d-15
00072             zfac  = 0.0d0
00073           end if
00074           call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00075           utgc  = hhgc/ber*exp(jomeg_intgc)
00076           vphig(1) = hvec_phig(irg,itg,ipg,1)
00077           vphig(2) = hvec_phig(irg,itg,ipg,2)
00078           vphig(3) = hvec_phig(irg,itg,ipg,3)
00079           oterm = 0.0d0
00080           if (ii == 1) oterm = bvxdgc + omegc*vphig(1)
00081           if (ii == 2) oterm = bvydgc + omegc*vphig(2)
00082           if (ii == 3) oterm = bvzdgc + omegc*vphig(3)
00083 
00084           rjj = hhgc*rhogc*alpgc*utgc**2*psigc**4*oterm
00085 
00086           souvec(irg,itg,ipg,ii) = - 2.0d0*afnc2inv &
00087         &   *(tfkax*dxafn + tfkay*dyafn + tfkaz*dzafn) &
00088         &   + radi**2*16.0d0*pi*alpgc*rjj*zfac
00089         end do
00090       end do
00091     end do
00092   end do     
00093 
00094 
00095 
00096   do ipg = 1, npg
00097     do itg = 1, ntg
00098       do irg = 1, nrg
00099         xxx = hvec_xg(irg,itg,ipg,1)
00100         yyy = hvec_xg(irg,itg,ipg,2)
00101         zzz = hvec_xg(irg,itg,ipg,3)
00102         sou(irg,itg,ipg) = xxx*souvec(irg,itg,ipg,1)  &
00103       &                  + yyy*souvec(irg,itg,ipg,2)  &
00104       &                  + zzz*souvec(irg,itg,ipg,3)
00105       end do
00106     end do
00107   end do
00108 
00109   deallocate(fnc2)
00110   deallocate(grad2x)
00111   deallocate(grad2y)
00112   deallocate(grad2z)
00113 end subroutine sourceterm_MoC_peos