00001 subroutine poisson_solver_binary_bhex(sou,sou_exsurf,dsou_exsurf, &
00002                                     &     sou_insurf,dsou_insurf, &
00003                                     &    sou_outsurf,dsou_outsurf,pot)
00004   use phys_constant,  only : long
00005   use grid_parameter, only : nrg, npg, ntg
00006   use make_array_3d
00007   use interface_poisson_solver_binary_vol_int
00008   use interface_poisson_solver_binary_surf_int
00009   use interface_poisson_solver_bhex_surf_int_all
00010   implicit none
00011   real(long), pointer :: pot(:,:,:), sou(:,:,:)
00012   real(long), pointer :: sou_exsurf(:,:), dsou_exsurf(:,:)
00013   real(long), pointer :: sou_insurf(:,:), dsou_insurf(:,:)
00014   real(long), pointer :: sou_outsurf(:,:), dsou_outsurf(:,:)
00015   real(long), pointer :: sou_iosurf(:,:,:)
00016   real(long), pointer :: pot_vol(:,:,:), pot_exsurf(:,:,:), pot_iosurf(:,:,:)
00017 
00018   call alloc_array3d(pot_vol,0,nrg,0,ntg,0,npg)
00019   call alloc_array3d(pot_exsurf,0,nrg,0,ntg,0,npg)
00020   call alloc_array3d(pot_iosurf,0,nrg,0,ntg,0,npg)
00021   call alloc_array3d(sou_iosurf,0,ntg,0,npg,1,4)
00022 
00023   call poisson_solver_binary_vol_int(sou,pot_vol)
00024   call poisson_solver_binary_surf_int(sou_exsurf,dsou_exsurf,pot_exsurf)
00025   sou_iosurf(1:ntg,1:npg,1) = dsou_insurf(1:ntg,1:npg)
00026   sou_iosurf(1:ntg,1:npg,2) = sou_insurf(1:ntg,1:npg)
00027   sou_iosurf(1:ntg,1:npg,3) = dsou_outsurf(1:ntg,1:npg)
00028   sou_iosurf(1:ntg,1:npg,4) = sou_outsurf(1:ntg,1:npg)
00029   call poisson_solver_bhex_surf_int_all(sou_iosurf,pot_iosurf)
00030   pot(0:nrg,0:ntg,0:npg) = pot_vol(0:nrg,0:ntg,0:npg) &
00031                        & + pot_exsurf(0:nrg,0:ntg,0:npg) &
00032                        & + pot_iosurf(0:nrg,0:ntg,0:npg)
00033 
00034   deallocate(pot_vol)
00035   deallocate(pot_exsurf)
00036   deallocate(pot_iosurf)
00037   deallocate(sou_iosurf)
00038 
00039 end subroutine poisson_solver_binary_bhex