00001 subroutine iteration_pBH_CF(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 use def_metric_pBH
00013
00014 use def_metric_excurve_grid, only : tfkij_grid, tfkijkij_grid
00015 use def_matter
00016 use def_bh_parameter, only : bh_bctype
00017 use def_vector_bh
00018 use interface_poisson_solver
00019 use interface_poisson_solver_1bh_homosol
00020 use interface_sourceterm_exsurf_eqm_binary
00021 use interface_sourceterm_surface_int
00022 use interface_compute_shift
00023 use interface_compute_alps2alph
00024 use interface_update_grfield
00025 use interface_update_parameter
00026 use interface_error_metric_type0
00027 use interface_error_metric_type2
00028 use interface_interpolation_fillup_binary
00029
00030 use interface_bh_boundary_d_psi
00031 use interface_bh_boundary_nh_psi_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_HaC_CF_pBH
00051 use interface_sourceterm_trG_CF
00052 use interface_sourceterm_trG_CF_pBH
00053 use interface_sourceterm_MoC_CF
00054 use interface_sourceterm_MoC_CF_type1_bhex
00055 use interface_sourceterm_Bfun
00056 use interface_interpolation_fillup_binary_parity
00057 use interface_sourceterm_exsurf_eqm_binary_parity
00058 use interface_compute_shift_v2
00059 use interface_compute_dBfun
00060 use interface_compute_wme2psi
00061
00062 implicit none
00063 real(long), pointer :: sou(:,:,:), pot(:,:,:)
00064 real(long), pointer :: Bfun(:,:,:), potx(:,:,:), poty(:,:,:), potz(:,:,:)
00065 real(long), pointer :: pot_bak(:,:,:), work(:,:,:)
00066 real(long), pointer :: potx_bak(:,:,:), poty_bak(:,:,:), potz_bak(:,:,:)
00067 real(long), pointer :: dBfundx(:,:,:), dBfundy(:,:,:), dBfundz(:,:,:)
00068 real(long), pointer :: souvec(:,:,:,:)
00069 real(long), pointer :: sou_exsurf(:,:), dsou_exsurf(:,:)
00070 real(long), pointer :: sou_bhsurf(:,:), dsou_bhsurf(:,:)
00071 real(long), pointer :: sou_outsurf(:,:), dsou_outsurf(:,:)
00072 real(long) :: count, error_psi,error_alph, error_bvxd, error_bvyd, error_bvzd
00073 real(long) :: error_potx, error_poty, error_potz, error_Bfun
00074 real(long) :: pari, pot_tmp
00075 integer :: iter_count, flag_psi=0, flag_alph=0,
00076 flag_bvxd=0, flag_bvyd=0, flag_bvzd=0
00077 integer :: flag_potx=0, flag_poty=0, flag_potz=0, flag_Bfun=0
00078 integer :: irg, itg, ipg, ihy, nn, ii
00079 character(2) :: chgreen
00080 character(30) :: char1, char2, char3
00081
00082 call alloc_array4d(souvec,0,nrg,0,ntg,0,npg,1,3)
00083 call alloc_array3d(sou,0,nrg,0,ntg,0,npg)
00084
00085
00086
00087
00088 call alloc_array3d(pot,0,nrg,0,ntg,0,npg)
00089 call alloc_array3d(potx,0,nrg,0,ntg,0,npg)
00090 call alloc_array3d(poty,0,nrg,0,ntg,0,npg)
00091 call alloc_array3d(potz,0,nrg,0,ntg,0,npg)
00092 call alloc_array3d(pot_bak,0,nrg,0,ntg,0,npg)
00093 call alloc_array3d(potx_bak,0,nrg,0,ntg,0,npg)
00094 call alloc_array3d(poty_bak,0,nrg,0,ntg,0,npg)
00095 call alloc_array3d(potz_bak,0,nrg,0,ntg,0,npg)
00096 call alloc_array3d(work,0,nrg,0,ntg,0,npg)
00097 call alloc_array2d(sou_exsurf,0,ntg,0,npg)
00098 call alloc_array2d(dsou_exsurf,0,ntg,0,npg)
00099 call alloc_array2d(sou_bhsurf,0,ntg,0,npg)
00100 call alloc_array2d(dsou_bhsurf,0,ntg,0,npg)
00101 call alloc_array2d(sou_outsurf,0,ntg,0,npg)
00102 call alloc_array2d(dsou_outsurf,0,ntg,0,npg)
00103
00104 iter_count = 0
00105
00106 do
00107 iter_count = iter_count + 1
00108 count = dble(iter_count)
00109 conv_gra = dmin1(conv0_gra,conv_ini*count)
00110 conv_den = dmin1(conv0_den,conv_ini*count)
00111
00112 call calc_vector_x_grav(1)
00113 call calc_vector_phi_grav(1)
00114
00115 call excurve_TrpBH
00116 call calc_TrpBH
00117
00118
00119
00120 call compute_psi2wme
00121 sou(0:nrg,0:ntg,0:npg) = 0.0d0
00122 call sourceterm_HaC_CF_pBH(sou)
00123
00124 call poisson_solver(sou,pot)
00125 pot(0,0:ntg,0:npg) = -30.0d0
00126 pot = dexp(pot)
00127 call compute_wme2psi(pot)
00128
00129 pot_bak = psi
00130 call update_grfield(pot,psi,conv_gra)
00131 call error_metric_type0(psi,pot_bak,error_psi,flag_psi,'bh')
00132
00133
00134 call compute_psi2wme
00135 sou(0:nrg,0:ntg,0:npg) = 0.0d0
00136 call sourceterm_trG_CF_pBH(sou)
00137
00138 call poisson_solver(sou,pot)
00139 pot(0,0:ntg,0:npg) = -30.0d0
00140 pot = dexp(pot)**dsqrt(2.0d0)
00141
00142 pot_bak = alph
00143 call update_grfield(pot,alph,conv_gra)
00144 call error_metric_type0(alph,pot_bak,error_alph,flag_alph,'bh')
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157 call printout_error_metric_combined(iter_count,error_psi,error_alph,&
00158 & error_bvxd,error_bvyd,error_bvzd)
00159
00160 if ((flag_psi==0).and.(flag_alph==0).and. &
00161 & (flag_bvxd==0).and.(flag_bvyd==0).and.(flag_bvzd==0)) exit
00162 if (iter_count >= iter_max) exit
00163
00164
00165
00166
00167
00168
00169
00170 flag_psi = 0
00171 flag_alph = 0
00172 flag_bvxd = 0
00173 flag_bvyd = 0
00174 flag_bvzd = 0
00175 flag_Bfun = 0
00176 end do
00177
00178 deallocate(souvec)
00179 deallocate(sou)
00180
00181
00182
00183
00184
00185
00186
00187 deallocate(pot)
00188 deallocate(potx)
00189 deallocate(poty)
00190 deallocate(potz)
00191 deallocate(pot_bak)
00192 deallocate(potx_bak)
00193 deallocate(poty_bak)
00194 deallocate(potz_bak)
00195 deallocate(work)
00196 deallocate(sou_exsurf)
00197 deallocate(dsou_exsurf)
00198 deallocate(sou_bhsurf)
00199 deallocate(dsou_bhsurf)
00200 deallocate(sou_outsurf)
00201 deallocate(dsou_outsurf)
00202
00203 end subroutine iteration_pBH_CF