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