This module provides various routines for sorting arrays This isn't something we commonly do but these routines are useful in a few places.
As with most algorithms different options can be made depending on if we want to optimise memory usage, speed etc.
Sort an integer array based on integer KEY
Currently we provide several routines for sorting different numbers of arrays based on the same key. It is likely to be faster to sort an "index" array (e.g. an array of integers initially (/1..n/)) and use this to address as many arrays (of any type) that we want to sort. This will however have some additional memory overhead so for now do things this way.
Simple tests suggest that passing arr_len explicitly can lead to a substantial speedup of the routine compared to deferred shape.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
Sort an integer array based on integer KEY
Currently we provide several routines for sorting different numbers of arrays based on the same key. It is likely to be faster to sort an "index" array (e.g. an array of integers initially (/1..n/)) and use this to address as many arrays (of any type) that we want to sort. This will however have some additional memory overhead so for now do things this way.
Simple tests suggest that passing arr_len explicitly can lead to a substantial speedup of the routine compared to deferred shape.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
Sort two integer arrays based on integer KEY
Currently we provide several routines for sorting different numbers of arrays based on the same key. It is likely to be faster to sort an "index" array (e.g. an array of integers initially (/1..n/)) and use this to address as many arrays (of any type) that we want to sort. This will however have some additional memory overhead so for now do things this way.
Simple tests suggest that passing arr_len explicitly can lead to a substantial speedup of the routine compared to deferred shape.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr2 |
Arrays to be sorted |
Sort three integer arrays based on integer KEY
Currently we provide several routines for sorting different numbers of arrays based on the same key. It is likely to be faster to sort an "index" array (e.g. an array of integers initially (/1..n/)) and use this to address as many arrays (of any type) that we want to sort. This will however have some additional memory overhead so for now do things this way.
Simple tests suggest that passing arr_len explicitly can lead to a substantial speedup of the routine compared to deferred shape.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr2 |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr3 |
Arrays to be sorted |
Sort a real array key
Currently we provide several routines for sorting different numbers of arrays based on the same key. It is likely to be faster to sort an "index" array (e.g. an array of integers initially (/1..n/)) and use this to address as many arrays (of any type) that we want to sort. This will however have some additional memory overhead so for now do things this way.
Simple tests suggest that passing arr_len explicitly can lead to a substantial speedup of the routine compared to deferred shape.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
real, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
Sort real arrays key
and arr1
based on key
Currently we provide several routines for sorting different numbers of arrays based on the same key. It is likely to be faster to sort an "index" array (e.g. an array of integers initially (/1..n/)) and use this to address as many arrays (of any type) that we want to sort. This will however have some additional memory overhead so for now do things this way.
Simple tests suggest that passing arr_len explicitly can lead to a substantial speedup of the routine compared to deferred shape.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
real, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
real, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
Sorts integer array key
using insertion sort
based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
Sorts integer arrays key
and arr1
using insertion sort
based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
Sorts integer arrays key
, arr1
and arr2
using insertion
sort based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr2 |
Arrays to be sorted |
Sorts integer arrays key
, arr1
, arr2
and arr3
using
insertion sort based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len | |||
integer, | intent(inout), | dimension(1:arr_len) | :: | key | ||
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 | ||
integer, | intent(inout), | dimension(1:arr_len) | :: | arr2 | ||
integer, | intent(inout), | dimension(1:arr_len) | :: | arr3 |
Sorts real array key
using insertion sort based on the order of
key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
real, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
Sorts real arrays key
and arr1
using insertion sort
based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
real, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
real, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
Swaps element at ind1
in arr
with element
at ind2
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(inout), | dimension(:) | :: | arr | ||
integer, | intent(in) | :: | ind1 | |||
integer, | intent(in) | :: | ind2 |
Swaps element at ind1
in arr
with element
at ind2
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real, | intent(inout), | dimension(:) | :: | arr | ||
integer, | intent(in) | :: | ind1 | |||
integer, | intent(in) | :: | ind2 |
Sort an integer array based on integer KEY
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
Sort an integer array based on integer KEY
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
Sort two integer arrays based on integer KEY
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr2 |
Arrays to be sorted |
Sort three integer arrays based on integer KEY
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr2 |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr3 |
Arrays to be sorted |
Sort a real array key
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
real, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
Sort real arrays key
and arr1
based on key
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
real, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
real, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
Sorts integer array key
using insertion sort
based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
Sorts integer arrays key
and arr1
using insertion sort
based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
Sorts integer arrays key
, arr1
and arr2
using insertion
sort based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
|
integer, | intent(inout), | dimension(1:arr_len) | :: | arr2 |
Arrays to be sorted |
Sorts integer arrays key
, arr1
, arr2
and arr3
using
insertion sort based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len | |||
integer, | intent(inout), | dimension(1:arr_len) | :: | key | ||
integer, | intent(inout), | dimension(1:arr_len) | :: | arr1 | ||
integer, | intent(inout), | dimension(1:arr_len) | :: | arr2 | ||
integer, | intent(inout), | dimension(1:arr_len) | :: | arr3 |
Sorts real array key
using insertion sort based on the order of
key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
real, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
Sorts real arrays key
and arr1
using insertion sort
based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
real, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
real, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
Swaps element at ind1
in arr
with element
at ind2
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(inout), | dimension(:) | :: | arr | ||
integer, | intent(in) | :: | ind1 | |||
integer, | intent(in) | :: | ind2 |
Swaps element at ind1
in arr
with element
at ind2
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real, | intent(inout), | dimension(:) | :: | arr | ||
integer, | intent(in) | :: | ind1 | |||
integer, | intent(in) | :: | ind2 |