00001 subroutine grgrad_type0(fnc,dfdx,dfdy,dfdz,irg,itg,ipg)
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg
00004 use coordinate_grav_r, only : hrginv, drginv
00005 use coordinate_grav_theta, only : dthginv
00006 use coordinate_grav_phi, only : dphiginv
00007 use trigonometry_grav_theta, only : hsinthg, hcosthg, hcosecthg
00008 use trigonometry_grav_phi, only : hsinphig, hcosphig
00009 implicit none
00010 real(long) :: fnc(0:1,0:1,0:1)
00011 real(long) :: dfdx
00012 real(long) :: dfdy
00013 real(long) :: dfdz
00014 real(long) :: gr1, gr2, gr3, dfncdr, dfncdth, dfncdphi
00015 integer, intent(in) :: irg, itg, ipg
00016
00017
00018
00019
00020
00021
00022 dfncdr = 0.25d0 &
00023 & *(fnc(1,1,1) - fnc(0,1,1) &
00024 & + fnc(1,0,1) - fnc(0,0,1) &
00025 & + fnc(1,1,0) - fnc(0,1,0) &
00026 & + fnc(1,0,0) - fnc(0,0,0))*drginv(irg)
00027 dfncdth = 0.25d0 &
00028 & *(fnc(1,1,1) - fnc(1,0,1) &
00029 & + fnc(0,1,1) - fnc(0,0,1) &
00030 & + fnc(1,1,0) - fnc(1,0,0) &
00031 & + fnc(0,1,0) - fnc(0,0,0))*dthginv
00032 dfncdphi = 0.25d0 &
00033 & *(fnc(1,1,1) - fnc(1,1,0) &
00034 & + fnc(0,1,1) - fnc(0,1,0) &
00035 & + fnc(1,0,1) - fnc(1,0,0) &
00036 & + fnc(0,0,1) - fnc(0,0,0))*dphiginv
00037
00038
00039
00040 gr1 = dfncdr
00041 gr2 = dfncdth*hrginv(irg)
00042 gr3 = dfncdphi*hrginv(irg)*hcosecthg(itg)
00043 dfdx = gr1 * hsinthg(itg) * hcosphig(ipg) &
00044 & + gr2 * hcosthg(itg) * hcosphig(ipg) &
00045 & - gr3 * hsinphig(ipg)
00046 dfdy = gr1 * hsinthg(itg) * hsinphig(ipg) &
00047 & + gr2 * hcosthg(itg) * hsinphig(ipg) &
00048 & + gr3 * hcosphig(ipg)
00049 dfdz = gr1 * hcosthg(itg) &
00050 & - gr2 * hsinthg(itg)
00051
00052 end subroutine grgrad_type0