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