00001 subroutine sourceterm_exsurf_binary_parity(fnc,sou_ex,dsou_ex,parchar)
00002   use phys_constant, only : long
00003   use grid_parameter, only : ntg, npg, npgxzm
00004   use grid_parameter_binary_excision, only : ex_nrg
00005   use make_array_2d
00006   use interface_interpo_linear_type0_2Dsurf
00007   use interface_grdr_gridpoint_type0
00008 
00009   implicit none
00010   real(long), pointer :: fnc(:,:,:), sou_ex(:,:), dsou_ex(:,:)
00011   real(long), pointer :: fnc_exsurf(:,:), dfnc_exsurf(:,:)
00012   real(long) :: deriv, val, pari
00013   character(len=2) :: parchar
00014   integer :: itg, ipg, itgex, ipgex
00015 
00016   if (parchar.eq.'ev') pari = + 1.0d0
00017   if (parchar.eq.'od') pari = - 1.0d0
00018   call alloc_array2d(fnc_exsurf, 0, ntg, 0, npg)
00019   call alloc_array2d(dfnc_exsurf, 0, ntg, 0, npg)
00020 
00021   do ipg = 0, npg
00022     do itg = 0, ntg
00023       fnc_exsurf(itg,ipg) = fnc(ex_nrg,itg,ipg)
00024       call grdr_gridpoint_type0(fnc,deriv,ex_nrg,itg,ipg)
00025       dfnc_exsurf(itg,ipg) = deriv
00026     end do
00027   end do
00028 
00029   do ipg = 1, npg
00030     do itg = 1, ntg
00031 
00032       itgex = itg
00033       ipgex = ipg + npgxzm  - ((ipg+npgxzm)/(npg+1))*npg
00034 
00035 
00036 
00037 
00038 
00039 
00040       call interpo_linear_type0_2Dsurf(val,fnc_exsurf,itg,ipg)
00041       sou_ex(itgex,ipgex) = pari*val
00042       call interpo_linear_type0_2Dsurf(val,dfnc_exsurf,itg,ipg)
00043       dsou_ex(itgex,ipgex) = pari*val
00044     end do
00045   end do
00046   deallocate(fnc_exsurf)
00047   deallocate(dfnc_exsurf)
00048 
00049 end subroutine sourceterm_exsurf_binary_parity