get_point_w Subroutine

public subroutine get_point_w(xp, wp, variable_type)

Arguments

Type IntentOptional Attributes Name
double precision :: xp(1:ndim)
double precision :: wp(1:nw)
character(len=*) :: variable_type

Calls

proc~~get_point_w~~CallsGraph proc~get_point_w get_point_w mpi_bcast mpi_bcast proc~get_point_w->mpi_bcast proc~find_particle_ipe find_particle_ipe proc~get_point_w->proc~find_particle_ipe proc~get_point_w_ingrid get_point_w_ingrid proc~get_point_w->proc~get_point_w_ingrid proc~get_igslice get_igslice proc~find_particle_ipe->proc~get_igslice proc~particle_in_domain particle_in_domain proc~find_particle_ipe->proc~particle_in_domain phys_to_conserved phys_to_conserved proc~get_point_w_ingrid->phys_to_conserved phys_to_primitive phys_to_primitive proc~get_point_w_ingrid->phys_to_primitive proc~mpistop mpistop proc~get_point_w_ingrid->proc~mpistop proc~get_igslice->proc~mpistop mpi_abort mpi_abort proc~mpistop->mpi_abort

Source Code

  subroutine get_point_w(xp,wp,variable_type)
    ! for given point (xp), provide the plasma parameters (wp) at this point

    double precision :: xp(1:ndim),wp(1:nw)
    character(*) :: variable_type

    double precision :: x3d(3)
    integer :: indomain,ipe,igrid,j

    indomain=0
    if (xp(3)>=xprobmin3 .and. xp(3)<xprobmax3) indomain=indomain+1
    if (xp(2)>=xprobmin2 .and. xp(2)<xprobmax2) indomain=indomain+1
    if (xp(1)>=xprobmin1 .and. xp(1)<xprobmax1) indomain=indomain+1
    if (indomain==ndim) then

      ! find pe and igrid
      x3d=0.d0
      do j=1,ndim
        x3d(j)=xp(j)
      enddo
      call find_particle_ipe(x3d,igrid,ipe)

      !do interpolation to get point values
      if (mype==ipe) then
        call get_point_w_ingrid(igrid,xp,wp,variable_type)
      endif

      call MPI_BCAST(wp,nw,MPI_DOUBLE_PRECISION,ipe,icomm,ierrmpi)
    endif

  end subroutine get_point_w