advect_get_particle_dt Function

private function advect_get_particle_dt(partp, end_time) result(dt_p)

Uses

  • proc~~advect_get_particle_dt~~UsesGraph proc~advect_get_particle_dt advect_get_particle_dt module~mod_global_parameters mod_global_parameters proc~advect_get_particle_dt->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_ptr), intent(in) :: partp
double precision, intent(in) :: end_time

Return Value double precision


Calls

proc~~advect_get_particle_dt~~CallsGraph proc~advect_get_particle_dt advect_get_particle_dt proc~derivs_advect derivs_advect proc~advect_get_particle_dt->proc~derivs_advect proc~limit_dt_endtime limit_dt_endtime proc~advect_get_particle_dt->proc~limit_dt_endtime proc~get_vec_advect get_vec_advect proc~derivs_advect->proc~get_vec_advect proc~interpolate_var interpolate_var proc~get_vec_advect->proc~interpolate_var proc~mpistop mpistop proc~interpolate_var->proc~mpistop mpi_abort mpi_abort proc~mpistop->mpi_abort

Called by

proc~~advect_get_particle_dt~~CalledByGraph proc~advect_get_particle_dt advect_get_particle_dt proc~advect_integrate_particles advect_integrate_particles proc~advect_integrate_particles->proc~advect_get_particle_dt

Source Code

  function advect_get_particle_dt(partp, end_time) result(dt_p)
    use mod_global_parameters
    type(particle_ptr), intent(in) :: partp
    double precision, intent(in)   :: end_time
    double precision               :: dt_p
    integer                        :: ipart, iipart, idims
    double precision               :: v(1:ndir),dtdims(1:ndim)

    if (const_dt_particles > 0) then
      dt_p = const_dt_particles
      return
    end if

    ! make sure we step only one cell at a time:
    call derivs_advect(partp%self%time,partp%self%x,v)
    do idims=1,ndim
      dtdims(idims)=minval(ps(partp%igrid)%ds(ixMlo1:ixMhi1,ixMlo2:ixMhi2,&
         ixMlo3:ixMhi3,idims))/(max(abs(v(idims)),smalldouble))
    end do

    dt_p = particles_cfl*minval(dtdims)

    ! Make sure we do not advance beyond end_time
    call limit_dt_endtime(end_time - partp%self%time, dt_p)

  end function advect_get_particle_dt