00001 subroutine index_vec_down2up(vecxu,vecyu,veczu,vecxd,vecyd,veczd)
00002   use grid_parameter, only : nrg, ntg, npg
00003   use def_metric_hij, only : hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00004   implicit none
00005   real(8), pointer :: vecxu(:,:,:), vecyu(:,:,:), veczu(:,:,:), 
00006                      vecxd(:,:,:), vecyd(:,:,:), veczd(:,:,:)
00007   real(8) :: gmxxu, gmxyu, gmxzu, gmyxu, gmyyu, gmyzu, 
00008             gmzxu, gmzyu, gmzzu
00009   integer :: ipg, itg, irg
00010 
00011 
00012 
00013   do ipg = 0, npg
00014     do itg = 0, ntg
00015       do irg = 0, nrg
00016         gmxxu = 1.0d0 + hxxu(irg,itg,ipg)
00017         gmxyu =         hxyu(irg,itg,ipg)
00018         gmxzu =         hxzu(irg,itg,ipg)
00019         vecxu(irg,itg,ipg) = gmxxu*vecxd(irg,itg,ipg) &
00020         &                  + gmxyu*vecyd(irg,itg,ipg) &
00021         &                  + gmxzu*veczd(irg,itg,ipg)
00022       end do
00023     end do
00024   end do
00025 
00026   do ipg = 0, npg
00027     do itg = 0, ntg
00028       do irg = 0, nrg
00029         gmyxu =         hxyu(irg,itg,ipg)
00030         gmyyu = 1.0d0 + hyyu(irg,itg,ipg)
00031         gmyzu =         hyzu(irg,itg,ipg)
00032         vecyu(irg,itg,ipg) = gmyxu*vecxd(irg,itg,ipg) &
00033         &                  + gmyyu*vecyd(irg,itg,ipg) &
00034         &                  + gmyzu*veczd(irg,itg,ipg)
00035       end do
00036     end do
00037   end do
00038 
00039   do ipg = 0, npg
00040     do itg = 0, ntg
00041       do irg = 0, nrg
00042         gmzxu =         hxzu(irg,itg,ipg)
00043         gmzyu =         hyzu(irg,itg,ipg)
00044         gmzzu = 1.0d0 + hzzu(irg,itg,ipg)
00045         veczu(irg,itg,ipg) = gmzxu*vecxd(irg,itg,ipg) &
00046         &                  + gmzyu*vecyd(irg,itg,ipg) &
00047         &                  + gmzzu*veczd(irg,itg,ipg)
00048       end do
00049     end do
00050   end do
00051 
00052 end subroutine index_vec_down2up
00053