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