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