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