home

Programmation Fortran IV Tables

Utilisation des tables en fortran pour opérations sur matrices et données groupées.

Déclaration d'un tableau

En Fortran, un tableau se déclare au moyen du décorateur dimension(...). Dimension prend pour arguments un nombre de dimensions variables, le nombre de valeurs données à dimension détermine l'ordre du tenseur.

Par exemple, déclarons deux matrices (4,2) et (2, 3) et quelques indices i,j,k.

integer, parameter :: M=4, N=3, P=2
integer :: i, j, k
integer, dimension(M, P) :: A
integer, dimension(P, N) :: B

Attention qu'en l'état il n'y a aucune garantie sur les valeurs présentes dans ces matrices, on peut les initialiser ainsi:

A = 0
B = 0

ou, pour leur donner pour valeur des entiers croissants:

A = reshape((/(real(i), i=1,M*P)/), shape(A))
B = reshape((/(real(i), i=1,P*N)/), shape(A))

$$ A = \begin{bmatrix} 1&2\\ 3&4\\ 5&6\\ 7&8\\ \end{bmatrix}, B= \begin{bmatrix} 1&2&3\\ 4&5&6\\ \end{bmatrix} $$

Accès aux éléments

Pour accéder aux éléments, la notation est la suivante: pour accéder à \(a_{ij}\) et lui assigner la valeur 3.14

A(i, j) = 3.14

On peut également accéder à plein d'éléments en même temps, par exemple:

A(1:2, :) = 0.0 

Va donner à \(A\) la valeur suivante, mettant les lignes de 1 à 2 à zéro: $$ A = \begin{bmatrix} 0&0\\ 0&0\\ 5&6\\ 7&8\\ \end{bmatrix} $$ On peut également sauter des lignes ainsi, allant de 1 à 4 par pas de 2, nous mettons les lignes 1 et 3 à zéro:

A(1:4:2, 1) = 0.0 

$$ A = \begin{bmatrix} 0&2\\ 3&4\\ 0&6\\ 7&8\\ \end{bmatrix} $$ Les possibilités sont nombreuses, le widget ci-dessous vous permet de les tester:

integer , dimension( , ) :: A
A() = ...

Appuyez sur Enter pour valider.

Accès avancé

A côté de ces accès, il est également possible de modifier des éléments répondant à une condition. Par exemple, passons à zéro les éléments inférieurs à 3.0:

where (A > 3.0) A = 0

$$ A = \begin{bmatrix} 1&2\\ 3&0\\ 0&0\\ 0&0\\ \end{bmatrix} $$

Cette clause where évite de devoir coder les boucles et conditions nécessaire pour effectuer la même opération. On peut lui annexer une clause elsewhere de la manière suivante pour modifier les éléments non correspondants:

where (A > 3.0)
    A = 0.0
elsewhere
    A = 1.0
end where

$$ A = \begin{bmatrix} 1&1\\ 1&0\\ 0&0\\ 0&0\\ \end{bmatrix} $$

Une proposition telle que \(A> 3.0\) se nomme mask, il s'agit d'un tableau conforme à \(A\) comprenant des valeurs logiques. Dans notre cas, la valeur logique de chaque élément de \(A\) correspond aux résultat de l'opération logique \(A_{ij} > 3\).

Fonctions élémentaires

Les fonctions intrinsèques de fortran telles que sin peuvent être appliquées aux tableaux comme aux scalaires. Dans le cas d'un tableau en argument, la fonction est appliquée terme par terme.

Afin d'obtenir ce comportement, il faut ajouter le mot clé elemental à la définition:

elemental real function my_cosh(x) result(y)
    real :: x
    y = (exp(x) + exp(-x))/2.0
end function

Elles pourra donc être employée ainsi

real, dimension(20) :: x, y
x = (/((i-1)*3.14/19.,i=1,20)/) ! x in [0, pi]
y = my_cosh(x)

home