collision_obj_Sanitize Subroutine

private impure subroutine collision_obj_Sanitize(this)

Frees data: removes ghost objects and frees neighbor lists.

Type Bound

collision_obj

Arguments

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

Collision utility


Calls

proc~~collision_obj_sanitize~~CallsGraph proc~collision_obj_sanitize collision_obj%collision_obj_Sanitize proc~lagrangian_set_recycle lagrangian_set%lagrangian_set_Recycle proc~collision_obj_sanitize->proc~lagrangian_set_recycle proc~lagrangian_set_resize lagrangian_set%lagrangian_set_Resize proc~lagrangian_set_recycle->proc~lagrangian_set_resize

Called by

proc~~collision_obj_sanitize~~CalledByGraph proc~collision_obj_sanitize collision_obj%collision_obj_Sanitize proc~cdifs_obj_updatecollisions cdifs_obj_UpdateCollisions proc~cdifs_obj_updatecollisions->proc~collision_obj_sanitize proc~collision_obj_final collision_obj%collision_obj_Final proc~collision_obj_final->proc~collision_obj_sanitize proc~grans_obj_advancesolution_computecollisionforces grans_obj_AdvanceSolution_ComputeCollisionForces proc~grans_obj_advancesolution_computecollisionforces->proc~collision_obj_sanitize proc~cdifs_obj_advancesolutionrp cdifs_obj_AdvanceSolutionRP proc~cdifs_obj_advancesolutionrp->proc~cdifs_obj_updatecollisions proc~grans_obj_advancesolution grans_obj_AdvanceSolution proc~grans_obj_advancesolution->proc~grans_obj_advancesolution_computecollisionforces 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 interface~cdifs_obj_advancesolution cdifs_obj%cdifs_obj_AdvanceSolution interface~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolution

Source Code

    impure subroutine collision_obj_Sanitize(this)
      !> Frees data: removes ghost objects and frees neighbor lists.
      implicit none
      class(collision_obj), intent(inout) :: this                              !! Collision utility
      ! Work variables
      integer :: i,j,k

      if (associated(this%IB)) then
        call this%IB%Recycle()

        ! Free list
        if (allocated(this%IBneighbors)) then
          associate (lo => this%cblock%lo, hi=>this%cblock%hi, ngc =>this%cblock%ngc)
            do k=lo(3)-ngc,hi(3)+ngc
              do j=lo(2)-ngc,hi(2)+ngc
                do i=lo(1)-ngc,hi(1)+ngc
                  call this%IBneighbors(i,j,k)%Free()
                end do
              end do
            end do
          end associate
        end if
      end if

      if (associated(this%RP)) then
        ! Remove Ghost Objects
        call this%RP%Recycle()

        ! Free list
        if (allocated(this%RPneighbors)) then
          associate (lo => this%cblock%lo, hi=>this%cblock%hi, ngc =>this%cblock%ngc)
            do k=lo(3)-ngc,hi(3)+ngc
              do j=lo(2)-ngc,hi(2)+ngc
                do i=lo(1)-ngc,hi(1)+ngc
                  call this%RPneighbors(i,j,k)%Free()
                end do
              end do
            end do
          end associate
        end if
      end if

      if (associated(this%PP)) then
        call this%PP%Recycle()

        ! Free list
        if (allocated(this%PPneighbors)) then
          associate (lo => this%cblock%lo, hi=>this%cblock%hi, ngc =>this%cblock%ngc)
            do k=lo(3)-ngc,hi(3)+ngc
              do j=lo(2)-ngc,hi(2)+ngc
                do i=lo(1)-ngc,hi(1)+ngc
                  call this%PPneighbors(i,j,k)%Free()
                end do
              end do
            end do
          end associate
        end if
      end if

      return
    end subroutine collision_obj_Sanitize