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