00001 subroutine index_vec_up2down_midpoint(vecxd,vecyd,veczd,vecxu,vecyu,veczu)
00002 use grid_parameter, only : nrg, ntg, npg
00003 use def_metric_hij, only : hxxd, hxyd, hxzd, hyyd, hyzd, hzzd
00004 use interface_interpo_linear_type0
00005 implicit none
00006 real(8), pointer :: vecxu(:,:,:), vecyu(:,:,:), veczu(:,:,:),
00007 vecxd(:,:,:), vecyd(:,:,:), veczd(:,:,:)
00008 real(8) :: hhxxd, hhxyd, hhxzd, hhyyd, hhyzd, hhzzd
00009 real(8) :: gmxxd, gmxyd, gmxzd, gmyxd, gmyyd, gmyzd,
00010 gmzxd, gmzyd, gmzzd
00011 integer :: ipg, itg, irg
00012
00013
00014
00015 do ipg = 1, npg
00016 do itg = 1, ntg
00017 do irg = 1, nrg
00018 call interpo_linear_type0(hhxxd,hxxd,irg,itg,ipg)
00019 call interpo_linear_type0(hhxyd,hxyd,irg,itg,ipg)
00020 call interpo_linear_type0(hhxzd,hxzd,irg,itg,ipg)
00021 call interpo_linear_type0(hhyyd,hyyd,irg,itg,ipg)
00022 call interpo_linear_type0(hhyzd,hyzd,irg,itg,ipg)
00023 call interpo_linear_type0(hhzzd,hzzd,irg,itg,ipg)
00024 gmxxd = 1.0d0 + hhxxd
00025 gmxyd = hhxyd
00026 gmxzd = hhxzd
00027 gmyxd = hhxyd
00028 gmyyd = 1.0d0 + hhyyd
00029 gmyzd = hhyzd
00030 gmzxd = hhxzd
00031 gmzyd = hhyzd
00032 gmzzd = 1.0d0 + hhzzd
00033 vecxd(irg,itg,ipg) = gmxxd*vecxu(irg,itg,ipg) &
00034 & + gmxyd*vecyu(irg,itg,ipg) &
00035 & + gmxzd*veczu(irg,itg,ipg)
00036 vecyd(irg,itg,ipg) = gmyxd*vecxu(irg,itg,ipg) &
00037 & + gmyyd*vecyu(irg,itg,ipg) &
00038 & + gmyzd*veczu(irg,itg,ipg)
00039 veczd(irg,itg,ipg) = gmzxd*vecxu(irg,itg,ipg) &
00040 & + gmzyd*vecyu(irg,itg,ipg) &
00041 & + gmzzd*veczu(irg,itg,ipg)
00042 end do
00043 end do
00044 end do
00045
00046 end subroutine index_vec_up2down_midpoint