00001 subroutine input_perturbation_peos
00002 use phys_constant, only : long, pi
00003 use coordinate_grav_r, only : rg
00004 use grid_parameter, only : nrf, ntf, npf
00005 use trigonometry_grav_theta, only : sinthg , costhg
00006 use trigonometry_grav_phi, only : sinphig, cosphig, cosmpg
00007 use def_matter, only : rs, emd
00008 use def_matter_parameter, only : ome, radi
00009 use make_array_3d
00010 implicit none
00011 integer :: irf, itf, ipf, iper
00012 real(long) :: xx, yy, zz, ww, rr, phia, ampl, aa
00013 real(long) :: qq, hh, pre, rho, ene, abin, abct
00014 real(long), pointer :: rhopf(:,:,:)
00015
00016
00017
00018
00019
00020
00021 call alloc_array3d(rhopf, 0, nrf, 0, ntf, 0, npf)
00022
00023
00024 ampl=0.2d0; iper=4
00025
00026
00027 do irf = 0, nrf
00028 do itf = 0, ntf
00029 do ipf = 0, npf
00030 xx = rg(irf)*rs(itf,ipf)*sinthg(itf)*cosphig(ipf)
00031 yy = rg(irf)*rs(itf,ipf)*sinthg(itf)*sinphig(ipf)
00032 zz = rg(irf)*rs(itf,ipf)*costhg(itf)
00033 rr = xx*xx + yy*yy
00034 ww = xx*xx - yy*yy
00035 if (rr .ne. 0) then
00036 phia = atan2(yy,xx)
00037 if (yy<0) phia = 2.0d0*pi + phia
00038 end if
00039
00040 qq = emd(irf,itf,ipf)
00041 call peos_q2hprhoab(qq, hh, pre, rho, ene, abin, abct)
00042
00043 if (iper==1) aa = 1.0d0 - ampl + ampl*cosmpg(2,ipf)
00044 if (iper==2) aa = 1.0d0 - ampl + ampl*cos(ome*phia/radi)
00045 if (iper==4) aa = 1.0d0 + ampl*ww
00046
00047 rhopf(irf,itf,ipf) = rho*aa
00048 emd(irf,itf,ipf) = qq*aa**(abin-1.0d0)
00049 end do
00050 end do
00051 end do
00052
00053 irf=ntf/2; ipf=npf/2
00054 do irf = nrf, 0, -1
00055 write(6,'(a13,1p,3e25.15)') "x, rho, emd =", rg(irf)*rs(itf,ipf), rhopf(irf,itf,ipf), emd(irf,itf,ipf)
00056 end do
00057 irf=ntf/2; ipf=0
00058 do irf = 0, nrf
00059 write(6,'(a13,1p,3e25.15)') "x, rho, emd =", rg(irf)*rs(itf,ipf), rhopf(irf,itf,ipf), emd(irf,itf,ipf)
00060 end do
00061 irf=ntf/2; ipf=3*npf/4
00062 do irf = nrf, 0, -1
00063 write(6,'(a13,1p,3e25.15)') "y, rho, emd =", rg(irf)*rs(itf,ipf), rhopf(irf,itf,ipf), emd(irf,itf,ipf)
00064 end do
00065 irf=ntf/2; ipf=npf/4
00066 do irf = 0, nrf
00067 write(6,'(a13,1p,3e25.15)') "y, rho, emd =", rg(irf)*rs(itf,ipf), rhopf(irf,itf,ipf), emd(irf,itf,ipf)
00068 end do
00069
00070 deallocate(rhopf)
00071 end subroutine input_perturbation_peos