particle_set_ChangePartType Subroutine

private impure subroutine particle_set_ChangePartType(this, type)

Changes Particle Type. This deletes all existing particle data and redeclares the associated MPI type.

Type Bound

particle_set

Arguments

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

Set of particles

character(len=*), intent(in) :: type

particle type


Calls

proc~~particle_set_changeparttype~~CallsGraph proc~particle_set_changeparttype particle_set%particle_set_ChangePartType proc~lagrangian_set_creatempitype lagrangian_set%lagrangian_set_CreateMPIType proc~particle_set_changeparttype->proc~lagrangian_set_creatempitype proc~lagrangian_set_freempitype lagrangian_set%lagrangian_set_FreeMPIType proc~particle_set_changeparttype->proc~lagrangian_set_freempitype proc~lagrangian_set_resize lagrangian_set%lagrangian_set_Resize proc~particle_set_changeparttype->proc~lagrangian_set_resize proc~particle_set_setobjecttype particle_set%particle_set_SetObjectType proc~particle_set_changeparttype->proc~particle_set_setobjecttype SetMPIDataTypeParams SetMPIDataTypeParams proc~lagrangian_set_creatempitype->SetMPIDataTypeParams mpi_type_commit mpi_type_commit proc~lagrangian_set_creatempitype->mpi_type_commit mpi_type_create_resized mpi_type_create_resized proc~lagrangian_set_creatempitype->mpi_type_create_resized mpi_type_create_struct mpi_type_create_struct proc~lagrangian_set_creatempitype->mpi_type_create_struct mpi_type_get_extent mpi_type_get_extent proc~lagrangian_set_creatempitype->mpi_type_get_extent mpi_type_size mpi_type_size proc~lagrangian_set_creatempitype->mpi_type_size mpi_type_free mpi_type_free proc~lagrangian_set_freempitype->mpi_type_free

Called by

proc~~particle_set_changeparttype~~CalledByGraph proc~particle_set_changeparttype particle_set%particle_set_ChangePartType proc~particle_set_prepare particle_set%particle_set_Prepare proc~particle_set_prepare->proc~particle_set_changeparttype

Source Code

    impure subroutine particle_set_ChangePartType(this,type)
      !> Changes Particle Type.
      ! This deletes all existing particle data and redeclares
      ! the associated MPI type.
      implicit none
      class(particle_set), intent(inout) :: this                               !! Set of particles
      character(len=*),    intent(in)    :: type                               !! particle type

      ! Select appropriate type
      select case (trim(adjustl(type)))
      case ('Default','default','DEFAULT')
        if (this%part_type .eq. PP_TYPE_DEFAULT) then
          ! Nothing to do

          return
        else
          this%part_type = PP_TYPE_DEFAULT
        end if
      case ('Basset', 'basset', 'BASSET' )
        if (this%part_type .eq. PP_TYPE_BASSET) then
          ! Nothing to do

          return
        else
          this%part_type = PP_TYPE_BASSET
        end if
      case default
        call this%parallel%Stop ("Unknown particle type")
      end select

      ! Delete all data
      this%count_ = 0
      call this%Resize(this%count_)

      ! Delete previous MPI Type
      call this%FreeMPIType()

      ! Set sample type
       call this%SetObjectType()

      ! Create MPI type
      call this%CreateMPIType

      return
    end subroutine particle_set_ChangePartType