advance_particles Subroutine

public subroutine advance_particles(end_time, steps_taken)

Uses

  • proc~~advance_particles~~UsesGraph proc~advance_particles advance_particles module~mod_global_parameters mod_global_parameters proc~advance_particles->module~mod_global_parameters module~mod_timing mod_timing proc~advance_particles->module~mod_timing 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

Routine handles the particle evolution

Arguments

Type IntentOptional Attributes Name
double precision, intent(in) :: end_time

Advance at most up to this time

integer, intent(out) :: steps_taken

Calls

proc~~advance_particles~~CallsGraph proc~advance_particles advance_particles mpi_allreduce mpi_allreduce proc~advance_particles->mpi_allreduce mpi_wtime mpi_wtime proc~advance_particles->mpi_wtime proc~comm_particles comm_particles proc~advance_particles->proc~comm_particles proc~select_active_particles select_active_particles proc~advance_particles->proc~select_active_particles mpi_waitall mpi_waitall proc~comm_particles->mpi_waitall proc~apply_periodb apply_periodB proc~comm_particles->proc~apply_periodb proc~destroy_particles destroy_particles proc~comm_particles->proc~destroy_particles proc~find_particle_ipe find_particle_ipe proc~comm_particles->proc~find_particle_ipe proc~mpi_irecv_wrapper mpi_irecv_wrapper proc~comm_particles->proc~mpi_irecv_wrapper proc~mpi_isend_wrapper mpi_isend_wrapper proc~comm_particles->proc~mpi_isend_wrapper proc~mpistop mpistop proc~comm_particles->proc~mpistop proc~particle_in_igrid particle_in_igrid proc~comm_particles->proc~particle_in_igrid proc~pull_particle_from_particles_on_mype pull_particle_from_particles_on_mype proc~comm_particles->proc~pull_particle_from_particles_on_mype proc~push_particle_into_particles_on_mype push_particle_into_particles_on_mype proc~comm_particles->proc~push_particle_into_particles_on_mype proc~select_active_particles->mpi_allreduce proc~apply_periodb->proc~find_particle_ipe proc~destroy_particles->mpi_allreduce proc~destroy_particles->proc~pull_particle_from_particles_on_mype proc~output_ensemble output_ensemble proc~destroy_particles->proc~output_ensemble 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 mpi_irecv mpi_irecv proc~mpi_irecv_wrapper->mpi_irecv mpi_isend mpi_isend proc~mpi_isend_wrapper->mpi_isend mpi_abort mpi_abort proc~mpistop->mpi_abort proc~get_igslice->proc~mpistop mpi_allgather mpi_allgather proc~output_ensemble->mpi_allgather proc~mpi_recv_wrapper mpi_recv_wrapper proc~output_ensemble->proc~mpi_recv_wrapper proc~mpi_send_wrapper mpi_send_wrapper proc~output_ensemble->proc~mpi_send_wrapper proc~output_particle output_particle proc~output_ensemble->proc~output_particle mpi_recv mpi_recv proc~mpi_recv_wrapper->mpi_recv mpi_send mpi_send proc~mpi_send_wrapper->mpi_send proc~partcoord_to_cartesian partcoord_to_cartesian proc~output_particle->proc~partcoord_to_cartesian

Called by

proc~~advance_particles~~CalledByGraph proc~advance_particles advance_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 advance_particles(end_time, steps_taken)
    use mod_timing
    use mod_global_parameters
    double precision, intent(in) :: end_time
    !< Advance at most up to this time
    integer, intent(out)         :: steps_taken
    integer                      :: n_active

    steps_taken = 0

    do
      call select_active_particles(end_time)

      ! Determine total number of active particles
      call MPI_ALLREDUCE(nparticles_active_on_mype, n_active, 1, MPI_INTEGER,&
          MPI_SUM, icomm, ierrmpi)

      if (n_active == 0) exit

      tpartc_int_0=MPI_WTIME()
      call particles_integrate(end_time)
      steps_taken = steps_taken + 1
      tpartc_int=tpartc_int+(MPI_WTIME()-tpartc_int_0)

      tpartc_com0=MPI_WTIME()
      call comm_particles()
      tpartc_com=tpartc_com + (MPI_WTIME()-tpartc_com0)

      it_particles = it_particles + 1
    end do

  end subroutine advance_particles