00001 subroutine dadbscalar_type2(fnc,dadbfnc,cobj)
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg
00004 use interface_grgrad_4th_gridpoint
00005 use interface_grgrad_4th_gridpoint_bhex
00006 use interface_grgrad_midpoint_r2nd
00007 use interface_grgrad_midpoint_r3rd
00008 use make_array_3d
00009 implicit none
00010 real(long), pointer :: fnc(:,:,:)
00011 real(long), pointer :: dadbfnc(:,:,:,:,:)
00012 real(long), pointer :: dfdx(:,:,:), dfdy(:,:,:), dfdz(:,:,:)
00013 real(long), pointer :: d2fdxdx(:,:,:), d2fdxdy(:,:,:), d2fdxdz(:,:,:),
00014 d2fdydx(:,:,:), d2fdydy(:,:,:), d2fdydz(:,:,:), &
00015 d2fdzdx(:,:,:), d2fdzdy(:,:,:), d2fdzdz(:,:,:)
00016 real(long) :: dfncdx, dfncdy, dfncdz
00017 integer :: irg, itg, ipg
00018 character(len=2), intent(in) :: cobj
00019
00020 call alloc_array3d(dfdx,0,nrg,0,ntg,0,npg)
00021 call alloc_array3d(dfdy,0,nrg,0,ntg,0,npg)
00022 call alloc_array3d(dfdz,0,nrg,0,ntg,0,npg)
00023 call alloc_array3d(d2fdxdx,1,nrg,1,ntg,1,npg)
00024 call alloc_array3d(d2fdydx,1,nrg,1,ntg,1,npg)
00025 call alloc_array3d(d2fdzdx,1,nrg,1,ntg,1,npg)
00026 call alloc_array3d(d2fdxdy,1,nrg,1,ntg,1,npg)
00027 call alloc_array3d(d2fdydy,1,nrg,1,ntg,1,npg)
00028 call alloc_array3d(d2fdzdy,1,nrg,1,ntg,1,npg)
00029 call alloc_array3d(d2fdxdz,1,nrg,1,ntg,1,npg)
00030 call alloc_array3d(d2fdydz,1,nrg,1,ntg,1,npg)
00031 call alloc_array3d(d2fdzdz,1,nrg,1,ntg,1,npg)
00032
00033
00034
00035
00036 do ipg = 0, npg
00037 do itg = 0, ntg
00038 do irg = 0, nrg
00039 if (cobj.eq.'bh') &
00040 & call grgrad_4th_gridpoint_bhex(fnc,dfncdx,dfncdy,dfncdz,irg,itg,ipg)
00041 if (cobj.eq.'ns') &
00042 & call grgrad_4th_gridpoint(fnc,dfncdx,dfncdy,dfncdz,irg,itg,ipg)
00043 dfdx(irg,itg,ipg) = dfncdx
00044 dfdy(irg,itg,ipg) = dfncdy
00045 dfdz(irg,itg,ipg) = dfncdz
00046 end do
00047 end do
00048 end do
00049
00050 call grgrad_midpoint_r2nd(dfdx,d2fdxdx,d2fdxdy,d2fdxdz)
00051 call grgrad_midpoint_r2nd(dfdy,d2fdydx,d2fdydy,d2fdydz)
00052 call grgrad_midpoint_r2nd(dfdz,d2fdzdx,d2fdzdy,d2fdzdz)
00053
00054
00055
00056
00057 dadbfnc(1:nrg,1:ntg,1:npg,1,1) = d2fdxdx(1:nrg,1:ntg,1:npg)
00058 dadbfnc(1:nrg,1:ntg,1:npg,1,2) =(d2fdxdy(1:nrg,1:ntg,1:npg) &
00059 & + d2fdydx(1:nrg,1:ntg,1:npg))*0.5d0
00060 dadbfnc(1:nrg,1:ntg,1:npg,1,3) =(d2fdxdz(1:nrg,1:ntg,1:npg) &
00061 & + d2fdzdx(1:nrg,1:ntg,1:npg))*0.5d0
00062 dadbfnc(1:nrg,1:ntg,1:npg,2,1) =(d2fdxdy(1:nrg,1:ntg,1:npg) &
00063 & + d2fdydx(1:nrg,1:ntg,1:npg))*0.5d0
00064 dadbfnc(1:nrg,1:ntg,1:npg,2,2) = d2fdydy(1:nrg,1:ntg,1:npg)
00065 dadbfnc(1:nrg,1:ntg,1:npg,2,3) =(d2fdydz(1:nrg,1:ntg,1:npg) &
00066 & + d2fdzdy(1:nrg,1:ntg,1:npg))*0.5d0
00067 dadbfnc(1:nrg,1:ntg,1:npg,3,1) =(d2fdxdz(1:nrg,1:ntg,1:npg) &
00068 & + d2fdzdx(1:nrg,1:ntg,1:npg))*0.5d0
00069 dadbfnc(1:nrg,1:ntg,1:npg,3,2) =(d2fdydz(1:nrg,1:ntg,1:npg) &
00070 & + d2fdzdy(1:nrg,1:ntg,1:npg))*0.5d0
00071 dadbfnc(1:nrg,1:ntg,1:npg,3,3) = d2fdzdz(1:nrg,1:ntg,1:npg)
00072
00073 deallocate(dfdx,dfdy,dfdz)
00074 deallocate(d2fdxdx,d2fdxdy,d2fdxdz)
00075 deallocate(d2fdydx,d2fdydy,d2fdydz)
00076 deallocate(d2fdzdx,d2fdzdy,d2fdzdz)
00077
00078 end subroutine dadbscalar_type2