apply_periodB Subroutine

public subroutine apply_periodB(particle, igrid_particle, ipe_particle, BC_applied)

Uses

  • proc~~apply_periodb~~UsesGraph proc~apply_periodb apply_periodB module~mod_global_parameters mod_global_parameters proc~apply_periodb->module~mod_global_parameters module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

Arguments

Type IntentOptional Attributes Name
type(particle_t), intent(inout) :: particle
integer, intent(inout) :: igrid_particle
integer, intent(inout) :: ipe_particle
logical, intent(out) :: BC_applied

Calls

proc~~apply_periodb~~CallsGraph proc~apply_periodb apply_periodB proc~find_particle_ipe find_particle_ipe proc~apply_periodb->proc~find_particle_ipe 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 proc~mpistop mpistop proc~get_igslice->proc~mpistop mpi_abort mpi_abort proc~mpistop->mpi_abort

Called by

proc~~apply_periodb~~CalledByGraph proc~apply_periodb apply_periodB proc~comm_particles comm_particles proc~comm_particles->proc~apply_periodb proc~advance_particles advance_particles proc~advance_particles->proc~comm_particles proc~handle_particles handle_particles proc~handle_particles->proc~advance_particles proc~advance advance proc~advance->proc~handle_particles proc~main main proc~main->proc~handle_particles proc~timeintegration timeintegration proc~main->proc~timeintegration proc~timeintegration->proc~advance program~agile agile program~agile->proc~main

Source Code

  subroutine apply_periodB(particle,igrid_particle,ipe_particle,BC_applied)
    use mod_global_parameters

    type(particle_t), intent(inout)        :: particle
    integer, intent(inout)                    :: igrid_particle, ipe_particle
    logical,intent(out)                       :: BC_applied
    integer                                   :: idim

    BC_applied = .false.
    ! get out if we don't have any periodic BC:
    if (.not. any(periodB(1:ndim))) return

    ! go through dimensions and try re-inject the particle at the other side
    do idim=1,ndim

      if (.not. periodB(idim)) cycle

      select case(idim)
        case (1)
        if (particle%x(1) .lt. xprobmin1) then
          particle%x(1) = particle%x(1) + (xprobmax1 - xprobmin1)
          BC_applied = .true.
        end if
        if (particle%x(1) .ge. xprobmax1) then
          particle%x(1) = particle%x(1) - (xprobmax1 - xprobmin1)
          BC_applied = .true.
        end if

        case (2)
        if (particle%x(2) .lt. xprobmin2) then
          particle%x(2) = particle%x(2) + (xprobmax2 - xprobmin2)
          BC_applied = .true.
        end if
        if (particle%x(2) .ge. xprobmax2) then
          particle%x(2) = particle%x(2) - (xprobmax2 - xprobmin2)
          BC_applied = .true.
        end if

        case (3)
        if (particle%x(3) .lt. xprobmin3) then
          particle%x(3) = particle%x(3) + (xprobmax3 - xprobmin3)
          BC_applied = .true.
        end if
        if (particle%x(3) .ge. xprobmax3) then
          particle%x(3) = particle%x(3) - (xprobmax3 - xprobmin3)
          BC_applied = .true.
        end if

      end select

    end do

    call find_particle_ipe(particle%x,igrid_particle,ipe_particle)

  end subroutine apply_periodB