00001 subroutine sourceterm_helmholtz_solver_test(soug,char_sou)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use coordinate_grav_r, only : rg
00005 use def_metric, only : psi
00006 use def_matter, only : emdg, rs
00007 use def_matter_parameter, only : radi, pinx, ber, ome
00008 use def_vector_phi, only : vec_phig, hvec_phig
00009 use interface_interpo_linear_type0
00010 use interface_grgrad_midpoint
00011 use interface_grgrad_gridpoint
00012 use interface_interpo_linear_type0
00013 use make_array_3d
00014 implicit none
00015 real(long), pointer :: soug(:,:,:)
00016 real(long), pointer :: fncdp(:,:,:)
00017 real(long), pointer :: dfdx(:,:,:), dfdy(:,:,:), dfdz(:,:,:)
00018 integer :: irg,itg,ipg
00019 real(long) :: emdw, dxpsi, dypsi, dzpsi
00020 real(long) :: d2psi, vphix, vphiy, vphiz
00021 character(2) :: char_sou
00022
00023 if (char_sou.eq.'he') then
00024 do ipg = 1, npg
00025 do itg = 1, ntg
00026 do irg = 1, nrg
00027 call interpo_linear_type0(emdw,emdg,irg,itg,ipg)
00028 soug(irg,itg,ipg) = emdw
00029 end do
00030 end do
00031 end do
00032 else if (char_sou.eq.'po') then
00033
00034 call alloc_array3d(dfdx,0,nrg,0,ntg,0,npg)
00035 call alloc_array3d(dfdy,0,nrg,0,ntg,0,npg)
00036 call alloc_array3d(dfdz,0,nrg,0,ntg,0,npg)
00037 call alloc_array3d(fncdp,0,nrg,0,ntg,0,npg)
00038 call grgrad_gridpoint(psi,dfdx,dfdy,dfdz)
00039 do ipg = 0, npg
00040 do itg = 0, ntg
00041 do irg = 0, nrg
00042 dxpsi = dfdx(irg,itg,ipg)
00043 dypsi = dfdy(irg,itg,ipg)
00044 dzpsi = dfdz(irg,itg,ipg)
00045 vphix = vec_phig(irg,itg,ipg,1)
00046 vphiy = vec_phig(irg,itg,ipg,2)
00047 vphiz = vec_phig(irg,itg,ipg,3)
00048 fncdp(irg,itg,ipg) = vphix*dxpsi + vphiy*dypsi + vphiz*dzpsi
00049 end do
00050 end do
00051 end do
00052 call grgrad_midpoint(fncdp,dfdx,dfdy,dfdz)
00053
00054 do ipg = 1, npg
00055 do itg = 1, ntg
00056 do irg = 1, nrg
00057 dxpsi = dfdx(irg,itg,ipg)
00058 dypsi = dfdy(irg,itg,ipg)
00059 dzpsi = dfdz(irg,itg,ipg)
00060 vphix = hvec_phig(irg,itg,ipg,1)
00061 vphiy = hvec_phig(irg,itg,ipg,2)
00062 vphiz = hvec_phig(irg,itg,ipg,3)
00063 d2psi = vphix*dxpsi + vphiy*dypsi + vphiz*dzpsi
00064 call interpo_linear_type0(emdw,emdg,irg,itg,ipg)
00065 soug(irg,itg,ipg) = emdw + ome**2*d2psi
00066 end do
00067 end do
00068 end do
00069
00070 deallocate(dfdx,dfdy,dfdz,fncdp)
00071 end if
00072
00073
00074 end subroutine sourceterm_helmholtz_solver_test