lagrangian_set_Recycle Subroutine

private pure subroutine lagrangian_set_Recycle(this)

Sorting routine: stacks active lagrangian objects (i.e., who's id is >=1) at the beginning of the array then resizes. Objects with id <= 0 (such as ghost objects) are removed by this subroutine.

Type Bound

lagrangian_set

Arguments

Type IntentOptional Attributes Name
class(lagrangian_set), intent(inout) :: this

A set of Lagrangian objects


Calls

proc~~lagrangian_set_recycle~~CallsGraph proc~lagrangian_set_recycle lagrangian_set%lagrangian_set_Recycle proc~lagrangian_set_resize lagrangian_set%lagrangian_set_Resize proc~lagrangian_set_recycle->proc~lagrangian_set_resize

Called by

proc~~lagrangian_set_recycle~~CalledByGraph proc~lagrangian_set_recycle lagrangian_set%lagrangian_set_Recycle proc~collision_obj_sanitize collision_obj%collision_obj_Sanitize proc~collision_obj_sanitize->proc~lagrangian_set_recycle proc~lagrangian_set_communicate lagrangian_set%lagrangian_set_Communicate proc~lagrangian_set_communicate->proc~lagrangian_set_recycle proc~lagrangian_set_updateghostobjects lagrangian_set%lagrangian_set_UpdateGhostObjects proc~lagrangian_set_updateghostobjects->proc~lagrangian_set_recycle proc~marker_set_loadstl marker_set%marker_set_LoadSTL proc~marker_set_loadstl->proc~lagrangian_set_recycle proc~cdifs_obj_advancesolutionrp cdifs_obj_AdvanceSolutionRP proc~cdifs_obj_advancesolutionrp->proc~lagrangian_set_communicate proc~cdifs_obj_updatecollisions cdifs_obj_UpdateCollisions proc~cdifs_obj_advancesolutionrp->proc~cdifs_obj_updatecollisions proc~respart_set_regroup ResPart_set%ResPart_set_Regroup proc~cdifs_obj_advancesolutionrp->proc~respart_set_regroup proc~respart_set_gethydroforces ResPart_set%ResPart_set_GetHydroForces proc~cdifs_obj_advancesolutionrp->proc~respart_set_gethydroforces proc~cdifs_obj_updatecollisions->proc~collision_obj_sanitize proc~collision_obj_updateghostobjects collision_obj%collision_obj_UpdateGhostObjects proc~cdifs_obj_updatecollisions->proc~collision_obj_updateghostobjects proc~collision_obj_final collision_obj%collision_obj_Final proc~collision_obj_final->proc~collision_obj_sanitize proc~collision_obj_updateghostobjects->proc~lagrangian_set_updateghostobjects proc~grans_obj_advancesolution grans_obj_AdvanceSolution proc~grans_obj_advancesolution->proc~lagrangian_set_communicate proc~grans_obj_advancesolution_computecollisionforces grans_obj_AdvanceSolution_ComputeCollisionForces proc~grans_obj_advancesolution->proc~grans_obj_advancesolution_computecollisionforces proc~grans_obj_advancesolution->proc~respart_set_regroup proc~grans_obj_advancesolution_computecollisionforces->proc~collision_obj_sanitize proc~grans_obj_advancesolution_computecollisionforces->proc~collision_obj_updateghostobjects proc~marker_set_readh5hut marker_set%marker_set_ReadH5HUT proc~marker_set_readh5hut->proc~lagrangian_set_communicate proc~marker_set_readhdf5 marker_set%marker_set_ReadHDF5 proc~marker_set_readhdf5->proc~lagrangian_set_communicate proc~respart_set_readh5hut ResPart_set%ResPart_set_ReadH5HUT proc~respart_set_readh5hut->proc~lagrangian_set_communicate proc~respart_set_readhdf5 ResPart_set%ResPart_set_ReadHDF5 proc~respart_set_readhdf5->proc~lagrangian_set_communicate proc~respart_set_readhdf5->proc~marker_set_readhdf5 proc~respart_set_regroup->proc~lagrangian_set_communicate proc~solid_set_communicate solid_set%solid_set_Communicate proc~solid_set_communicate->proc~lagrangian_set_communicate interface~grans_obj_advancesolution grans_obj%grans_obj_AdvanceSolution interface~grans_obj_advancesolution->proc~grans_obj_advancesolution proc~cdifs_obj_advancesolution cdifs_obj_AdvanceSolution proc~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolutionrp proc~respart_set_gethydroforces->proc~respart_set_regroup proc~solid_set_readhdf5 solid_set%solid_set_ReadHDF5 proc~solid_set_readhdf5->proc~marker_set_readhdf5 interface~cdifs_obj_advancesolution cdifs_obj%cdifs_obj_AdvanceSolution interface~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolution

Source Code

    pure subroutine lagrangian_set_Recycle(this)
      !> Sorting routine: stacks active lagrangian
      ! objects (i.e., who's id is >=1) at the beginning of
      ! the array then resizes. Objects with id <= 0 (such as
      ! ghost objects) are removed by this subroutine.
      implicit none
      class(lagrangian_set), intent(inout) :: this                             !! A set of Lagrangian objects
      ! Work variables
      integer :: count_active                                                  !! Number of active objects
      integer :: i                                                             !! iterator

      count_active = 0
      if (allocated(this%p)) then
        do i=1,size(this%p)
          if (this%p(i)%id.gt.0) then
            count_active = count_active + 1
            if (i.ne.count_active) then
              ! Move back the object
              this%p(count_active)=this%p(i)

              ! Set current position inactive
              this%p(i)%id = -1
            end if
          end if
        end do
      end if

      ! Resize array to count_active
      call this%Resize(count_active)

      return
    end subroutine lagrangian_set_Recycle