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