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
00122
00123
00124 deallocate(gx)
00125 deallocate(gy)
00126 deallocate(gz)
00127 deallocate(divg)
00128 deallocate(sougx)
00129 deallocate(sougy)
00130 deallocate(sougz)
00131 end subroutine gauge_hiju