00001 subroutine iteration_AHfinder(iter_count)
00002   use phys_constant, only :  long
00003   use grid_parameter
00004   use def_horizon, only : ahz
00005   use make_array_2d
00006   use make_array_3d
00007   use interface_sourceterm_AHfinder
00008   use interface_poisson_solver_AHfinder
00009   use interface_update_surface
00010   use interface_error_surface
00011   implicit none
00012   real(long), pointer :: sou(:,:), pot(:,:), pot_bak(:,:)
00013   real(long) :: count, error_ahz
00014   real(long) :: conv_ahz, conv0_ahz = 0.5d0, conv0_ini = 0.2d0
00015   integer    :: iter_count, flag=0
00016 
00017   call alloc_array2d(sou,0,ntg,0,npg)
00018   call alloc_array2d(pot,0,ntg,0,npg)
00019   call alloc_array2d(pot_bak,0,ntg,0,npg)
00020 
00021   iter_count = 0
00022 
00023   do
00024     iter_count = iter_count + 1
00025     count = dble(iter_count)
00026 
00027     conv_ahz = dmin1(conv0_ahz,conv0_ini*count)
00028 
00029 
00030     sou = 0.0d0 ; pot = 0.0d0
00031     call sourceterm_AHfinder(sou)
00032     call poisson_solver_AHfinder(sou,pot)
00033     pot_bak(0:ntg,0:npg) = ahz(0:ntg,0:npg)
00034 
00035     call update_surface(pot,ahz,conv_ahz)
00036     call error_surface(pot_bak,ahz,error_ahz,flag)
00037 
00038     call printout_error(iter_count,error_ahz)
00039     if (flag==0) exit
00040     if (iter_count >= iter_max) exit
00041     flag = 0
00042   end do
00043 
00044   deallocate(sou)
00045   deallocate(pot)
00046   deallocate(pot_bak)
00047 end subroutine iteration_AHfinder