coordinate_grav_r_1D.f90
Go to the documentation of this file.00001
00002
00003 module coordinate_grav_r_1D
00004 use phys_constant, only : nnrg, long
00005 use grid_parameter_1D, only : nrg, nrgin, rgin, rgmid, rgout, nrf
00006 implicit none
00007 real(long) :: rg(0:nnrg), rginv(0:nnrg)
00008 real(long) :: hrg(nnrg), hrginv(nnrg)
00009 real(long) :: drg(nnrg), drginv(nnrg)
00010 contains
00011 subroutine grid_r_1D
00012
00013
00014
00015 implicit none
00016 real(long) :: drdr, drdrinv
00017 real(long) :: ratrr
00018 real(long) :: rvdom, ratrrb, alge, dalge, error, rdet
00019 integer :: nrout, ir
00020
00021 drdr = (rgmid - rgin)/dble(nrgin)
00022 drdrinv = 1.0e0/drdr
00023 rvdom = rgout - rgmid
00024 nrout = nrg - nrgin
00025
00026 drg(1:nrgin) = drdr
00027 drginv(1:nrgin) = drdrinv
00028
00029 ratrr = 2.0e0
00030
00031 DO
00032 ratrrb = ratrr
00033 alge = -(ratrr**(nrout+1)-ratrr-rvdom*drdrinv*(ratrr-1.0e0))
00034 dalge = dble(nrout+1)*ratrr**nrout - 1.0e0 - rvdom*drdrinv
00035 ratrr = ratrr + alge/dalge
00036 error = 2.d0*(ratrr - ratrrb)/(ratrr + ratrrb)
00037
00038 IF (abs(error)<=1.d-14) EXIT
00039 END DO
00040
00041 DO ir = nrgin+1, nrg
00042 drg(ir) = ratrr*drg(ir-1)
00043 drginv(ir) = 1.0e0/drg(ir)
00044 END DO
00045
00046 rg(0) = 0.0e0
00047 rginv(0) = 0.0e0
00048 DO ir = 1, nrg
00049 rg(ir) = rg(ir-1) + drg(ir)
00050 hrg(ir) = (rg(ir) + rg(ir-1))*0.5e0
00051 rginv(ir) = 1.0e0/rg(ir)
00052 hrginv(ir) = 1.0e0/hrg(ir)
00053 END DO
00054
00055 write(6,"(' GR ', 4es23.15)") error, ratrr
00056 write(6,"(' ', 4es23.15)") rgout, rg(nrg)
00057
00058
00059
00060 rdet = (rg(nrg) - rgout)/rgout
00061 IF(dabs(rdet)>=1.e-10)then
00062 WRITE(6,*) ' bad coordinate GR ', rdet
00063 STOP
00064 END IF
00065 end subroutine grid_r_1D
00066 end module coordinate_grav_r_1D