00001 subroutine dadbscalar_type3(fnc,d2f,irg,itg,ipg)
00002 use phys_constant, only : long
00003 use interface_grgrad_4th_gridpoint
00004 use interface_grgrad_2nd_gridpoint
00005 implicit none
00006 real(long), pointer :: fnc(:,:,:)
00007 real(long) :: d2f(1:3,1:3)
00008 real(long) :: dfdx, dfdy, dfdz
00009 real(long) :: dfncdx(0:1,0:1,0:1), dfncdy(0:1,0:1,0:1), dfncdz(0:1,0:1,0:1)
00010 real(long) :: d2fdxdx, d2fdxdy, d2fdxdz,
00011 d2fdydx, d2fdydy, d2fdydz, &
00012 d2fdzdx, d2fdzdy, d2fdzdz
00013 integer :: irg, itg, ipg
00014 integer :: ip, ir, it, irg8, itg8, ipg8
00015
00016
00017
00018
00019 do ip = 0, 1
00020 ipg8 = ipg - 1 + ip
00021 do it = 0, 1
00022 itg8 = itg - 1 + it
00023 do ir = 0, 1
00024 irg8 = irg - 1 + ir
00025
00026
00027
00028
00029 call grgrad_4th_gridpoint(fnc,dfdx,dfdy,dfdz,irg8,itg8,ipg8)
00030
00031
00032 dfncdx(ir,it,ip) = dfdx
00033 dfncdy(ir,it,ip) = dfdy
00034 dfncdz(ir,it,ip) = dfdz
00035 end do
00036 end do
00037 end do
00038
00039 call grgrad_type0(dfncdx,d2fdxdx,d2fdxdy,d2fdxdz,irg,itg,ipg)
00040 call grgrad_type0(dfncdy,d2fdydx,d2fdydy,d2fdydz,irg,itg,ipg)
00041 call grgrad_type0(dfncdz,d2fdzdx,d2fdzdy,d2fdzdz,irg,itg,ipg)
00042 d2f(1,1) = d2fdxdx
00043 d2f(1,2) =(d2fdxdy + d2fdydx)*0.5d0
00044 d2f(1,3) =(d2fdxdz + d2fdzdx)*0.5d0
00045 d2f(2,1) =(d2fdxdy + d2fdydx)*0.5d0
00046 d2f(2,2) = d2fdydy
00047 d2f(2,3) =(d2fdydz + d2fdzdy)*0.5d0
00048 d2f(3,1) =(d2fdxdz + d2fdzdx)*0.5d0
00049 d2f(3,2) =(d2fdydz + d2fdzdy)*0.5d0
00050 d2f(3,3) = d2fdzdz
00051
00052 end subroutine dadbscalar_type3