00001 subroutine grgrad_vec_covariant(index,fnx,fny,fnz,pdfnx,pdfny,pdfnz, &
00002            &                                      cdfnx,cdfny,cdfnz)
00003   use phys_constant, only : long
00004   use grid_parameter, only : nrg, ntg, npg
00005   use def_cristoffel, only : cri
00006   use make_array_3d
00007   implicit none
00008   real(long), pointer :: fnx(:,:,:), fny(:,:,:), fnz(:,:,:)
00009   real(long), pointer :: pdfnx(:,:,:,:), pdfny(:,:,:,:), pdfnz(:,:,:,:)
00010   real(long), pointer :: cdfnx(:,:,:,:), cdfny(:,:,:,:), cdfnz(:,:,:,:)
00011   real(long) :: pdfn(3,3), cdfn(3,3), c(3,3,3)
00012   real(long) :: vecx, vecy, vecz
00013   integer :: irg, itg, ipg, ia, ib
00014   character(len=1) :: index
00015 
00016   do ipg = 1, npg
00017     do itg = 1, ntg
00018       do irg = 1, nrg
00019 
00020         vecx = fnx(irg,itg,ipg)
00021         vecy = fny(irg,itg,ipg)
00022         vecz = fnz(irg,itg,ipg)
00023         do ia = 1, 3
00024           pdfn(1,ia) = pdfnx(irg,itg,ipg,ia)
00025           pdfn(2,ia) = pdfny(irg,itg,ipg,ia)
00026           pdfn(3,ia) = pdfnz(irg,itg,ipg,ia)
00027           c(ia,1,1) = cri(irg,itg,ipg,ia,1)
00028           c(ia,1,2) = cri(irg,itg,ipg,ia,2)
00029           c(ia,1,3) = cri(irg,itg,ipg,ia,3)
00030           c(ia,2,1) = c(ia,1,2)
00031           c(ia,2,2) = cri(irg,itg,ipg,ia,4)
00032           c(ia,2,3) = cri(irg,itg,ipg,ia,5)
00033           c(ia,3,1) = c(ia,1,3)
00034           c(ia,3,2) = c(ia,2,3)
00035           c(ia,3,3) = cri(irg,itg,ipg,ia,6)
00036         end do
00037 
00038         if (index.eq.'d') then 
00039           do ia = 1, 3
00040             do ib = 1, 3
00041               cdfn(ia,ib) = pdfn(ia,ib) - c(1,ib,ia)*vecx &
00042               &                         - c(2,ib,ia)*vecy &
00043               &                         - c(3,ib,ia)*vecz
00044             end do
00045           end do
00046         end if
00047         if (index.eq.'u') then 
00048           do ia = 1, 3
00049             do ib = 1, 3
00050               cdfn(ia,ib) = pdfn(ia,ib) + c(ia,ib,1)*vecx &
00051               &                         + c(ia,ib,2)*vecy &
00052               &                         + c(ia,ib,3)*vecz
00053             end do
00054           end do
00055         end if
00056 
00057         do ia = 1, 3
00058           cdfnx(irg,itg,ipg,ia) = cdfn(1,ia)
00059           cdfny(irg,itg,ipg,ia) = cdfn(2,ia)
00060           cdfnz(irg,itg,ipg,ia) = cdfn(3,ia)
00061         end do
00062 
00063       end do
00064     end do
00065   end do
00066 
00067 end subroutine grgrad_vec_covariant