00001
00002
00003 module coordinate_grav_extended
00004 use phys_constant, only : nnrg, nntg, nnpg, long
00005 use coordinate_grav_r, only : rg, hrg
00006 use coordinate_grav_theta, only : thg, hthg
00007 use coordinate_grav_phi, only : phig, hphig
00008 use grid_parameter, only : nrg, ntg, npg
00009 implicit none
00010 real(long) :: rgex(-2:nnrg+2),
00011 thgex(-2:nntg+2), &
00012 phigex(-2:nnpg+2)
00013 integer :: irgex_r(-2:nnrg+2),
00014 itgex_r(0:nntg,-2:nnrg+2), &
00015 ipgex_r(0:nnpg,-2:nnrg+2)
00016 integer :: itgex_th(-2:nntg+2),
00017 ipgex_th(0:nnpg,-2:nntg+2)
00018 integer :: ipgex_phi(-2:nnpg+2)
00019
00020 real(long) :: hrgex(-2:nnrg+2),
00021 hthgex(-2:nntg+2), &
00022 hphigex(-2:nnpg+2)
00023 integer :: irgex_hr(-2:nnrg+2),
00024 itgex_hr(1:nntg,-2:nnrg+2), &
00025 ipgex_hr(1:nnpg,-2:nnrg+2)
00026 integer :: itgex_hth(-2:nntg+2),
00027 ipgex_hth(1:nnpg,-2:nntg+2)
00028 integer :: ipgex_hphi(-2:nnpg+2)
00029
00030 contains
00031 subroutine grid_extended
00032 implicit none
00033 integer :: irg, itg, ipg
00034 rgex(0:nrg) = rg(0:nrg)
00035 thgex(0:ntg) = thg(0:ntg)
00036 phigex(0:npg) = phig(0:npg)
00037 rgex(-1) = rg(0) - (rg(1) - rg(0))
00038 rgex(-2) = rg(0) - (rg(2) - rg(0))
00039 rgex(nrg+1) = rg(nrg) + (rg(nrg) - rg(nrg-1))
00040 rgex(nrg+2) = rg(nrg) + 2.0d0*(rg(nrg) - rg(nrg-1))
00041 thgex(-1) = - thg(1)
00042 thgex(-2) = - thg(2)
00043 thgex(ntg+1) = 2.0d0*thg(ntg) - thg(ntg-1)
00044 thgex(ntg+2) = 2.0d0*thg(ntg) - thg(ntg-2)
00045 phigex(-1) = phig(npg-1) - phig(npg)
00046 phigex(-2) = phig(npg-2) - phig(npg)
00047 phigex(npg+1) = phig(npg) + phig(1)
00048 phigex(npg+2) = phig(npg) + phig(2)
00049
00050 do irg = -2, nrg
00051 if (irg.ge.0.and.irg.le.nrg) irgex_r(irg) = irg
00052 if (irg.le.-1) irgex_r(irg) = iabs(irg)
00053 end do
00054 do itg = -2, ntg + 2
00055 if (itg.ge.0.and.itg.le.ntg) itgex_th(itg) = itg
00056 if (itg.le.-1) itgex_th(itg) = iabs(itg)
00057 if (itg.ge.ntg+1) itgex_th(itg) = 2*ntg - itg
00058 end do
00059 do ipg = -2, npg + 2
00060 if (ipg.ge.0.and.ipg.le.npg) ipgex_phi(ipg) = ipg
00061 if (ipg.le.-1) ipgex_phi(ipg) = npg + ipg
00062 if (ipg.ge.npg+1) ipgex_phi(ipg) = ipg - npg
00063 end do
00064
00065 do irg = -2, nrg
00066 do itg = 0, ntg
00067 if (irg.ge. 0) itgex_r(itg,irg) = itg
00068 if (irg.le.-1) itgex_r(itg,irg) = ntg - itg
00069 end do
00070 end do
00071 do irg = -2, nrg
00072 do ipg = 0, npg
00073 if (irg.ge. 0) ipgex_r(ipg,irg) = ipg
00074 if (irg.le.-1) ipgex_r(ipg,irg) = mod(ipg + npg/2,npg)
00075 end do
00076 end do
00077 do itg = -2, ntg + 2
00078 do ipg = 0, npg
00079 if (itg.ge.0.and.itg.le.ntg ) ipgex_th(ipg,itg) = ipg
00080 if (itg.le.-1.or.itg.ge.ntg+1) ipgex_th(ipg,itg) = mod(ipg + npg/2,npg)
00081 end do
00082 end do
00083
00084
00085
00086 hrgex(1:nrg) = hrg(1:nrg)
00087 hthgex(1:ntg) = hthg(1:ntg)
00088 hphigex(1:npg) = hphig(1:npg)
00089 hrgex(0) = rg(0) - hrg(1)
00090 hrgex(-1) = rg(0) - hrg(2)
00091 hrgex(-2) = rg(0) - hrg(3)
00092 hrgex(nrg+1) = 0.5d0*(rg(nrg+1) + rg(nrg))
00093 hrgex(nrg+2) = 0.5d0*(rg(nrg+2) + rg(nrg+1))
00094 hthgex(0) = - hthg(1)
00095 hthgex(-1) = - hthg(2)
00096 hthgex(-2) = - hthg(3)
00097 hthgex(ntg+1) = 2.0d0*hthg(ntg) - hthg(ntg-1)
00098 hthgex(ntg+2) = 2.0d0*hthg(ntg) - hthg(ntg-2)
00099 hphigex(0) = - hphig(1)
00100 hphigex(-1) = - hphig(2)
00101 hphigex(-2) = - hphig(3)
00102 hphigex(npg+1) = hphig(npg) + phig(1)
00103 hphigex(npg+2) = hphig(npg) + phig(2)
00104
00105 do irg = -2, nrg
00106 if (irg.ge.1) irgex_hr(irg) = irg
00107 if (irg.le.0) irgex_hr(irg) = iabs(irg) + 1
00108 end do
00109 do irg = -2, nrg
00110 do itg = 1, ntg
00111 if (irg.ge.1) itgex_hr(itg,irg) = itg
00112 if (irg.le.0) itgex_hr(itg,irg) = ntg - itg + 1
00113 end do
00114 end do
00115 do irg = -2, nrg
00116 do ipg = 1, npg
00117 if (irg.ge.1) ipgex_hr(ipg,irg) = ipg
00118 if (irg.le.0) ipgex_hr(ipg,irg) = mod(ipg + npg/2,npg)
00119 end do
00120 end do
00121
00122 do itg = -2, ntg + 2
00123 if (itg.ge.1.and.itg.le.ntg) itgex_hth(itg) = itg
00124 if (itg.le.0) itgex_hth(itg) = iabs(itg) + 1
00125 if (itg.ge.ntg+1) itgex_hth(itg) = 2*ntg - itg + 1
00126 end do
00127 do itg = -2, ntg + 2
00128 do ipg = 1, npg
00129 if (itg.ge.1.and.itg.le.ntg) ipgex_hth(ipg,itg) = ipg
00130 if (itg.le.0.or.itg.ge.ntg+1) ipgex_hth(ipg,itg) = mod(ipg + npg/2,npg)
00131 end do
00132 end do
00133
00134 do ipg = -2, npg + 2
00135 if (ipg.ge.1.and.ipg.le.npg) ipgex_hphi(ipg) = ipg
00136 if (ipg.le.0) ipgex_hphi(ipg) = npg + ipg
00137 if (ipg.ge.npg+1) ipgex_hphi(ipg) = ipg - npg
00138 end do
00139
00140 end subroutine grid_extended
00141 end module coordinate_grav_extended