RECURSIVE SUBROUTINE mp_type_free_m(type_descriptor)
TYPE(mp_type_descriptor_type), INTENT(inout) :: type_descriptor
CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_free_m'
INTEGER :: handle, i, ierr
CALL timeset(routineN, handle)
ierr = 0
! If the subtype is associated, then it's a user-defined data type.
IF (ASSOCIATED(type_descriptor%subtype)) THEN
DO i = 1, SIZE(type_descriptor%subtype)
CALL mp_type_free_m(type_descriptor%subtype(i))
END DO
DEALLOCATE (type_descriptor%subtype)
END IF
#if defined(__parallel)
CALL MPI_Type_free(type_descriptor%type_handle, ierr)
IF (ierr /= 0) &
DBCSR_ABORT("MPI_Type_free @ "//routineN)
#endif
CALL timestop(handle)
END SUBROUTINE mp_type_free_m