00001 subroutine gauge_hiju(conv_gra)
00002 use grid_parameter, only : nrg, ntg, npg
00003 use def_metric_hij, only : hxxd, hxyd, hxzd, hyyd, hyzd, hzzd, &
00004 & hxxu, hxyu, hxzu, hyyu, hyzu, hzzu, &
00005 & gaugex, gaugey, gaugez
00006 use interface_poisson_solver
00007 use interface_grgrad_gridpoint_type0
00008 use interface_grgrad_midpoint_type0
00009 use interface_update_grfield
00010 use make_array_3d
00011 implicit none
00012
00013 real(8), pointer :: gx(:,:,:), gy(:,:,:), gz(:,:,:)
00014 real(8), pointer :: divg(:,:,:),
00015 sougx(:,:,:), sougy(:,:,:), sougz(:,:,:)
00016 real(8) :: dgxdx, dgxdy, dgxdz, dgydx, dgydy, dgydz,
00017 dgzdx, dgzdy, dgzdz, &
00018 dhxxux, dhxxuy, dhxxuz, dhxyux, dhxyuy, dhxyuz, &
00019 dhxzux, dhxzuy, dhxzuz, &
00020 dhyxux, dhyxuy, dhyxuz, dhyyux, dhyyuy, dhyyuz, &
00021 dhyzux, dhyzuy, dhyzuz, &
00022 dhzxux, dhzxuy, dhzxuz, dhzyux, dhzyuy, dhzyuz, &
00023 dhzzux, dhzzuy, dhzzuz, &
00024 divgg, dlgxdx, dlgxdy, dlgxdz, dlgydy, dlgydz, dlgzdz, &
00025 hxidiv, hxxuc, hxyuc, hxzuc, &
00026 hyidiv, hyxuc, hyyuc, hyzuc, hzidiv, hzxuc, hzyuc, hzzuc
00027 real(8) :: dxdivg, dydivg, dzdivg, fac13, fac23, conv_gra
00028 integer :: ipg, irg, itg
00029
00030 call alloc_array3d(gx,0,nrg,0,ntg,0,npg)
00031 call alloc_array3d(gy,0,nrg,0,ntg,0,npg)
00032 call alloc_array3d(gz,0,nrg,0,ntg,0,npg)
00033 call alloc_array3d(divg,0,nrg,0,ntg,0,npg)
00034 call alloc_array3d(sougx,0,nrg,0,ntg,0,npg)
00035 call alloc_array3d(sougy,0,nrg,0,ntg,0,npg)
00036 call alloc_array3d(sougz,0,nrg,0,ntg,0,npg)
00037
00038
00039
00040 do ipg = 0, npg
00041 do itg = 0, ntg
00042 do irg = 0, nrg
00043 call grgrad_gridpoint_type0(gaugex,dgxdx,dgxdy,dgxdz,irg,itg,ipg)
00044 call grgrad_gridpoint_type0(gaugey,dgydx,dgydy,dgydz,irg,itg,ipg)
00045 call grgrad_gridpoint_type0(gaugez,dgzdx,dgzdy,dgzdz,irg,itg,ipg)
00046 divg(irg,itg,ipg) = dgxdx + dgydy + dgzdz
00047 end do
00048 end do
00049 end do
00050
00051 fac13 = 1.0d0/3.0d0
00052 do ipg = 1, npg
00053 do itg = 1, ntg
00054 do irg = 1, nrg
00055
00056 call grgrad_midpoint_type0(divg,dxdivg,dydivg,dzdivg,irg,itg,ipg)
00057 call grgrad_midpoint_type0(hxxu,dhxxux,dhxxuy,dhxxuz,irg,itg,ipg)
00058 call grgrad_midpoint_type0(hxyu,dhxyux,dhxyuy,dhxyuz,irg,itg,ipg)
00059 call grgrad_midpoint_type0(hxzu,dhxzux,dhxzuy,dhxzuz,irg,itg,ipg)
00060 call grgrad_midpoint_type0(hyyu,dhyyux,dhyyuy,dhyyuz,irg,itg,ipg)
00061 call grgrad_midpoint_type0(hyzu,dhyzux,dhyzuy,dhyzuz,irg,itg,ipg)
00062 call grgrad_midpoint_type0(hzzu,dhzzux,dhzzuy,dhzzuz,irg,itg,ipg)
00063 hxidiv = dhxxux + dhxyuy + dhxzuz
00064 hyidiv = dhxyux + dhyyuy + dhyzuz
00065 hzidiv = dhxzux + dhyzuy + dhzzuz
00066
00067 sougx(irg,itg,ipg) = hxidiv - fac13*dxdivg
00068 sougy(irg,itg,ipg) = hyidiv - fac13*dydivg
00069 sougz(irg,itg,ipg) = hzidiv - fac13*dzdivg
00070
00071 end do
00072 end do
00073 end do
00074
00075
00076
00077 call poisson_solver(sougx,gx)
00078
00079 call poisson_solver(sougy,gy)
00080
00081 call poisson_solver(sougz,gz)
00082
00083
00084 call update_grfield(gx,gaugex,conv_gra)
00085 call update_grfield(gy,gaugey,conv_gra)
00086 call update_grfield(gz,gaugez,conv_gra)
00087
00088
00089
00090
00091
00092
00093 fac23 = 2.0d0/3.0d0
00094 do ipg = 0, npg
00095 do itg = 0, ntg
00096 do irg = 0, nrg
00097
00098 call grgrad_gridpoint_type0(gaugex,dgxdx,dgxdy,dgxdz,irg,itg,ipg)
00099 call grgrad_gridpoint_type0(gaugey,dgydx,dgydy,dgydz,irg,itg,ipg)
00100 call grgrad_gridpoint_type0(gaugez,dgzdx,dgzdy,dgzdz,irg,itg,ipg)
00101
00102 divgg = dgxdx + dgydy + dgzdz
00103 dlgxdx = dgxdx + dgxdx - fac23*divgg
00104 dlgxdy = dgxdy + dgydx
00105 dlgxdz = dgxdz + dgzdx
00106 dlgydy = dgydy + dgydy - fac23*divgg
00107 dlgydz = dgydz + dgzdy
00108 dlgzdz = dgzdz + dgzdz - fac23*divgg
00109
00110 hxxu(irg,itg,ipg) = hxxu(irg,itg,ipg) - dlgxdx
00111 hxyu(irg,itg,ipg) = hxyu(irg,itg,ipg) - dlgxdy
00112 hxzu(irg,itg,ipg) = hxzu(irg,itg,ipg) - dlgxdz
00113 hyyu(irg,itg,ipg) = hyyu(irg,itg,ipg) - dlgydy
00114 hyzu(irg,itg,ipg) = hyzu(irg,itg,ipg) - dlgydz
00115 hzzu(irg,itg,ipg) = hzzu(irg,itg,ipg) - dlgzdz
00116
00117 end do
00118 end do
00119 end do
00120
00121 deallocate(gx)
00122 deallocate(gy)
00123 deallocate(gz)
00124 deallocate(divg)
00125 deallocate(sougx)
00126 deallocate(sougy)
00127 deallocate(sougz)
00128 end subroutine gauge_hiju