00001 subroutine sourceterm_trfreeG_WL(souten)
00002
00003 use phys_constant, only : pi
00004 use def_matter_parameter, only : ome, ber, radi
00005 use def_metric, only : psi, alph, alps, tfkij, &
00006 & bvxu, bvyu, bvzu, bvxd, bvyd, bvzd, alps2
00007 use def_metric_excurve_grid, only : tfkij_grid
00008 use def_metric_rotshift, only : ovxu, ovyu, ovzu, &
00009 & ovxd, ovyd, ovzd
00010 use grid_parameter, only : nrg, ntg, npg
00011 use coordinate_grav_r, only : rg
00012 use def_cristoffel, only : cri
00013 use def_ricci_tensor, only : rabnl
00014 use def_shift_derivatives, only : cdbvxd, cdbvyd, cdbvzd, cdivbv
00015 use def_Lie_derivatives, only : rlpxx, rlpxy, rlpxz, rlpyy, rlpyz, rlpzz, &
00016 & rlbxx, rlbxy, rlbxz, rlbyy, rlbyz, rlbzz
00017 use def_Lie_derivatives_grid, only : rlbxx_grid, rlbxy_grid, rlbxz_grid, &
00018 & rlbyy_grid, rlbyz_grid, rlbzz_grid, &
00019 & rlpxx_grid, rlpxy_grid, rlpxz_grid, &
00020 & rlpyy_grid, rlpyz_grid, rlpzz_grid
00021 use def_formulation, only : swlp, swls, iswl
00022 use def_cutsw, only : cutfac
00023 use def_dvphi, only : dphiu
00024 use def_metric_hij, only : hxxu, hxyu, hxzu, hyyu, hyzu, hzzu, &
00025 & hxxd, hxyd, hxzd, hyyd, hyzd, hzzd
00026 use def_formulation, only : chgra, chope
00027 use make_array_3d
00028 use make_array_4d
00029 use make_array_5d
00030 use interface_interpo_linear_type0
00031 use interface_grgrad_midpoint
00032 use interface_grgrad1g_midpoint
00033 use interface_grdphi_midpoint_type0
00034 use interface_dadbscalar_type0
00035 implicit none
00036
00037 real(8), pointer :: souten(:,:,:,:)
00038 real(8), pointer :: dfdx(:,:,:), dfdy(:,:,:), dfdz(:,:,:)
00039 real(8), pointer :: fnc0(:,:,:)
00040 real(8), pointer :: grada(:,:,:,:), gradp(:,:,:,:)
00041 real(8), pointer :: gradap(:,:,:,:), gradap2(:,:,:,:)
00042 real(8), pointer :: gradk(:,:,:,:,:), gradb(:,:,:,:,:)
00043 real(8) :: dabalps2(1:3,1:3), daalps2(3),
00044 dapsi(3), daalph(3), daalps(3), cdbv(3,3)
00045 real(8) :: dbv(1:3,1:3), dov(1:3,1:3)=0.0d0
00046 real(8) :: daij(1:6,1:3)
00047 real(8) :: gamu(1:3,1:3), gamd(1:3,1:3), aij(1:3,1:3)
00048 real(8) :: rlieaij(3,3), rnlab(3,3), rpsiab(3,3),
00049 aacabc(3,3), sab(3,3), ovd(3), ovu(3), rpddal(3,3)
00050 real(8) :: heli(3,3), dphabd(3,3), dphabu(3,3), d2phab(3,3),
00051 rlbgab(3,3), rlpgab(3,3), dliepg(6,3), dliebg(6,3), &
00052 rlplbg(3,3), rlblpg(3,3), rlblbg(3,3), palidp(3,3)
00053 real(8) :: ica(6), icb(6)
00054 real(8) :: tm1a(3,3),tm2a(3,3),tm3a(3,3),tm4a(3,3),tm5a(3,3)
00055
00056 real(8) :: alpgc, pregc, psigc,
00057 hhxxu, hhxyu, hhxzu, hhyxu, hhyyu, hhyzu, &
00058 hhzxu, hhzyu, hhzzu, &
00059 bvxdc, bvxgc, bvydc, bvygc, bvzdc, bvzgc, &
00060 san, san2, cutoff, &
00061 alpgcinv, ap2gc, ap2gcinv, c1ab, c2ab, c3ab, cdalps2, cdivbc, &
00062 d2phxx, d2phxy, d2phxz, d2phyx, d2phyy, d2phyz, &
00063 d2phzx, d2phzy, d2phzz, &
00064 dapda, dhdh, &
00065 dhxxddx, dhxxddy, dhxxddz, dhxxudx, dhxxudy, dhxxudz, &
00066 dhxyddx, dhxyddy, dhxyddz, dhxyudx, dhxyudy, dhxyudz, &
00067 dhxzddx, dhxzddy, dhxzddz, dhxzudx, dhxzudy, dhxzudz, &
00068 dhyxddx, dhyxddy, dhyxddz, dhyxudx, dhyxudy, dhyxudz, &
00069 dhyyddx, dhyyddy, dhyyddz, dhyyudx, dhyyudy, dhyyudz, &
00070 dhyzddx, dhyzddy, dhyzddz, dhyzudx, dhyzudy, dhyzudz, &
00071 dhzxddx, dhzxddy, dhzxddz, dhzxudx, dhzxudy, dhzxudz, &
00072 dhzyddx, dhzyddy, dhzyddz, dhzyudx, dhzyudy, dhzyudz, &
00073 dhzzddx, dhzzddy, dhzzddz, dhzzudx, dhzzudy, dhzzudz, &
00074 dpdbgxx, dpdbgxy, dpdbgxz, dpdbgyx, dpdbgyy, dpdbgyz, &
00075 dpdbgzx, dpdbgzy, dpdbgzz, &
00076 dphdph, dphxxd, dphxyd, dphxzd, dphxxu, dphxyu, dphxzu, &
00077 dphyxd, dphyyd, dphyzd, dphyxu, dphyyu, dphyzu, &
00078 dphzxd, dphzyd, dphzzd, dphzxu, dphzyu, dphzzu, &
00079 gadadp, gamdhdh, hhxxd, hhxyd, hhxzd, &
00080 ogdphdph, ovpadpsi, ovxgc, ovygc, ovzgc, &
00081 ps43oal, ps4oal, ps4oal2, psigc4, psiinv, psiinv2, &
00082 rlielna, rlielnp, roku, sgam, sw1, sw2, sw3, &
00083 term1, term2, term3, term4, term5, tfaa, &
00084 tfaij, tfd2ph, tfheli, tflieaij, tfliep4aij, tfrnlab, tfrpddal, &
00085 trsab, traa, traij, trd2ph, trheli, trlieaij, trrnlab, trrpddal, &
00086 hhyxd, hhyyd, hhyzd, hhzxd, hhzyd, hhzzd, &
00087 ene, grad(1:3)
00088 integer :: ipg, irg, itg, iph, ii, ia, ib, ic
00089
00090 call alloc_array3d(dfdx,1,nrg,1,ntg,1,npg)
00091 call alloc_array3d(dfdy,1,nrg,1,ntg,1,npg)
00092 call alloc_array3d(dfdz,1,nrg,1,ntg,1,npg)
00093 call alloc_array3d(fnc0,0,nrg,0,ntg,0,npg)
00094 call alloc_array4d(grada,1,nrg,1,ntg,1,npg,1,3)
00095 call alloc_array4d(gradp,1,nrg,1,ntg,1,npg,1,3)
00096 call alloc_array4d(gradap,1,nrg,1,ntg,1,npg,1,3)
00097 call alloc_array4d(gradap2,1,nrg,1,ntg,1,npg,1,3)
00098 call alloc_array5d(gradk,1,nrg,1,ntg,1,npg,1,6,1,3)
00099 call alloc_array5d(gradb,1,nrg,1,ntg,1,npg,1,3,1,3)
00100
00101
00102
00103 do ii = 1, 3
00104
00105 if (ii == 1) call grgrad_midpoint(bvxu,dfdx,dfdy,dfdz)
00106 if (ii == 2) call grgrad_midpoint(bvyu,dfdx,dfdy,dfdz)
00107 if (ii == 3) call grgrad_midpoint(bvzu,dfdx,dfdy,dfdz)
00108 gradb(1:nrg,1:ntg,1:npg,ii,1) = dfdx(1:nrg,1:ntg,1:npg)
00109 gradb(1:nrg,1:ntg,1:npg,ii,2) = dfdy(1:nrg,1:ntg,1:npg)
00110 gradb(1:nrg,1:ntg,1:npg,ii,3) = dfdz(1:nrg,1:ntg,1:npg)
00111 end do
00112
00113 do ic = 1, 6
00114 ia = 1 + ic/4 + ic/6
00115 ib = ic - (ic/4)*2 - ic/6
00116 fnc0(0:nrg,0:ntg,0:npg) = tfkij_grid(0:nrg,0:ntg,0:npg,ia,ib)
00117 call grgrad_midpoint(fnc0,dfdx,dfdy,dfdz)
00118 gradk(1:nrg,1:ntg,1:npg,ic,1) = dfdx(1:nrg,1:ntg,1:npg)
00119 gradk(1:nrg,1:ntg,1:npg,ic,2) = dfdy(1:nrg,1:ntg,1:npg)
00120 gradk(1:nrg,1:ntg,1:npg,ic,3) = dfdz(1:nrg,1:ntg,1:npg)
00121 end do
00122
00123 alps2(0:nrg,0:ntg,0:npg) = &
00124 & alph(0:nrg,0:ntg,0:npg)*psi(0:nrg,0:ntg,0:npg)**2
00125
00126 call grgrad_midpoint(psi,dfdx,dfdy,dfdz)
00127 gradp(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00128 gradp(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00129 gradp(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00130 call grgrad_midpoint(alph,dfdx,dfdy,dfdz)
00131 grada(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00132 grada(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00133 grada(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00134 call grgrad_midpoint(alps,dfdx,dfdy,dfdz)
00135 gradap(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00136 gradap(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00137 gradap(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00138 call grgrad_midpoint(alps2,dfdx,dfdy,dfdz)
00139 gradap2(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00140 gradap2(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00141 gradap2(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00142
00143 san = 1.0d0/3.0d0
00144 san2= 2.0d0/3.0d0
00145 roku= 1.0d0/6.0d0
00146
00147 do ipg = 1, npg
00148 do itg = 1, ntg
00149 do irg = 1, nrg
00150
00151 cutoff = 1.0d0
00152 if (chgra == 'C'.or.chgra == 'H'.or.chgra == 'W') then
00153 if (rg(irg) > cutfac*pi/ome) cutoff = 0.0d0
00154 end if
00155
00156 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00157 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00158 call interpo_linear_type0(ap2gc,alps2,irg,itg,ipg)
00159 psigc4 = psigc**4
00160 psiinv = 1.0d0/psigc
00161 psiinv2 = psiinv**2
00162 alpgcinv = 1.0d0/alpgc
00163 ap2gcinv = 1.0d0/ap2gc
00164 ps43oal = 4.0d0*psigc**3*alpgcinv
00165 ps4oal = psigc4*alpgcinv
00166 ps4oal2= psigc4*alpgcinv**2
00167
00168 call interpo_linear_type0(hhxxu,hxxu,irg,itg,ipg)
00169 call interpo_linear_type0(hhxyu,hxyu,irg,itg,ipg)
00170 call interpo_linear_type0(hhxzu,hxzu,irg,itg,ipg)
00171 call interpo_linear_type0(hhyyu,hyyu,irg,itg,ipg)
00172 call interpo_linear_type0(hhyzu,hyzu,irg,itg,ipg)
00173 call interpo_linear_type0(hhzzu,hzzu,irg,itg,ipg)
00174 hhyxu = hhxyu
00175 hhzxu = hhxzu
00176 hhzyu = hhyzu
00177 gamu(1,1) = hhxxu + 1.0d0
00178 gamu(1,2) = hhxyu
00179 gamu(1,3) = hhxzu
00180 gamu(2,2) = hhyyu + 1.0d0
00181 gamu(2,3) = hhyzu
00182 gamu(3,3) = hhzzu + 1.0d0
00183 gamu(2,1) = gamu(1,2)
00184 gamu(3,1) = gamu(1,3)
00185 gamu(3,2) = gamu(2,3)
00186
00187 call interpo_linear_type0(hhxxd,hxxd,irg,itg,ipg)
00188 call interpo_linear_type0(hhxyd,hxyd,irg,itg,ipg)
00189 call interpo_linear_type0(hhxzd,hxzd,irg,itg,ipg)
00190 call interpo_linear_type0(hhyyd,hyyd,irg,itg,ipg)
00191 call interpo_linear_type0(hhyzd,hyzd,irg,itg,ipg)
00192 call interpo_linear_type0(hhzzd,hzzd,irg,itg,ipg)
00193 hhyxd = hhxyd
00194 hhzxd = hhxzd
00195 hhzyd = hhyzd
00196 gamd(1,1) = hhxxd + 1.0d0
00197 gamd(1,2) = hhxyd
00198 gamd(1,3) = hhxzd
00199 gamd(2,2) = hhyyd + 1.0d0
00200 gamd(2,3) = hhyzd
00201 gamd(3,3) = hhzzd + 1.0d0
00202 gamd(2,1) = gamd(1,2)
00203 gamd(3,1) = gamd(1,3)
00204 gamd(3,2) = gamd(2,3)
00205
00206 call interpo_linear_type0(ovxgc,ovxd,irg,itg,ipg)
00207 call interpo_linear_type0(ovygc,ovyd,irg,itg,ipg)
00208 call interpo_linear_type0(ovzgc,ovzd,irg,itg,ipg)
00209 ovd(1) = ovxgc
00210 ovd(2) = ovygc
00211 ovd(3) = ovzgc
00212 call interpo_linear_type0(ovxgc,ovxu,irg,itg,ipg)
00213 call interpo_linear_type0(ovygc,ovyu,irg,itg,ipg)
00214 call interpo_linear_type0(ovzgc,ovzu,irg,itg,ipg)
00215 ovu(1) = ovxgc
00216 ovu(2) = ovygc
00217 ovu(3) = ovzgc
00218
00219
00220 call interpo_linear_type0(bvxgc,bvxu,irg,itg,ipg)
00221 call interpo_linear_type0(bvygc,bvyu,irg,itg,ipg)
00222 call interpo_linear_type0(bvzgc,bvzu,irg,itg,ipg)
00223
00224 dapsi(1:3) = gradp(irg,itg,ipg,1:3)
00225 daalph(1:3) = grada(irg,itg,ipg,1:3)
00226 daalps(1:3) = gradap(irg,itg,ipg,1:3)
00227 daalps2(1:3) = gradap2(irg,itg,ipg,1:3)
00228 cdbv(1,1:3) = cdbvxd(irg,itg,ipg,1:3)
00229 cdbv(2,1:3) = cdbvyd(irg,itg,ipg,1:3)
00230 cdbv(3,1:3) = cdbvzd(irg,itg,ipg,1:3)
00231 do ia = 1, 3
00232 aij(ia,1:3) = tfkij(irg,itg,ipg,ia,1:3)
00233 dbv(ia,1:3) = gradb(irg,itg,ipg,ia,1:3)
00234 end do
00235 daij(1:6,1:3) = gradk(irg,itg,ipg,1:6,1:3)
00236
00237
00238
00239 cdivbc = cdivbv(irg,itg,ipg)
00240
00241
00242
00243 call dadbscalar_type0(alps2,dabalps2,irg,itg,ipg)
00244
00245 gadadp=gamu(1,1)*daalph(1)*dapsi(1)+gamu(1,2)*daalph(1)*dapsi(2) &
00246 & +gamu(1,3)*daalph(1)*dapsi(3)+gamu(2,1)*daalph(2)*dapsi(1) &
00247 & +gamu(2,2)*daalph(2)*dapsi(2)+gamu(2,3)*daalph(2)*dapsi(3) &
00248 & +gamu(3,1)*daalph(3)*dapsi(1)+gamu(3,2)*daalph(3)*dapsi(2) &
00249 & +gamu(3,3)*daalph(3)*dapsi(3)
00250
00251
00252
00253 sw1 = swlp(iswl)
00254 sw2 = 1.0d0 - sw1
00255 sw3 = swls(iswl)
00256
00257
00258
00259 ovpadpsi=ps43oal*(ovxgc*dapsi(1)+ovygc*dapsi(2)+ovzgc*dapsi(3))
00260 dov(1,2) = dbv(1,2) + ome*dphiu(1,2)
00261 dov(2,1) = dbv(2,1) + ome*dphiu(2,1)
00262
00263
00264
00265 if (chgra == 'h'.or.chgra == 'c'.or.chgra == 'C' &
00266 &.or.chgra == 'H'.or.chgra == 'W') then
00267
00268 rlbgab(1,1) = rlbxx(irg,itg,ipg)
00269 rlbgab(1,2) = rlbxy(irg,itg,ipg)
00270 rlbgab(1,3) = rlbxz(irg,itg,ipg)
00271 rlbgab(2,1) = rlbxy(irg,itg,ipg)
00272 rlbgab(2,2) = rlbyy(irg,itg,ipg)
00273 rlbgab(2,3) = rlbyz(irg,itg,ipg)
00274 rlbgab(3,1) = rlbxz(irg,itg,ipg)
00275 rlbgab(3,2) = rlbyz(irg,itg,ipg)
00276 rlbgab(3,3) = rlbzz(irg,itg,ipg)
00277 rlpgab(1,1) = rlpxx(irg,itg,ipg)
00278 rlpgab(1,2) = rlpxy(irg,itg,ipg)
00279 rlpgab(1,3) = rlpxz(irg,itg,ipg)
00280 rlpgab(2,1) = rlpxy(irg,itg,ipg)
00281 rlpgab(2,2) = rlpyy(irg,itg,ipg)
00282 rlpgab(2,3) = rlpyz(irg,itg,ipg)
00283 rlpgab(3,1) = rlpxz(irg,itg,ipg)
00284 rlpgab(3,2) = rlpyz(irg,itg,ipg)
00285 rlpgab(3,3) = rlpzz(irg,itg,ipg)
00286
00287 call grdphi_midpoint_type0(hxxd,dphxxd,irg,itg,ipg)
00288 call grdphi_midpoint_type0(hxyd,dphxyd,irg,itg,ipg)
00289 call grdphi_midpoint_type0(hxzd,dphxzd,irg,itg,ipg)
00290 call grdphi_midpoint_type0(hyyd,dphyyd,irg,itg,ipg)
00291 call grdphi_midpoint_type0(hyzd,dphyzd,irg,itg,ipg)
00292 call grdphi_midpoint_type0(hzzd,dphzzd,irg,itg,ipg)
00293 dphyxd = dphxyd
00294 dphzxd = dphxzd
00295 dphzyd = dphyzd
00296 dphabd(1,1) = dphxxd
00297 dphabd(1,2) = dphxyd
00298 dphabd(1,3) = dphxzd
00299 dphabd(2,1) = dphyxd
00300 dphabd(2,2) = dphyyd
00301 dphabd(2,3) = dphyzd
00302 dphabd(3,1) = dphzxd
00303 dphabd(3,2) = dphzyd
00304 dphabd(3,3) = dphzzd
00305 call grdphi_midpoint_type0(hxxu,dphxxu,irg,itg,ipg)
00306 call grdphi_midpoint_type0(hxyu,dphxyu,irg,itg,ipg)
00307 call grdphi_midpoint_type0(hxzu,dphxzu,irg,itg,ipg)
00308 call grdphi_midpoint_type0(hyyu,dphyyu,irg,itg,ipg)
00309 call grdphi_midpoint_type0(hyzu,dphyzu,irg,itg,ipg)
00310 call grdphi_midpoint_type0(hzzu,dphzzu,irg,itg,ipg)
00311 dphyxu = dphxyu
00312 dphzxu = dphxzu
00313 dphzyu = dphyzu
00314 dphabu(1,1) = dphxxu
00315 dphabu(1,2) = dphxyu
00316 dphabu(1,3) = dphxzu
00317 dphabu(2,1) = dphyxu
00318 dphabu(2,2) = dphyyu
00319 dphabu(2,3) = dphyzu
00320 dphabu(3,1) = dphzxu
00321 dphabu(3,2) = dphzyu
00322 dphabu(3,3) = dphzzu
00323 call grd2phi_midpoint_type0(hxxd,d2phxx,irg,itg,ipg)
00324 call grd2phi_midpoint_type0(hxyd,d2phxy,irg,itg,ipg)
00325 call grd2phi_midpoint_type0(hxzd,d2phxz,irg,itg,ipg)
00326 call grd2phi_midpoint_type0(hyyd,d2phyy,irg,itg,ipg)
00327 call grd2phi_midpoint_type0(hyzd,d2phyz,irg,itg,ipg)
00328 call grd2phi_midpoint_type0(hzzd,d2phzz,irg,itg,ipg)
00329 d2phyx = d2phxy
00330 d2phzx = d2phxz
00331 d2phzy = d2phyz
00332 d2phab(1,1) = d2phxx
00333 d2phab(1,2) = d2phxy
00334 d2phab(1,3) = d2phxz
00335 d2phab(2,1) = d2phyx
00336 d2phab(2,2) = d2phyy
00337 d2phab(2,3) = d2phyz
00338 d2phab(3,1) = d2phzx
00339 d2phab(3,2) = d2phzy
00340 d2phab(3,3) = d2phzz
00341
00342
00343
00344
00345 call grdphi_midpoint_type0(rlbxx_grid,dpdbgxx,irg,itg,ipg)
00346 call grdphi_midpoint_type0(rlbxy_grid,dpdbgxy,irg,itg,ipg)
00347 call grdphi_midpoint_type0(rlbxz_grid,dpdbgxz,irg,itg,ipg)
00348 call grdphi_midpoint_type0(rlbyy_grid,dpdbgyy,irg,itg,ipg)
00349 call grdphi_midpoint_type0(rlbyz_grid,dpdbgyz,irg,itg,ipg)
00350 call grdphi_midpoint_type0(rlbzz_grid,dpdbgzz,irg,itg,ipg)
00351 dpdbgyx = dpdbgxy
00352 dpdbgzx = dpdbgxz
00353 dpdbgzy = dpdbgyz
00354 rlplbg(1,1)=dpdbgxx+rlbgab(1,2)*dphiu(2,1)+rlbgab(2,1)*dphiu(2,1)
00355 rlplbg(1,2)=dpdbgxy+rlbgab(1,1)*dphiu(1,2)+rlbgab(2,2)*dphiu(2,1)
00356 rlplbg(1,3)=dpdbgxz
00357 rlplbg(2,1)=dpdbgyx+rlbgab(2,2)*dphiu(2,1)+rlbgab(1,1)*dphiu(1,2)
00358 rlplbg(2,2)=dpdbgyy+rlbgab(2,1)*dphiu(1,2)+rlbgab(1,2)*dphiu(1,2)
00359 rlplbg(2,3) = dpdbgyz
00360 rlplbg(3,1) = dpdbgzx
00361 rlplbg(3,2) = dpdbgzy
00362 rlplbg(3,3) = dpdbgzz
00363
00364 rlielnp = 8.0d0*psiinv &
00365 & *(ovu(1)* dapsi(1) + ovu(2)* dapsi(2) + ovu(3)* dapsi(3))
00366 rlielna = alpgcinv &
00367 & *(ovu(1)*daalph(1) + ovu(2)*daalph(2) + ovu(3)*daalph(3))
00368
00369 call grgrad1g_midpoint(rlbxx_grid,grad,irg,itg,ipg)
00370 dliebg(1,1:3) = grad(1:3)
00371 call grgrad1g_midpoint(rlbxy_grid,grad,irg,itg,ipg)
00372 dliebg(2,1:3) = grad(1:3)
00373 call grgrad1g_midpoint(rlbxz_grid,grad,irg,itg,ipg)
00374 dliebg(3,1:3) = grad(1:3)
00375 call grgrad1g_midpoint(rlbyy_grid,grad,irg,itg,ipg)
00376 dliebg(4,1:3) = grad(1:3)
00377 call grgrad1g_midpoint(rlbyz_grid,grad,irg,itg,ipg)
00378 dliebg(5,1:3) = grad(1:3)
00379 call grgrad1g_midpoint(rlbzz_grid,grad,irg,itg,ipg)
00380 dliebg(6,1:3) = grad(1:3)
00381
00382 call grgrad1g_midpoint(rlpxx_grid,grad,irg,itg,ipg)
00383 dliepg(1,1:3) = grad(1:3)
00384 call grgrad1g_midpoint(rlpxy_grid,grad,irg,itg,ipg)
00385 dliepg(2,1:3) = grad(1:3)
00386 call grgrad1g_midpoint(rlpxz_grid,grad,irg,itg,ipg)
00387 dliepg(3,1:3) = grad(1:3)
00388 call grgrad1g_midpoint(rlpyy_grid,grad,irg,itg,ipg)
00389 dliepg(4,1:3) = grad(1:3)
00390 call grgrad1g_midpoint(rlpyz_grid,grad,irg,itg,ipg)
00391 dliepg(5,1:3) = grad(1:3)
00392 call grgrad1g_midpoint(rlpzz_grid,grad,irg,itg,ipg)
00393 dliepg(6,1:3) = grad(1:3)
00394
00395 end if
00396
00397 do ic = 1, 6
00398
00399 ia = 1 + ic/4 + ic/6
00400 ib = ic - (ic/4)*2 - ic/6
00401
00402
00403
00404
00405 rlieaij(ia,ib) = &
00406 & ovxgc*daij(ic,1) + ovygc*daij(ic,2) + ovzgc*daij(ic,3) &
00407 & + aij(ia,1)*dov(1,ib)+aij(ia,2)*dov(2,ib)+aij(ia,3)*dov(3,ib) &
00408 & + aij(1,ib)*dov(1,ia)+aij(2,ib)*dov(2,ia)+aij(3,ib)*dov(3,ia)
00409
00410
00411
00412
00413
00414
00415 rnlab(ia,ib) = rabnl(irg,itg,ipg,ic)
00416
00417
00418
00419 c1ab = cri(irg,itg,ipg,1,ic)
00420 c2ab = cri(irg,itg,ipg,2,ic)
00421 c3ab = cri(irg,itg,ipg,3,ic)
00422
00423 cdalps2 = c1ab*daalps2(1) + c2ab*daalps2(2) + c3ab*daalps2(3)
00424 dapda = 4.0d0*(daalps(ia)*dapsi(ib)+daalps(ib)*dapsi(ia))
00425 rpddal(ia,ib) = ap2gcinv*(- dabalps2(ia,ib) + cdalps2 + dapda)
00426
00427
00428
00429 aacabc(ia,ib) = gamu(1,1)*aij(ia,1)*aij(ib,1) &
00430 & + gamu(1,2)*aij(ia,1)*aij(ib,2) &
00431 & + gamu(1,3)*aij(ia,1)*aij(ib,3) &
00432 & + gamu(2,1)*aij(ia,2)*aij(ib,1) &
00433 & + gamu(2,2)*aij(ia,2)*aij(ib,2) &
00434 & + gamu(2,3)*aij(ia,2)*aij(ib,3) &
00435 & + gamu(3,1)*aij(ia,3)*aij(ib,1) &
00436 & + gamu(3,2)*aij(ia,3)*aij(ib,2) &
00437 & + gamu(3,3)*aij(ia,3)*aij(ib,3)
00438
00439
00440
00441 heli(ia,ib) = 0.0d0
00442 if (chgra == 'h'.or.chgra == 'H'.or.chgra == 'W') then
00443
00444 rlblpg(ia,ib) = &
00445 & bvxgc*dliepg(ic,1)+bvygc*dliepg(ic,2)+bvzgc*dliepg(ic,3) &
00446 & + rlpgab(ia,1)*dov(1,ib) + rlpgab(ia,2)*dov(2,ib) &
00447 & + rlpgab(ia,3)*dov(3,ib) + rlpgab(1,ib)*dov(1,ia) &
00448 & + rlpgab(2,ib)*dov(2,ia) + rlpgab(3,ib)*dov(3,ia)
00449 rlblbg(ia,ib) = &
00450 & bvxgc*dliebg(ic,1)+bvygc*dliebg(ic,2)+bvzgc*dliebg(ic,3) &
00451 & + rlbgab(ia,1)*dov(1,ib) + rlbgab(ia,2)*dov(2,ib) &
00452 & + rlbgab(ia,3)*dov(3,ib) + rlbgab(1,ib)*dov(1,ia) &
00453 & + rlbgab(2,ib)*dov(2,ia) + rlbgab(3,ib)*dov(3,ia)
00454
00455 palidp(ia,ib) = (dphabd(ia,1) + rlpgab(ia,1))*dphiu(1,ib) &
00456 & + (dphabd(ia,2) + rlpgab(ia,2))*dphiu(2,ib) &
00457 & + (dphabd(ia,3) + rlpgab(ia,3))*dphiu(3,ib) &
00458 & + (dphabd(1,ib) + rlpgab(1,ib))*dphiu(1,ia) &
00459 & + (dphabd(2,ib) + rlpgab(2,ib))*dphiu(2,ia) &
00460 & + (dphabd(3,ib) + rlpgab(3,ib))*dphiu(3,ia)
00461
00462 term1 = 0.5d0*(ps4oal2 - 1.0d0)*ome**2*d2phab(ia,ib)
00463 term2 = 0.5d0*ps4oal2*ome**2*palidp(ia,ib)
00464 term3 = 0.5d0*ps4oal2*ome*(rlplbg(ia,ib) + rlblpg(ia,ib))
00465 term4 = 0.5d0*ps4oal2*rlblbg(ia,ib)
00466 term5 = ps4oal*aij(ia,ib)*(rlielnp - rlielna)
00467
00468
00469 if (irg == 2.and.itg == 1.and.ipg == 0) then
00470 write(6,'(1p,6e14.6)')term1,term2,term3,term4,term5
00471 end if
00472
00473 tm1a(ia,ib) = term1
00474 tm2a(ia,ib) = term2
00475 tm3a(ia,ib) = term3
00476 tm4a(ia,ib) = term4
00477 tm5a(ia,ib) = term5
00478
00479
00480 if (chgra == 'H') then
00481 term2 = term2*cutoff
00482 term3 = term3*cutoff
00483 end if
00484
00485 heli(ia,ib) = term1 + term2 + term3 + term4 + term5
00486
00487 end if
00488
00489 end do
00490
00491
00492
00493 call grgrad1g_midpoint(hxxd,grad,irg,itg,ipg)
00494 dhxxddx = grad(1)
00495 dhxxddy = grad(2)
00496 dhxxddz = grad(3)
00497 call grgrad1g_midpoint(hxyd,grad,irg,itg,ipg)
00498 dhxyddx = grad(1)
00499 dhxyddy = grad(2)
00500 dhxyddz = grad(3)
00501 call grgrad1g_midpoint(hxzd,grad,irg,itg,ipg)
00502 dhxzddx = grad(1)
00503 dhxzddy = grad(2)
00504 dhxzddz = grad(3)
00505 call grgrad1g_midpoint(hyyd,grad,irg,itg,ipg)
00506 dhyyddx = grad(1)
00507 dhyyddy = grad(2)
00508 dhyyddz = grad(3)
00509 call grgrad1g_midpoint(hyzd,grad,irg,itg,ipg)
00510 dhyzddx = grad(1)
00511 dhyzddy = grad(2)
00512 dhyzddz = grad(3)
00513 call grgrad1g_midpoint(hzzd,grad,irg,itg,ipg)
00514 dhzzddx = grad(1)
00515 dhzzddy = grad(2)
00516 dhzzddz = grad(3)
00517
00518 dhyxddx = dhxyddx
00519 dhyxddy = dhxyddy
00520 dhyxddz = dhxyddz
00521 dhzxddx = dhxzddx
00522 dhzxddy = dhxzddy
00523 dhzxddz = dhxzddz
00524 dhzyddx = dhyzddx
00525 dhzyddy = dhyzddy
00526 dhzyddz = dhyzddz
00527
00528 call grgrad1g_midpoint(hxxu,grad,irg,itg,ipg)
00529 dhxxudx = grad(1)
00530 dhxxudy = grad(2)
00531 dhxxudz = grad(3)
00532 call grgrad1g_midpoint(hxyu,grad,irg,itg,ipg)
00533 dhxyudx = grad(1)
00534 dhxyudy = grad(2)
00535 dhxyudz = grad(3)
00536 call grgrad1g_midpoint(hxzu,grad,irg,itg,ipg)
00537 dhxzudx = grad(1)
00538 dhxzudy = grad(2)
00539 dhxzudz = grad(3)
00540 call grgrad1g_midpoint(hyyu,grad,irg,itg,ipg)
00541 dhyyudx = grad(1)
00542 dhyyudy = grad(2)
00543 dhyyudz = grad(3)
00544 call grgrad1g_midpoint(hyzu,grad,irg,itg,ipg)
00545 dhyzudx = grad(1)
00546 dhyzudy = grad(2)
00547 dhyzudz = grad(3)
00548 call grgrad1g_midpoint(hzzu,grad,irg,itg,ipg)
00549 dhzzudx = grad(1)
00550 dhzzudy = grad(2)
00551 dhzzudz = grad(3)
00552
00553 dhyxudx = dhxyudx
00554 dhyxudy = dhxyudy
00555 dhyxudz = dhxyudz
00556 dhzxudx = dhxzudx
00557 dhzxudy = dhxzudy
00558 dhzxudz = dhxzudz
00559 dhzyudx = dhyzudx
00560 dhzyudy = dhyzudy
00561 dhzyudz = dhyzudz
00562
00563
00564
00565 dhdh = dhxxudx*dhxxddx + dhxxudy*dhxxddy + dhxxudz*dhxxddz &
00566 & + dhxyudx*dhxyddx + dhxyudy*dhxyddy + dhxyudz*dhxyddz &
00567 & + dhxzudx*dhxzddx + dhxzudy*dhxzddy + dhxzudz*dhxzddz &
00568 & + dhyxudx*dhyxddx + dhyxudy*dhyxddy + dhyxudz*dhyxddz &
00569 & + dhyyudx*dhyyddx + dhyyudy*dhyyddy + dhyyudz*dhyyddz &
00570 & + dhyzudx*dhyzddx + dhyzudy*dhyzddy + dhyzudz*dhyzddz &
00571 & + dhzxudx*dhzxddx + dhzxudy*dhzxddy + dhzxudz*dhzxddz &
00572 & + dhzyudx*dhzyddx + dhzyudy*dhzyddy + dhzyudz*dhzyddz &
00573 & + dhzzudx*dhzzddx + dhzzudy*dhzzddy + dhzzudz*dhzzddz
00574
00575 dphdph = dphxxu*dphxxd + dphxyu*dphxyd + dphxzu*dphxzd &
00576 & + dphyxu*dphyxd + dphyyu*dphyyd + dphyzu*dphyzd &
00577 & + dphzxu*dphzxd + dphzyu*dphzyd + dphzzu*dphzzd
00578
00579 heli(2,1) = heli(1,2)
00580 heli(3,1) = heli(1,3)
00581 heli(3,2) = heli(2,3)
00582 rlieaij(2,1) = rlieaij(1,2)
00583 rlieaij(3,1) = rlieaij(1,3)
00584 rlieaij(3,2) = rlieaij(2,3)
00585 rnlab(2,1) = rnlab(1,2)
00586 rnlab(3,1) = rnlab(1,3)
00587 rnlab(3,2) = rnlab(2,3)
00588 rpddal(2,1) = rpddal(1,2)
00589 rpddal(3,1) = rpddal(1,3)
00590 rpddal(3,2) = rpddal(2,3)
00591 aacabc(2,1) = aacabc(1,2)
00592 aacabc(3,1) = aacabc(1,3)
00593 aacabc(3,2) = aacabc(2,3)
00594 sab(2,1) = sab(1,2)
00595 sab(3,1) = sab(1,3)
00596 sab(3,2) = sab(2,3)
00597
00598 trheli = 0.0d0
00599 traij = 0.0d0
00600 trlieaij = 0.0d0
00601 trrnlab = 0.0d0
00602 trrpddal = 0.0d0
00603 traa = 0.0d0
00604 trsab = 0.0d0
00605 trd2ph = 0.0d0
00606 do ib = 1, 3
00607 do ia = 1, 3
00608 trheli = trheli + gamu(ia,ib)* heli(ia,ib)
00609 traij = traij + gamu(ia,ib)* aij(ia,ib)
00610 trlieaij = trlieaij + gamu(ia,ib)*rlieaij(ia,ib)
00611 trrnlab = trrnlab + gamu(ia,ib)* rnlab(ia,ib)
00612 trrpddal = trrpddal + gamu(ia,ib)* rpddal(ia,ib)
00613 traa = traa + gamu(ia,ib)* aacabc(ia,ib)
00614 trsab = trsab + gamu(ia,ib)* sab(ia,ib)
00615 trd2ph = trd2ph + gamu(ia,ib)* d2phab(ia,ib)
00616 end do
00617 end do
00618
00619 do ic = 1, 6
00620
00621 ia = 1 + ic/4 + ic/6
00622 ib = ic - (ic/4)*2 - ic/6
00623
00624 sgam = san*gamd(ia,ib)
00625 tfaij = aij(ia,ib) - sgam*traij
00626 tflieaij = rlieaij(ia,ib) - sgam*trlieaij
00627 tfrnlab = rnlab(ia,ib) - sgam*trrnlab
00628 tfrpddal = rpddal(ia,ib) - sgam*trrpddal
00629 tfaa = aacabc(ia,ib) - sgam*traa
00630
00631 tfd2ph = d2phab(ia,ib) - sgam*trd2ph
00632
00633 gamdhdh = gamd(ia,ib)*dhdh
00634 ogdphdph = 0.0d0
00635 if (chope == 'H') ogdphdph = gamd(ia,ib)*ome**2*dphdph
00636
00637 tfliep4aij = 0.0d0
00638 tfheli = 0.0d0
00639 if (chgra == 'w') tfliep4aij = tfaij*ovpadpsi + ps4oal*tflieaij
00640
00641
00642 if (chgra == 'c') tfliep4aij = tfaij*ovpadpsi + ps4oal*tflieaij
00643 if (chgra == 'C') tfliep4aij = tfaij*ovpadpsi + ps4oal*tflieaij &
00644 & - 0.5d0*ome**2*tfd2ph*cutoff
00645 if (chgra == 'h') tfheli = heli(ia,ib) - sgam*trheli
00646 if (chgra == 'H') tfheli = heli(ia,ib) - sgam*trheli
00647 if (chgra == 'W') then
00648 tfheli = heli(ia,ib) - sgam*trheli
00649 tfheli = tfheli*cutoff
00650 tfliep4aij = tfaij*ovpadpsi + ps4oal*tflieaij
00651 tfliep4aij = tfliep4aij*(1.0d0 - cutoff)
00652 end if
00653
00654
00655 souten(irg,itg,ipg,ic) = &
00656 & 2.0d0*( tfheli + tfliep4aij &
00657 & + tfrnlab + tfrpddal - 2.0d0*psigc4*tfaa &
00658 & - roku*gamdhdh + roku*ogdphdph )
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669 end do
00670 end do
00671 end do
00672 end do
00673
00674
00675
00676
00677 deallocate(dfdx)
00678 deallocate(dfdy)
00679 deallocate(dfdz)
00680 deallocate(fnc0)
00681 deallocate(grada)
00682 deallocate(gradp)
00683 deallocate(gradap)
00684 deallocate(gradap2)
00685 deallocate(gradk)
00686 deallocate(gradb)
00687
00688 end subroutine sourceterm_trfreeG_WL