00001 subroutine sourceterm_trG_CF_pBH(sou)
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric, only : alph
00005 use def_metric_pBH, only : wme, aijaij_trpBH, index_wme
00006 use interface_interpo_linear_type0
00007 use interface_grgrad_midpoint_r3rd_type0
00008 implicit none
00009 real(long), pointer :: sou(:,:,:)
00010 real(long) :: alphgc, wmegc, dwdx, dwdy, dwdz, daldx, daldy, daldz
00011 real(long) :: aijaijgc, fac1, fac2, index
00012 integer :: irg, itg, ipg
00013
00014
00015
00016
00017 fac1 = 2.0d0/dble(index_wme)
00018 fac2 = 1.0d0/dsqrt(2.0d0)
00019 index = 8.0d0/dble(index_wme)
00020 do ipg = 1, npg
00021 do itg = 1, ntg
00022 do irg = 1, nrg
00023 call interpo_linear_type0(wmegc,wme,irg,itg,ipg)
00024 call interpo_linear_type0(alphgc,alph,irg,itg,ipg)
00025 call grgrad_midpoint_r3rd_type0(wme,dwdx,dwdy,dwdz,irg,itg,ipg,'bh')
00026 call grgrad_midpoint_r3rd_type0(alph,daldx,daldy,daldz,irg,itg,ipg, &
00027 & 'bh')
00028 aijaijgc = aijaij_trpBH(irg,itg,ipg)
00029
00030 sou(irg,itg,ipg) = fac2*( &
00031 & - (daldx**2.0d0 + daldy**2.0d0 + daldz**2.0d0)/alphgc**2 &
00032 & + fac1*(daldx*dwdx + daldy*dwdy + daldz*dwdz)/(alphgc*wmegc) &
00033 & + wmegc**index*aijaijgc )
00034 end do
00035 end do
00036 end do
00037
00038 end subroutine sourceterm_trG_CF_pBH