Return only the unique values from vec.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=ip), | intent(in), | dimension(:) | :: | vec |
function unique64(vec) result(vec_unique) integer(ip),dimension(:),intent(in) :: vec integer(ip),dimension(:),allocatable :: vec_unique integer(ip) :: i,num logical,dimension(size(vec)) :: mask mask = .false. do i=1,size(vec) !count the number of occurrences of this element: num = count( vec(i)==vec ) if (num==1) then !there is only one, flag it: mask(i) = .true. else !flag this value only if it hasn't already been flagged: if (.not. any(vec(i)==vec .and. mask) ) mask(i) = .true. end if end do !return only flagged elements: allocate( vec_unique(count(mask)) ) vec_unique = pack( vec, mask ) ! also sort it: call sort(vec_unique) end function unique64