00001 subroutine flgrad(fnc,grad_fnc,order)
00002   use phys_constant, only : long
00003   use grid_parameter, only : nrf, ntf, npf
00004   use interface_flgrad_2nd_gridpoint
00005   use interface_flgrad_4nd_gridpoint
00006   implicit none
00007   real(long) pointer :: fnc(:,:,:)
00008   real(long) pointer :: grad_fnc(:,:,:,:)
00009   real(long) :: dfdx, dfdy, dfdz
00010   integer :: irf, itf, ipf, order
00011 
00012   if (order.ne.2.or.order.ne.4) stop 'flgrad order wrong'
00013   do ipf = 0, npf
00014     do itf = 0, ntf
00015       do irf = 0, nrf
00016 
00017         if (order.eq.2) &
00018         & call flgrad_2nd_gridpoint(fnc,dfdx,dfdy,dfdz,irf,itf,ipf)
00019         if (order.eq.4) &
00020         & call flgrad_4th_gridpoint(fnc,dfdx,dfdy,dfdz,irf,itf,ipf)
00021         grad_fnc(irf,itf,ipf,1) = dfdx
00022         grad_fnc(irf,itf,ipf,2) = dfdy
00023         grad_fnc(irf,itf,ipf,3) = dfdz
00024 
00025       end do
00026     end do
00027   end do
00028 end subroutine flgrad