Considérons une matrice "a" de dimension 3$\times$2 (3 lignes, 2 colonnes) comme dans cet exemple:
\begin{equation}
\left(
\begin{array}{cc}
5 & 9 \\
2 & 7 \\
6 & 4
\end{array}
\right)
\end{equation}
Pour trouver l'indice correspondant à la valeur minimum de la matrice "a" on peut utiliser la fonction fortran MINLOC qui donne ici (2,1) (deuxième ligne, 1ere colonne). A partir de cette function il est alors possible d'ajouter des conditions: par exemple si on veut trouver l'indice de la ligne avec la plus petite valeur sur la deuxième colonnes MINLOC(a(:,2)) qui donne ici 3 (car 4 est la plus petite valeur de la deuxième colonnes). Pour aller encore plus loin il est possible d'utiliser un MASK pour contraindre davantage la recherche. Exemple de code fortran
program test
implicit none
integer, dimension(3,2) :: a
a(1,1) = 5
a(1,2) = 9
a(2,1) = 2
a(2,2) = 7
a(3,1) = 6
a(3,2) = 4
write(6,*) 'Test 1 :', MINLOC(a)
write(6,*) 'Test 2 :', MINLOC(a(:,2))
write(6,*) 'Test 3 :', MINLOC(a(:,1), MASK=(a(:,1) > 4))
write(6,*) 'Test 4 :', MINLOC(a(:,1), MASK=(a(:,1) > 4 .AND. a(:,2) < 5))
end program test
donne comme résultat:
Test 1 : 2 1
Test 2 : 3
Test 3 : 1
Test 4 : 3
Exemple d'application: trouver la ligne d'un fichier respectant plusieurs conditions. Supposons que l'on dispose dun fichier data.txt comme ceci:
2008 10 1 13232
2008 10 2 3132
2008 10 3 67
2008 10 4 767
2008 10 5 67
2008 10 6 465
2008 10 7 7754
2008 10 8 6465
2008 10 9 656
2008 10 10 345
2008 10 11 577
et on veut trouver l'indice de la ligne qui commence avec 2008, 10 et 8 :
program test
implicit none
integer :: i,j
integer, dimension(11,4) :: a
open(1,file='fortran_data_test.txt')
do i=1, 11
read(1,*) (a(i,j),j=1,4)
end do
close(1)
write(6,*) MINLOC(a(:,1), MASK=(a(:,1) == 2008 .AND. a(:,2) ==10 .AND. a(:,3) == 8))
end program test
qui donne ici 8 (car la huitième lignes commence bien par 2008 10 8 )