00001 subroutine SEM_tensor_GRC
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric, only : psi, alph, bvxd, bvyd, bvzd
00005 use def_metric_hij, only : hxxd, hxyd, hxzd, hyyd, hyzd, hzzd, &
00006 & hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00007 use def_matter, only : emd , utf, uxf, uyf, uzf, &
00008 & emdg, utg, uxg, uyg, uzg
00009 use def_SEM_tensor, only : rhoH, jmd, smijd, trsm
00010 use interface_grgrad_midpoint
00011 use interface_interpo_linear_type0
00012 use interface_interpo_fl2gr
00013 use make_array_3d
00014 implicit none
00015 integer :: irg, itg, ipg, ia, ib
00016 real(long) :: psigc, psigc4, psigc4inv, psigc8,
00017 alpgc, bvxdgc, bvydgc, bvzdgc, &
00018 hxxdgc, hxydgc, hxzdgc, hyydgc, hyzdgc, hzzdgc, &
00019 hxxugc, hxyugc, hxzugc, hyyugc, hyzugc, hzzugc
00020 real(long) :: emdgc, hhgc, pregc, rhogc, enegc
00021 real(long) :: utgc, uxgc, uygc, uzgc, ut, ux, uy, uz, vx, vy, vz
00022 real(long) :: gamd(3,3), gamu(3,3), ovdgc(3)
00023 real(long), pointer :: zfac(:,:,:)
00024
00025
00026
00027
00028 call alloc_array3d(zfac, 0, nrg, 0, ntg, 0, npg)
00029
00030 call interpo_fl2gr(emd, emdg)
00031 call interpo_fl2gr(utf, utg)
00032 call interpo_fl2gr(uxf, uxg)
00033 call interpo_fl2gr(uyf, uyg)
00034 call interpo_fl2gr(uzf, uzg)
00035
00036 do ipg = 1, npg
00037 do itg = 1, ntg
00038 do irg = 1, nrg
00039
00040 call interpo_linear_type0(emdgc,emdg,irg,itg,ipg)
00041 zfac(irg,itg,ipg) = 1.0d0
00042 if (emdgc <= 1.0d-15) then
00043 emdgc = 1.0d-15
00044 zfac(irg,itg,ipg) = 0.0d0
00045 cycle
00046 end if
00047 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, enegc)
00048
00049 call interpo_linear_type0(utgc ,utg ,irg,itg,ipg)
00050 call interpo_linear_type0(uxgc ,uxg ,irg,itg,ipg)
00051 call interpo_linear_type0(uygc ,uyg ,irg,itg,ipg)
00052 call interpo_linear_type0(uzgc ,uzg ,irg,itg,ipg)
00053 call interpo_linear_type0(psigc,psi ,irg,itg,ipg)
00054 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00055 call interpo_linear_type0(bvxdgc,bvxd,irg,itg,ipg)
00056 call interpo_linear_type0(bvydgc,bvyd,irg,itg,ipg)
00057 call interpo_linear_type0(bvzdgc,bvzd,irg,itg,ipg)
00058 call interpo_linear_type0(hxxdgc,hxxd,irg,itg,ipg)
00059 call interpo_linear_type0(hxydgc,hxyd,irg,itg,ipg)
00060 call interpo_linear_type0(hxzdgc,hxzd,irg,itg,ipg)
00061 call interpo_linear_type0(hyydgc,hyyd,irg,itg,ipg)
00062 call interpo_linear_type0(hyzdgc,hyzd,irg,itg,ipg)
00063 call interpo_linear_type0(hzzdgc,hzzd,irg,itg,ipg)
00064 psigc4 = psigc**4
00065 psigc4inv = 1.0d0/psigc**4
00066 psigc8 = psigc**8
00067 gamd(1,1) = 1.0d0 + hxxdgc
00068 gamd(1,2) = hxydgc
00069 gamd(1,3) = hxzdgc
00070 gamd(2,2) = 1.0d0 + hyydgc
00071 gamd(2,3) = hyzdgc
00072 gamd(3,3) = 1.0d0 + hzzdgc
00073 gamd(2,1) = gamd(1,2)
00074 gamd(3,1) = gamd(1,3)
00075 gamd(3,2) = gamd(2,3)
00076
00077 call interpo_linear_type0(hxxugc,hxxu,irg,itg,ipg)
00078 call interpo_linear_type0(hxyugc,hxyu,irg,itg,ipg)
00079 call interpo_linear_type0(hxzugc,hxzu,irg,itg,ipg)
00080 call interpo_linear_type0(hyyugc,hyyu,irg,itg,ipg)
00081 call interpo_linear_type0(hyzugc,hyzu,irg,itg,ipg)
00082 call interpo_linear_type0(hzzugc,hzzu,irg,itg,ipg)
00083 gamu(1,1) = hxxugc + 1.0d0
00084 gamu(1,2) = hxyugc
00085 gamu(1,3) = hxzugc
00086 gamu(2,2) = hyyugc + 1.0d0
00087 gamu(2,3) = hyzugc
00088 gamu(3,3) = hzzugc + 1.0d0
00089 gamu(2,1) = gamu(1,2)
00090 gamu(3,1) = gamu(1,3)
00091 gamu(3,2) = gamu(2,3)
00092
00093 ut = utgc
00094 ux = uxgc
00095 uy = uygc
00096 uz = uzgc
00097 vx = ux/ut
00098 vy = uy/ut
00099 vz = uz/ut
00100 ovdgc(1) = bvxdgc + gamd(1,1)*vx + gamd(1,2)*vy + gamd(1,3)*vz
00101 ovdgc(2) = bvydgc + gamd(2,1)*vx + gamd(2,2)*vy + gamd(2,3)*vz
00102 ovdgc(3) = bvzdgc + gamd(3,1)*vx + gamd(3,2)*vy + gamd(3,3)*vz
00103
00104 rhoH(irg,itg,ipg) = hhgc*rhogc*(alpgc*utgc)**2 - pregc
00105
00106 do ia = 1, 3
00107 jmd(irg,itg,ipg,ia) = hhgc*rhogc*alpgc*utgc**2*psigc4*ovdgc(ia)
00108 do ib = 1, 3
00109 smijd(irg,itg,ipg,ia,ib) &
00110 & = hhgc*rhogc*utgc**2*psigc8*ovdgc(ia)*ovdgc(ib) &
00111 & + pregc*psigc4*gamd(ia,ib)
00112 end do
00113 end do
00114
00115 trsm(irg,itg,ipg) = 0.0d0
00116 do ib = 1, 3
00117 do ia = 1, 3
00118 trsm(irg,itg,ipg) = trsm(irg,itg,ipg) &
00119 & + psigc4inv*gamu(ia,ib)*smijd(irg,itg,ipg,ia,ib)
00120 end do
00121 end do
00122
00123 end do
00124 end do
00125 end do
00126
00127 rhoH(1:nrg,1:ntg,1:npg) = rhoH(1:nrg,1:ntg,1:npg) &
00128 & *zfac(1:nrg,1:ntg,1:npg)
00129 trsm(1:nrg,1:ntg,1:npg) = trsm(1:nrg,1:ntg,1:npg) &
00130 & *zfac(1:nrg,1:ntg,1:npg)
00131 do ia = 1, 3
00132 jmd(1:nrg,1:ntg,1:npg,ia) = jmd(1:nrg,1:ntg,1:npg,ia) &
00133 & *zfac(1:nrg,1:ntg,1:npg)
00134 do ib = 1, 3
00135 smijd(1:nrg,1:ntg,1:npg,ia,ib) = smijd(1:nrg,1:ntg,1:npg,ia,ib) &
00136 & *zfac(1:nrg,1:ntg,1:npg)
00137 end do
00138 end do
00139
00140 deallocate(zfac)
00141
00142 end subroutine SEM_tensor_GRC