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