00001 subroutine gauge_Coulomb
00002 use grid_parameter, only : nrg, ntg, npg
00003 use coordinate_grav_r, only : rg
00004 use def_matter, only : rs
00005 use def_emfield, only : vaxd, vayd, vazd
00006 use interface_poisson_solver
00007 use make_array_3d
00008 use interface_grgrad_4th_gridpoint
00009 use interface_grgrad_midpoint_type0
00010 implicit none
00011
00012 real(8), pointer :: sou(:,:,:), gauge(:,:,:)
00013 real(8) :: dvaxdx, dvaxdy, dvaxdz, dvaydx, dvaydy, dvaydz,
00014 dvazdx, dvazdy, dvazdz
00015 real(8) :: dgadx, dgady, dgadz
00016 integer :: irg, itg, ipg
00017
00018 call alloc_array3d(sou,0,nrg,0,ntg,0,npg)
00019 call alloc_array3d(gauge,0,nrg,0,ntg,0,npg)
00020
00021
00022
00023 do ipg = 1, npg
00024 do itg = 1, ntg
00025 do irg = 1, nrg
00026
00027 call grgrad_midpoint_type0(vaxd,dvaxdx,dvaxdy,dvaxdz,irg,itg,ipg)
00028 call grgrad_midpoint_type0(vayd,dvaydx,dvaydy,dvaydz,irg,itg,ipg)
00029 call grgrad_midpoint_type0(vazd,dvazdx,dvazdy,dvazdz,irg,itg,ipg)
00030 sou(irg,itg,ipg) = -(dvaxdx + dvaydy + dvazdz)
00031
00032 end do
00033 end do
00034 end do
00035
00036 call poisson_solver(sou,gauge)
00037
00038 do ipg = 0, npg
00039 do itg = 0, ntg
00040 do irg = 0, nrg
00041
00042 call grgrad_4th_gridpoint(gauge,dgadx,dgady,dgadz,irg,itg,ipg)
00043
00044
00045
00046
00047 vaxd(irg,itg,ipg) = vaxd(irg,itg,ipg) + dgadx
00048 vayd(irg,itg,ipg) = vayd(irg,itg,ipg) + dgady
00049 vazd(irg,itg,ipg) = vazd(irg,itg,ipg) + dgadz
00050
00051
00052
00053
00054 end do
00055 end do
00056 end do
00057
00058 deallocate(sou)
00059 deallocate(gauge)
00060 end subroutine gauge_Coulomb