00001 subroutine iteration_poisson_bbh_2pot_test1(iter_count)
00002   use phys_constant, only :  long
00003   use grid_parameter
00004   use coordinate_grav_r
00005   use coordinate_grav_phi
00006   use coordinate_grav_theta
00007   use weight_midpoint_grav
00008   use make_array_2d
00009   use make_array_3d
00010   use make_array_4d
00011   use def_metric
00012 
00013   use def_metric_excurve_grid, only : tfkij_grid, tfkijkij_grid
00014   use def_matter
00015   use def_bh_parameter, only : bh_bctype
00016   use def_vector_bh
00017   use interface_poisson_solver_binary_bhex_homosol
00018   use interface_sourceterm_exsurf_eqm_binary
00019   use interface_sourceterm_surface_int
00020   use interface_compute_shift
00021   use interface_compute_alps2alph
00022   use interface_update_grfield
00023   use interface_update_parameter
00024   use interface_error_metric_type0
00025   use interface_error_metric_type1
00026   use interface_error_metric_type2
00027   use interface_interpolation_fillup_binary
00028 
00029   use interface_bh_boundary_d_psi
00030   use interface_bh_boundary_dh_psi_test
00031   use interface_bh_boundary_dh_alph_test
00032   use interface_bh_boundary_d_alps
00033   use interface_bh_boundary_CF
00034   use interface_bh_boundary_AH_d_psi
00035   use interface_bh_boundary_AH_n_psi
00036   use interface_bh_boundary_AH_r_psi
00037   use interface_bh_boundary_AH_d_alps
00038   use interface_bh_boundary_AH_n_alps
00039   use interface_outer_boundary_d_psi
00040   use interface_outer_boundary_d_alps
00041   use interface_outer_boundary_d_bvxd
00042   use interface_outer_boundary_d_bvyd
00043   use interface_outer_boundary_d_bvzd
00044   use interface_outer_boundary_d_Bfun
00045   use interface_outer_boundary_n_Bfun
00046   use interface_outer_boundary_d_potx
00047   use interface_outer_boundary_d_poty
00048   use interface_outer_boundary_d_potz
00049   use interface_sourceterm_HaC_CF
00050   use interface_sourceterm_trG_CF
00051   use interface_sourceterm_MoC_CF
00052   use interface_sourceterm_MoC_CF_type1_bhex
00053   use interface_sourceterm_Bfun
00054   use interface_interpolation_fillup_binary_parity
00055   use interface_sourceterm_exsurf_eqm_binary_parity
00056   use interface_compute_shift_v2
00057   use interface_compute_dBfun
00058   use gnufor2
00059   use interface_sourceterm_volume_int_bbh_2pot_test
00060 
00061   implicit none
00062   real(long), pointer :: sou(:,:,:), pot(:,:,:)
00063   real(long), pointer :: pot_bak(:,:,:), work(:,:,:)
00064   real(long), pointer :: sou_exsurf(:,:), dsou_exsurf(:,:)
00065   real(long), pointer :: sou_bhsurf(:,:), dsou_bhsurf(:,:)
00066   real(long), pointer :: sou_outsurf(:,:), dsou_outsurf(:,:)
00067   real(long) :: count, error_psi,error_alph
00068   real(long) :: pari
00069   integer    :: iter_count, flag_psi=0, flag_alph=0
00070   integer    :: irg, itg, ipg, ihy, nn, ii
00071   character(2) :: chgreen
00072   character(30) :: char1, char2, char3
00073   integer    :: ire_psi=0, ite_psi=0, ipe_psi=0, ire_alph=0, ite_alph=0, ipe_alph=0
00074 
00075 
00076   call alloc_array3d(sou,0,nrg,0,ntg,0,npg)
00077   call alloc_array3d(pot,0,nrg,0,ntg,0,npg)
00078   call alloc_array3d(pot_bak,0,nrg,0,ntg,0,npg)
00079   call alloc_array3d(work,0,nrg,0,ntg,0,npg)
00080   call alloc_array2d(sou_exsurf,0,ntg,0,npg)
00081   call alloc_array2d(dsou_exsurf,0,ntg,0,npg)
00082   call alloc_array2d(sou_bhsurf,0,ntg,0,npg)
00083   call alloc_array2d(dsou_bhsurf,0,ntg,0,npg)
00084   call alloc_array2d(sou_outsurf,0,ntg,0,npg)
00085   call alloc_array2d(dsou_outsurf,0,ntg,0,npg)
00086 
00087   iter_count = 0
00088 
00089   do
00090     iter_count = iter_count + 1      
00091     count = dble(iter_count) 
00092     conv_gra = dmin1(conv0_gra,conv_ini*count)
00093     conv_den = dmin1(conv0_den,conv_ini*count)
00094 
00095     call calc_vector_bh(2)
00096 
00097     sou(0:nrg,0:ntg,0:npg) = 0.0d0
00098     call sourceterm_exsurf_eqm_binary(psi,sou_exsurf,dsou_exsurf)
00099     call sourceterm_surface_int(psi,0,sou_bhsurf,dsou_bhsurf)
00100     call sourceterm_surface_int(psi,nrg,sou_outsurf,dsou_outsurf)
00101     call bh_boundary_dh_psi_test(sou_bhsurf)
00102     call outer_boundary_d_psi(sou_outsurf)
00103     call poisson_solver_binary_bhex_homosol('dd',sou, &
00104     &                                       sou_exsurf,dsou_exsurf, &
00105     &                                       sou_bhsurf,dsou_bhsurf, & 
00106     &                                       sou_outsurf,dsou_outsurf,pot)
00107     pot_bak = psi
00108     call update_grfield(pot,psi,conv_gra)
00109     call interpolation_fillup_binary(psi)
00110 
00111     call error_metric_type1(psi,pot_bak,error_psi,ire_psi,ite_psi,ipe_psi,flag_psi,'bh')
00112 
00113     sou(0:nrg,0:ntg,0:npg) = 0.0d0
00114     call sourceterm_volume_int_bbh_2pot_test(sou)
00115     call sourceterm_exsurf_eqm_binary(alph,sou_exsurf,dsou_exsurf)
00116     call sourceterm_surface_int(alph,0,sou_bhsurf,dsou_bhsurf)
00117     call sourceterm_surface_int(alph,nrg,sou_outsurf,dsou_outsurf)
00118     call bh_boundary_dh_alph_test(sou_bhsurf)
00119     call outer_boundary_d_alps(sou_outsurf)
00120     call poisson_solver_binary_bhex_homosol('dd',sou, &
00121     &                                       sou_exsurf,dsou_exsurf, &
00122     &                                       sou_bhsurf,dsou_bhsurf, & 
00123     &                                       sou_outsurf,dsou_outsurf,pot)
00124     pot_bak = alph
00125     call update_grfield(pot,alph,conv_gra)
00126     call interpolation_fillup_binary(alph)
00127 
00128     call error_metric_type1(alph,pot_bak,error_alph,ire_alph,ite_alph,ipe_alph,flag_alph,'bh')
00129 
00130     call printout_error_all_metric(iter_count,error_psi,ire_psi,ite_psi,ipe_psi,&
00131            &                        error_alph,ire_alph,ite_alph,ipe_alph )
00132 
00133     if ((flag_psi==0).and.(flag_alph==0)) exit
00134     if (iter_count >= iter_max) exit
00135 
00136 
00137 
00138 
00139     flag_psi = 0
00140     flag_alph = 0
00141   end do
00142 
00143   deallocate(sou)
00144   deallocate(pot)
00145   deallocate(pot_bak)
00146   deallocate(work)
00147   deallocate(sou_exsurf)
00148   deallocate(dsou_exsurf)
00149   deallocate(sou_bhsurf)
00150   deallocate(dsou_bhsurf)
00151   deallocate(sou_outsurf)
00152   deallocate(dsou_outsurf)
00153 
00154 end subroutine iteration_poisson_bbh_2pot_test1