00001 subroutine poisson_solver_At(sou,pot,char_sym)
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, npg, ntg, npgxzm, npgxzp, ntgeq
00004 use def_metric, only : alph
00005 use make_array_3d
00006 use make_array_2d
00007 use interface_poisson_solver
00008 use interface_poisson_solver_At_homosol_lesq
00009 use interface_interpo_gr2fl_surface
00010 use interface_calc_integrability_modify_At
00011 use interface_compute_fnc_multiple
00012 implicit none
00013
00014 real(long), pointer :: pot(:,:,:), sou(:,:,:)
00015 real(long), pointer :: pot_vol(:,:,:), pot_surf(:,:,:)
00016 real(long), pointer :: va_tmp(:,:,:), work(:,:,:)
00017 real(long), pointer :: pot_nb(:,:), pot_bc(:,:)
00018 integer :: ipg
00019 character(len=6) :: char_sym
00020
00021 call alloc_array3d(pot_vol,0,nrg,0,ntg,0,npg)
00022 call alloc_array3d(pot_surf,0,nrg,0,ntg,0,npg)
00023 call alloc_array3d(va_tmp,0,nrg,0,ntg,0,npg)
00024 call alloc_array3d(work,0,nrg,0,ntg,0,npg)
00025 call alloc_array2d(pot_nb,0,ntg,0,npg)
00026 call alloc_array2d(pot_bc,0,ntg,0,npg)
00027
00028 call poisson_solver(sou,pot_vol)
00029 call interpo_gr2fl_surface(pot_vol,pot_nb)
00030 call calc_integrability_modify_At(va_tmp,'gr')
00031 call compute_fnc_multiple(va_tmp,alph,work)
00032 call interpo_gr2fl_surface(work,pot_bc)
00033 call poisson_solver_At_homosol_lesq(pot_bc,pot_nb,pot_surf,char_sym)
00034
00035 pot(0:nrg,0:ntg,0:npg) = pot_vol(0:nrg,0:ntg,0:npg) &
00036 & + pot_surf(0:nrg,0:ntg,0:npg)
00037
00038 deallocate(pot_vol)
00039 deallocate(pot_surf)
00040 deallocate(work)
00041 deallocate(va_tmp)
00042 deallocate(pot_nb)
00043 deallocate(pot_bc)
00044
00045 end subroutine poisson_solver_At