00001 subroutine sourceterm_MoC_WL(souvec)
00002 
00003   use phys_constant, only : pi
00004   use def_matter_parameter, only : ome
00005   use def_metric, only : psi, alph, tfkij, bvxu, bvyu, bvzu, bvxd, bvyd, bvzd
00006   use def_matter, only : emdg
00007   use grid_parameter, only : nrg, ntg, npg
00008   use coordinate_grav_r, only : rg
00009   use def_cristoffel_grid, only : cri_grid
00010   use def_gamma_crist, only : gmcrix, gmcriy, gmcriz
00011   use def_ricci_tensor, only : rab
00012   use def_formulation, only : swflu
00013   use def_shift_derivatives, only : cdbvxd, cdbvyd, cdbvzd, &
00014   &                                 pdbvxd, pdbvyd, pdbvzd
00015   use def_Lie_derivatives, only : elpxx, elpxy, elpxz, elpyy, elpyz, elpzz
00016   use def_Lie_derivatives_grid, only : elpxx_grid, elpxy_grid, elpxz_grid, &
00017   &                                    elpyy_grid, elpyz_grid, elpzz_grid
00018   use def_cristoffel, only : cri
00019   use def_cutsw, only : cutfac
00020   use def_metric_hij, only : hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00021   use def_metric_rotshift, only : ovxd, ovyd, ovzd
00022   use def_formulation, only : chgra
00023   use interface_interpo_linear_type0
00024   use interface_grgrad_midpoint
00025   use interface_grgrad1g_midpoint
00026   use interface_grgrad_4th_gridpoint
00027   use interface_dadbscalar_type0
00028   use make_array_3d
00029   implicit none
00030 
00031   real(8), pointer :: souvec(:,:,:,:)
00032   real(8), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00033   real(8), pointer :: grad4x(:,:,:), grad4y(:,:,:), grad4z(:,:,:)
00034   real(8), pointer :: fnc2(:,:,:), fnc4(:,:,:)
00035   real(8) :: dabfnc(1:3,1:3)
00036 
00037   real(8), pointer :: cri1be(:,:,:), cri2be(:,:,:), cri3be(:,:,:), 
00038                      cri4be(:,:,:), cri5be(:,:,:), cri6be(:,:,:)
00039   real(8) :: gmxxu, gmxyu, gmxzu, gmyyu, gmyzu, gmzzu, 
00040             gmyxu, gmzxu, gmzyu, &
00041             hhxxu, hhxyu, hhxzu, hhyxu, hhyyu, hhyzu, &
00042             hhzxu, hhzyu, hhzzu, &
00043             pdbvxdx, pdbvxdy, pdbvxdz, pdbvydx, pdbvydy, pdbvydz, &
00044             pdbvzdx, pdbvzdy, pdbvzdz, &
00045             bvxdc, bvxgc, bvydc, bvygc, bvzdc, bvzgc, &
00046             c11, c12, c13, c14, c15, c16, &
00047             c21, c22, c23, c24, c25, c26, &
00048             c31, c32, c33, c34, c35, c36, &
00049             gc1, gc2, gc3, gclp, gcrdb1, gcrdb2, gdcb, &
00050             gmxbvx, gmxbvy, gmxbvz, gmybvx, gmybvy, gmybvz, &
00051             gmzbvx, gmzbvy, gmzbvz, &
00052             gradfnc4, hddb, pdivlp, rax, ray, raz, tfkax, tfkay, tfkaz, &
00053             san, san2, zfac, &
00054             cutoff, afnc2inv, divlp, dxafn, &
00055             dxc1b, dxc2b, dxc3b, dxc4b, dxc5b, dxc6b, &
00056             dyc1b, dyc2b, dyc3b, dyc4b, dyc5b, dyc6b, &
00057             dzc1b, dzc2b, dzc3b, dzc4b, dzc5b, dzc6b, &
00058             dbvxdx, dbvxdy, dbvxdz, dbvydx, dbvydy, dbvydz, &
00059             dbvzdx, dbvzdy, dbvzdz, &
00060             dexxdx, dexxdy, dexxdz, dexydx, dexydy, dexydz, &
00061             dexzdx, dexzdy, dexzdz, &
00062             deyydx, deyydy, deyydz, deyzdx, deyzdy, deyzdz, &
00063             dezzdx, dezzdy, dezzdz, &
00064             dyafn, dzafn, elpxxd, elpxxm, elpxyd, elpxym, elpxzd, elpxzm, &
00065             elpyxd, elpyxm, elpyyd, elpyym, elpyzd, elpyzm, &
00066             elpzxd, elpzxm, elpzyd, elpzym, elpzzd, elpzzm, &
00067             grad(1:3), ene, fnc2gc, &
00068             bvxdgc, bvydgc, bvzdgc
00069   integer :: ipg, irg, itg, ic1, ic2, ic3, ii, ic0(1:3)
00070 
00071   call alloc_array3d(fnc2,0,nrg,0,ntg,0,npg)
00072   call alloc_array3d(fnc4,0,nrg,0,ntg,0,npg)
00073   call alloc_array3d(grad2x,0,nrg,0,ntg,0,npg)
00074   call alloc_array3d(grad2y,0,nrg,0,ntg,0,npg)
00075   call alloc_array3d(grad2z,0,nrg,0,ntg,0,npg)
00076   call alloc_array3d(grad4x,0,nrg,0,ntg,0,npg)
00077   call alloc_array3d(grad4y,0,nrg,0,ntg,0,npg)
00078   call alloc_array3d(grad4z,0,nrg,0,ntg,0,npg)
00079   call alloc_array3d(cri1be,0,nrg,0,ntg,0,npg)
00080   call alloc_array3d(cri2be,0,nrg,0,ntg,0,npg)
00081   call alloc_array3d(cri3be,0,nrg,0,ntg,0,npg)
00082   call alloc_array3d(cri4be,0,nrg,0,ntg,0,npg)
00083   call alloc_array3d(cri5be,0,nrg,0,ntg,0,npg)
00084   call alloc_array3d(cri6be,0,nrg,0,ntg,0,npg)
00085 
00086 
00087 
00088   do ipg = 0, npg
00089     do itg = 0, ntg
00090       do irg = 0, nrg
00091         hhxxu=hxxu(irg,itg,ipg)
00092         hhxyu=hxyu(irg,itg,ipg)
00093         hhxzu=hxzu(irg,itg,ipg)
00094         hhyyu=hyyu(irg,itg,ipg)
00095         hhyzu=hyzu(irg,itg,ipg)
00096         hhzzu=hzzu(irg,itg,ipg)
00097         hhyxu = hhxyu
00098         hhzxu = hhxzu
00099         hhzyu = hhyzu
00100 
00101         call grgrad_4th_gridpoint(bvxd,pdbvxdx,pdbvxdy,pdbvxdz,irg,itg,ipg)
00102         call grgrad_4th_gridpoint(bvyd,pdbvydx,pdbvydy,pdbvydz,irg,itg,ipg)
00103         call grgrad_4th_gridpoint(bvzd,pdbvzdx,pdbvzdy,pdbvzdz,irg,itg,ipg)
00104 
00105         fnc4(irg,itg,ipg) = hhxxu*pdbvxdx+hhxyu*pdbvxdy+hhxzu*pdbvxdz &
00106            &              + hhyxu*pdbvydx+hhyyu*pdbvydy+hhyzu*pdbvydz &
00107            &              + hhzxu*pdbvzdx+hhzyu*pdbvzdy+hhzzu*pdbvzdz
00108 
00109         bvxdc=bvxd(irg,itg,ipg)
00110         bvydc=bvyd(irg,itg,ipg)
00111         bvzdc=bvzd(irg,itg,ipg)
00112         c11 = cri_grid(irg,itg,ipg,1,1)
00113         c12 = cri_grid(irg,itg,ipg,1,2)
00114         c13 = cri_grid(irg,itg,ipg,1,3)
00115         c14 = cri_grid(irg,itg,ipg,1,4)
00116         c15 = cri_grid(irg,itg,ipg,1,5)
00117         c16 = cri_grid(irg,itg,ipg,1,6)
00118         c21 = cri_grid(irg,itg,ipg,2,1)
00119         c22 = cri_grid(irg,itg,ipg,2,2)
00120         c23 = cri_grid(irg,itg,ipg,2,3)
00121         c24 = cri_grid(irg,itg,ipg,2,4)
00122         c25 = cri_grid(irg,itg,ipg,2,5)
00123         c26 = cri_grid(irg,itg,ipg,2,6)
00124         c31 = cri_grid(irg,itg,ipg,3,1)
00125         c32 = cri_grid(irg,itg,ipg,3,2)
00126         c33 = cri_grid(irg,itg,ipg,3,3)
00127         c34 = cri_grid(irg,itg,ipg,3,4)
00128         c35 = cri_grid(irg,itg,ipg,3,5)
00129         c36 = cri_grid(irg,itg,ipg,3,6)
00130         cri1be(irg,itg,ipg) = c11*bvxdc + c21*bvydc + c31*bvzdc
00131         cri2be(irg,itg,ipg) = c12*bvxdc + c22*bvydc + c32*bvzdc
00132         cri3be(irg,itg,ipg) = c13*bvxdc + c23*bvydc + c33*bvzdc
00133         cri4be(irg,itg,ipg) = c14*bvxdc + c24*bvydc + c34*bvzdc
00134         cri5be(irg,itg,ipg) = c15*bvxdc + c25*bvydc + c35*bvzdc
00135         cri6be(irg,itg,ipg) = c16*bvxdc + c26*bvydc + c36*bvzdc
00136 
00137       end do
00138     end do
00139   end do
00140 
00141   fnc2(0:nrg,0:ntg,0:npg) = psi(0:nrg,0:ntg,0:npg)**6/alph(0:nrg,0:ntg,0:npg)
00142   call grgrad_midpoint(fnc2,grad2x,grad2y,grad2z)
00143   call grgrad_midpoint(fnc4,grad4x,grad4y,grad4z)
00144 
00145   san = 1.0d0/3.0d0
00146   san2= 2.0d0/3.0d0
00147 
00148   do ii = 1, 3
00149 
00150     do ipg = 1, npg
00151       do itg = 1, ntg
00152         do irg = 1, nrg
00153 
00154           cutoff = 1.0d0
00155           if (chgra == 'c'.or.chgra == 'C'.or.chgra == 'W') then
00156             if (rg(irg) > cutfac*pi/ome) cutoff = 0.0d0
00157           end if
00158 
00159           call interpo_linear_type0(bvxgc,bvxu,irg,itg,ipg)
00160           call interpo_linear_type0(bvygc,bvyu,irg,itg,ipg)
00161           call interpo_linear_type0(bvzgc,bvzu,irg,itg,ipg)
00162 
00163           call interpo_linear_type0(hhxxu,hxxu,irg,itg,ipg)
00164           call interpo_linear_type0(hhxyu,hxyu,irg,itg,ipg)
00165           call interpo_linear_type0(hhxzu,hxzu,irg,itg,ipg)
00166           call interpo_linear_type0(hhyyu,hyyu,irg,itg,ipg)
00167           call interpo_linear_type0(hhyzu,hyzu,irg,itg,ipg)
00168           call interpo_linear_type0(hhzzu,hzzu,irg,itg,ipg)
00169           hhyxu = hhxyu
00170           hhzxu = hhxzu
00171           hhzyu = hhyzu
00172           gmxxu = hhxxu + 1.0d0
00173           gmxyu = hhxyu
00174           gmxzu = hhxzu
00175           gmyyu = hhyyu + 1.0d0
00176           gmyzu = hhyzu
00177           gmzzu = hhzzu + 1.0d0
00178           gmyxu = gmxyu
00179           gmzxu = gmxzu
00180           gmzyu = gmyzu
00181 
00182           dxafn = grad2x(irg,itg,ipg)
00183           dyafn = grad2y(irg,itg,ipg)
00184           dzafn = grad2z(irg,itg,ipg)
00185           tfkax  = tfkij(irg,itg,ipg,ii,1)
00186           tfkay  = tfkij(irg,itg,ipg,ii,2)
00187           tfkaz  = tfkij(irg,itg,ipg,ii,3)
00188 
00189           dbvxdx = cdbvxd(irg,itg,ipg,1)
00190           dbvydx = cdbvyd(irg,itg,ipg,1)
00191           dbvzdx = cdbvzd(irg,itg,ipg,1)
00192           dbvxdy = cdbvxd(irg,itg,ipg,2)
00193           dbvydy = cdbvyd(irg,itg,ipg,2)
00194           dbvzdy = cdbvzd(irg,itg,ipg,2)
00195           dbvxdz = cdbvxd(irg,itg,ipg,3)
00196           dbvydz = cdbvyd(irg,itg,ipg,3)
00197           dbvzdz = cdbvzd(irg,itg,ipg,3)
00198 
00199           hddb = 0.0d0
00200           gdcb = 0.0d0
00201           gcrdb1 = 0.0d0
00202           gcrdb2 = 0.0d0
00203           gradfnc4 = 0.0d0
00204           rax = 0.0d0
00205           ray = 0.0d0
00206           raz = 0.0d0
00207           divlp = 0.0d0
00208 
00209           if (chgra /= 'i') then
00210 
00211             if (ii == 1) gradfnc4 = grad4x(irg,itg,ipg)
00212             if (ii == 2) gradfnc4 = grad4y(irg,itg,ipg)
00213             if (ii == 3) gradfnc4 = grad4z(irg,itg,ipg)
00214 
00215             c11 = cri(irg,itg,ipg,1,1)
00216             c12 = cri(irg,itg,ipg,1,2)
00217             c13 = cri(irg,itg,ipg,1,3)
00218             c14 = cri(irg,itg,ipg,1,4)
00219             c15 = cri(irg,itg,ipg,1,5)
00220             c16 = cri(irg,itg,ipg,1,6)
00221             c21 = cri(irg,itg,ipg,2,1)
00222             c22 = cri(irg,itg,ipg,2,2)
00223             c23 = cri(irg,itg,ipg,2,3)
00224             c24 = cri(irg,itg,ipg,2,4)
00225             c25 = cri(irg,itg,ipg,2,5)
00226             c26 = cri(irg,itg,ipg,2,6)
00227             c31 = cri(irg,itg,ipg,3,1)
00228             c32 = cri(irg,itg,ipg,3,2)
00229             c33 = cri(irg,itg,ipg,3,3)
00230             c34 = cri(irg,itg,ipg,3,4)
00231             c35 = cri(irg,itg,ipg,3,5)
00232             c36 = cri(irg,itg,ipg,3,6)
00233 
00234             gc1 = gmcrix(irg,itg,ipg)
00235             gc2 = gmcriy(irg,itg,ipg)
00236             gc3 = gmcriz(irg,itg,ipg)
00237 
00238             ic1 = 1*(ii-2)*(ii-3)/2 - 2*(ii-1)*(ii-3) + 3*(ii-1)*(ii-2)/2
00239             ic2 = 2*(ii-2)*(ii-3)/2 - 4*(ii-1)*(ii-3) + 5*(ii-1)*(ii-2)/2
00240             ic3 = 3*(ii-2)*(ii-3)/2 - 5*(ii-1)*(ii-3) + 6*(ii-1)*(ii-2)/2
00241 
00242             rax = rab(irg,itg,ipg,ic1)
00243             ray = rab(irg,itg,ipg,ic2)
00244             raz = rab(irg,itg,ipg,ic3)
00245 
00246             ic0(1) = ic1
00247             ic0(2) = ic2
00248             ic0(3) = ic3
00249 
00250 
00251 
00252             if(ii == 1) call dadbscalar_type0(bvxd,dabfnc,irg,itg,ipg)
00253             if(ii == 2) call dadbscalar_type0(bvyd,dabfnc,irg,itg,ipg)
00254             if(ii == 3) call dadbscalar_type0(bvzd,dabfnc,irg,itg,ipg)
00255             hddb = hhxxu*dabfnc(1,1) + hhxyu*dabfnc(1,2) + hhxzu*dabfnc(1,3) &
00256             &    + hhyxu*dabfnc(2,1) + hhyyu*dabfnc(2,2) + hhyzu*dabfnc(2,3) &
00257             &    + hhzxu*dabfnc(3,1) + hhzyu*dabfnc(3,2) + hhzzu*dabfnc(3,3)
00258 
00259 
00260 
00261             if (ii == 1) then
00262               call grgrad1g_midpoint(cri1be,grad,irg,itg,ipg)
00263               dxc1b = grad(1)
00264               dyc1b = grad(2)
00265               dzc1b = grad(3)
00266               call grgrad1g_midpoint(cri2be,grad,irg,itg,ipg)
00267               dxc2b = grad(1)
00268               dyc2b = grad(2)
00269               dzc2b = grad(3)
00270               call grgrad1g_midpoint(cri3be,grad,irg,itg,ipg)
00271               dxc3b = grad(1)
00272               dyc3b = grad(2)
00273               dzc3b = grad(3)
00274               gdcb = gmxxu*dxc1b + gmxyu*dxc2b + gmxzu*dxc3b &
00275                  &     + gmyxu*dyc1b + gmyyu*dyc2b + gmyzu*dyc3b &
00276                  &     + gmzxu*dzc1b + gmzyu*dzc2b + gmzzu*dzc3b
00277             end if
00278             if (ii == 2) then
00279               call grgrad1g_midpoint(cri2be,grad,irg,itg,ipg)
00280               dxc2b = grad(1)
00281               dyc2b = grad(2)
00282               dzc2b = grad(3)
00283               call grgrad1g_midpoint(cri4be,grad,irg,itg,ipg)
00284               dxc4b = grad(1)
00285               dyc4b = grad(2)
00286               dzc4b = grad(3)
00287               call grgrad1g_midpoint(cri5be,grad,irg,itg,ipg)
00288               dxc5b = grad(1)
00289               dyc5b = grad(2)
00290               dzc5b = grad(3)
00291               gdcb = gmxxu*dxc2b + gmxyu*dxc4b + gmxzu*dxc5b &
00292                  &     + gmyxu*dyc2b + gmyyu*dyc4b + gmyzu*dyc5b &
00293                  &     + gmzxu*dzc2b + gmzyu*dzc4b + gmzzu*dzc5b
00294             end if
00295             if (ii == 3) then
00296               call grgrad1g_midpoint(cri3be,grad,irg,itg,ipg)
00297               dxc3b = grad(1)
00298               dyc3b = grad(2)
00299               dzc3b = grad(3)
00300               call grgrad1g_midpoint(cri5be,grad,irg,itg,ipg)
00301               dxc5b = grad(1)
00302               dyc5b = grad(2)
00303               dzc5b = grad(3)
00304               call grgrad1g_midpoint(cri6be,grad,irg,itg,ipg)
00305               dxc6b = grad(1)
00306               dyc6b = grad(2)
00307               dzc6b = grad(3)
00308               gdcb = gmxxu*dxc3b + gmxyu*dxc5b + gmxzu*dxc6b &
00309               &    + gmyxu*dyc3b + gmyyu*dyc5b + gmyzu*dyc6b &
00310               &    + gmzxu*dzc3b + gmzyu*dzc5b + gmzzu*dzc6b
00311             end if
00312 
00313 
00314 
00315             if (ii == 1) gcrdb1 = gc1*dbvxdx + gc2*dbvxdy + gc3*dbvxdz
00316             if (ii == 2) gcrdb1 = gc1*dbvydx + gc2*dbvydy + gc3*dbvydz
00317             if (ii == 3) gcrdb1 = gc1*dbvzdx + gc2*dbvzdy + gc3*dbvzdz
00318 
00319             gmxbvx = gmxxu*dbvxdx + gmxyu*dbvxdy + gmxzu*dbvxdz
00320             gmxbvy = gmxxu*dbvydx + gmxyu*dbvydy + gmxzu*dbvydz
00321             gmxbvz = gmxxu*dbvzdx + gmxyu*dbvzdy + gmxzu*dbvzdz
00322             gmybvx = gmyxu*dbvxdx + gmyyu*dbvxdy + gmyzu*dbvxdz
00323             gmybvy = gmyxu*dbvydx + gmyyu*dbvydy + gmyzu*dbvydz
00324             gmybvz = gmyxu*dbvzdx + gmyyu*dbvzdy + gmyzu*dbvzdz
00325             gmzbvx = gmzxu*dbvxdx + gmzyu*dbvxdy + gmzzu*dbvxdz
00326             gmzbvy = gmzxu*dbvydx + gmzyu*dbvydy + gmzzu*dbvydz
00327             gmzbvz = gmzxu*dbvzdx + gmzyu*dbvzdy + gmzzu*dbvzdz
00328 
00329             if (ii == 1) &
00330                & gcrdb2 = c11*gmxbvx + c21*gmxbvy + c31*gmxbvz &
00331                &        + c12*gmybvx + c22*gmybvy + c32*gmybvz &
00332                &        + c13*gmzbvx + c23*gmzbvy + c33*gmzbvz
00333 
00334             if (ii == 2) &
00335                & gcrdb2 = c12*gmxbvx + c22*gmxbvy + c32*gmxbvz &
00336                &        + c14*gmybvx + c24*gmybvy + c34*gmybvz &
00337                &        + c15*gmzbvx + c25*gmzbvy + c35*gmzbvz
00338 
00339             if (ii == 3) &
00340                & gcrdb2 = c13*gmxbvx + c23*gmxbvy + c33*gmxbvz &
00341                &        + c15*gmybvx + c25*gmybvy + c35*gmybvz &
00342                &        + c16*gmzbvx + c26*gmzbvy + c36*gmzbvz
00343 
00344 
00345 
00346             if (chgra == 'h'.or.chgra == 'c'.or.chgra == 'C' &
00347                &.or.chgra == 'H'.or.chgra == 'W') then
00348 
00349               elpxxd = elpxx(irg,itg,ipg)
00350               elpxyd = elpxy(irg,itg,ipg)
00351               elpxzd = elpxz(irg,itg,ipg)
00352               elpyyd = elpyy(irg,itg,ipg)
00353               elpyzd = elpyz(irg,itg,ipg)
00354               elpzzd = elpzz(irg,itg,ipg)
00355               elpyxd = elpxyd
00356               elpzxd = elpxzd
00357               elpzyd = elpyzd
00358 
00359               elpxxm = gmxxu*elpxxd + gmxyu*elpxyd + gmxzu*elpxzd
00360               elpxym = gmyxu*elpxxd + gmyyu*elpxyd + gmyzu*elpxzd
00361               elpxzm = gmzxu*elpxxd + gmzyu*elpxyd + gmzzu*elpxzd
00362               elpyxm = gmxxu*elpyxd + gmxyu*elpyyd + gmxzu*elpyzd
00363               elpyym = gmyxu*elpyxd + gmyyu*elpyyd + gmyzu*elpyzd
00364               elpyzm = gmzxu*elpyxd + gmzyu*elpyyd + gmzzu*elpyzd
00365               elpzxm = gmxxu*elpzxd + gmxyu*elpzyd + gmxzu*elpzzd
00366               elpzym = gmyxu*elpzxd + gmyyu*elpzyd + gmyzu*elpzzd
00367               elpzzm = gmzxu*elpzxd + gmzyu*elpzyd + gmzzu*elpzzd
00368 
00369               if (ii == 1) then
00370                 call grgrad1g_midpoint(elpxx_grid,grad,irg,itg,ipg)
00371                 dexxdx = grad(1)
00372                 dexxdy = grad(2)
00373                 dexxdz = grad(3)
00374                 call grgrad1g_midpoint(elpxy_grid,grad,irg,itg,ipg)
00375                 dexydx = grad(1)
00376                 dexydy = grad(2)
00377                 dexydz = grad(3)
00378                 call grgrad1g_midpoint(elpxz_grid,grad,irg,itg,ipg)
00379                 dexzdx = grad(1)
00380                 dexzdy = grad(2)
00381                 dexzdz = grad(3)
00382                 pdivlp = gmxxu*dexxdx + gmxyu*dexxdy + gmxzu*dexxdz &
00383                    &       + gmyxu*dexydx + gmyyu*dexydy + gmyzu*dexydz &
00384                    &       + gmzxu*dexzdx + gmzyu*dexzdy + gmzzu*dexzdz
00385                 gclp = c11*elpxxm + c12*elpxym + c13*elpxzm &
00386                    &     + c21*elpyxm + c22*elpyym + c23*elpyzm &
00387                    &     + c31*elpzxm + c32*elpzym + c33*elpzzm
00388                 divlp = pdivlp - gclp
00389               end if
00390               if (ii == 2) then
00391                 call grgrad1g_midpoint(elpxy_grid,grad,irg,itg,ipg)
00392                 dexydx = grad(1)
00393                 dexydy = grad(2)
00394                 dexydz = grad(3)
00395                 call grgrad1g_midpoint(elpyy_grid,grad,irg,itg,ipg)
00396                 deyydx = grad(1)
00397                 deyydy = grad(2)
00398                 deyydz = grad(3)
00399                 call grgrad1g_midpoint(elpyz_grid,grad,irg,itg,ipg)
00400                 deyzdx = grad(1)
00401                 deyzdy = grad(2)
00402                 deyzdz = grad(3)
00403                 pdivlp = gmxxu*dexydx + gmxyu*dexydy + gmxzu*dexydz &
00404                    &       + gmyxu*deyydx + gmyyu*deyydy + gmyzu*deyydz &
00405                    &       + gmzxu*deyzdx + gmzyu*deyzdy + gmzzu*deyzdz
00406                 gclp = c12*elpxxm + c14*elpxym + c15*elpxzm &
00407                    &     + c22*elpyxm + c24*elpyym + c25*elpyzm &
00408                    &     + c32*elpzxm + c34*elpzym + c35*elpzzm
00409                 divlp = pdivlp - gclp
00410               end if
00411               if (ii == 3) then
00412                 call grgrad1g_midpoint(elpxz_grid,grad,irg,itg,ipg)
00413                 dexzdx = grad(1)
00414                 dexzdy = grad(2)
00415                 dexzdz = grad(3)
00416                 call grgrad1g_midpoint(elpyz_grid,grad,irg,itg,ipg)
00417                 deyzdx = grad(1)
00418                 deyzdy = grad(2)
00419                 deyzdz = grad(3)
00420                 call grgrad1g_midpoint(elpzz_grid,grad,irg,itg,ipg)
00421                 dezzdx = grad(1)
00422                 dezzdy = grad(2)
00423                 dezzdz = grad(3)
00424                 pdivlp = gmxxu*dexzdx + gmxyu*dexzdy + gmxzu*dexzdz &
00425                    &       + gmyxu*deyzdx + gmyyu*deyzdy + gmyzu*deyzdz &
00426                    &       + gmzxu*dezzdx + gmzyu*dezzdy + gmzzu*dezzdz
00427                 gclp = c13*elpxxm + c15*elpxym + c16*elpxzm &
00428                    &     + c23*elpyxm + c25*elpyym + c26*elpyzm &
00429                    &     + c33*elpzxm + c35*elpzym + c36*elpzzm
00430                 divlp = pdivlp - gclp
00431               end if
00432 
00433             end if
00434 
00435           end if
00436 
00437           souvec(irg,itg,ipg,ii) = &
00438           &    - hddb + gdcb + gcrdb1 + gcrdb2 - san*gradfnc4 &
00439           &    -(rax*bvxgc + ray*bvygc + raz*bvzgc) - ome*divlp*cutoff &
00440           &    - 2.0d0*afnc2inv*( &
00441           &    + hhxxu*tfkax*dxafn + hhxyu*tfkax*dyafn + hhxzu*tfkax*dzafn &
00442           &    + hhyxu*tfkay*dxafn + hhyyu*tfkay*dyafn + hhyzu*tfkay*dzafn &
00443           &    + hhzxu*tfkaz*dxafn + hhzyu*tfkaz*dyafn + hhzzu*tfkaz*dzafn)
00444 
00445         end do
00446       end do
00447     end do
00448   end do
00449 
00450   deallocate(fnc4)
00451   deallocate(fnc2)
00452   deallocate(grad2x)
00453   deallocate(grad2y)
00454   deallocate(grad2z)
00455   deallocate(grad4x)
00456   deallocate(grad4y)
00457   deallocate(grad4z)
00458   deallocate(cri1be)
00459   deallocate(cri2be)
00460   deallocate(cri3be)
00461   deallocate(cri4be)
00462   deallocate(cri5be)
00463   deallocate(cri6be)
00464 
00465 end subroutine sourceterm_MoC_WL