Fortran - Modules
Un module est comme un package dans lequel vous pouvez conserver vos fonctions et sous-programmes, au cas où vous écrivez un très gros programme, ou vos fonctions ou sous-programmes peuvent être utilisés dans plusieurs programmes.
Les modules vous permettent de diviser vos programmes entre plusieurs fichiers.
Les modules sont utilisés pour -
Emballage des sous-programmes, des données et des blocs d'interface.
Définition de données globales pouvant être utilisées par plusieurs sous-programmes.
Déclarer des variables qui peuvent être rendues disponibles dans toutes les routines de votre choix.
Importer un module entièrement, pour utilisation, dans un autre programme ou sous-programme.
Syntaxe d'un module
Un module se compose de deux parties -
- une partie de spécification pour la déclaration des déclarations
- a contient une partie pour les définitions de sous-programmes et de fonctions
La forme générale d'un module est -
module name
[statement declarations]
[contains [subroutine and function definitions] ]
end module [name]
Utilisation d'un module dans votre programme
Vous pouvez incorporer un module dans un programme ou sous-programme par l'instruction use -
use name
Veuillez noter que
Vous pouvez ajouter autant de modules que nécessaire, chacun sera dans des fichiers séparés et compilé séparément.
Un module peut être utilisé dans différents programmes.
Un module peut être utilisé plusieurs fois dans le même programme.
Les variables déclarées dans une partie de spécification de module, sont globales au module.
Les variables déclarées dans un module deviennent des variables globales dans tout programme ou routine où le module est utilisé.
L'instruction use peut apparaître dans le programme principal, ou dans tout autre sous-programme ou module qui utilise les routines ou les variables déclarées dans un module particulier.
Exemple
L'exemple suivant illustre le concept -
module constants
implicit none
real, parameter :: pi = 3.1415926536
real, parameter :: e = 2.7182818285
contains
subroutine show_consts()
print*, "Pi = ", pi
print*, "e = ", e
end subroutine show_consts
end module constants
program module_example
use constants
implicit none
real :: x, ePowerx, area, radius
x = 2.0
radius = 7.0
ePowerx = e ** x
area = pi * radius**2
call show_consts()
print*, "e raised to the power of 2.0 = ", ePowerx
print*, "Area of a circle with radius 7.0 = ", area
end program module_example
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
Pi = 3.14159274
e = 2.71828175
e raised to the power of 2.0 = 7.38905573
Area of a circle with radius 7.0 = 153.938049
Accessibilité des variables et des sous-programmes dans un module
Par défaut, toutes les variables et sous-programmes d'un module sont mis à disposition du programme utilisant le code du module, par le use déclaration.
Cependant, vous pouvez contrôler l'accessibilité du code du module à l'aide du private et publicles attributs. Lorsque vous déclarez une variable ou un sous-programme comme privé, il n'est pas disponible en dehors du module.
Exemple
L'exemple suivant illustre le concept -
Dans l'exemple précédent, nous avions deux variables de module, e et pi. Rendons-les privés et observons la sortie -
module constants
implicit none
real, parameter,private :: pi = 3.1415926536
real, parameter, private :: e = 2.7182818285
contains
subroutine show_consts()
print*, "Pi = ", pi
print*, "e = ", e
end subroutine show_consts
end module constants
program module_example
use constants
implicit none
real :: x, ePowerx, area, radius
x = 2.0
radius = 7.0
ePowerx = e ** x
area = pi * radius**2
call show_consts()
print*, "e raised to the power of 2.0 = ", ePowerx
print*, "Area of a circle with radius 7.0 = ", area
end program module_example
Lorsque vous compilez et exécutez le programme ci-dessus, il donne le message d'erreur suivant -
ePowerx = e ** x
1
Error: Symbol 'e' at (1) has no IMPLICIT type
main.f95:19.13:
area = pi * radius**2
1
Error: Symbol 'pi' at (1) has no IMPLICIT type
Depuis e et pi, les deux sont déclarés privés, le programme module_example ne peut plus accéder à ces variables.
Cependant, d'autres sous-programmes de module peuvent y accéder -
module constants
implicit none
real, parameter,private :: pi = 3.1415926536
real, parameter, private :: e = 2.7182818285
contains
subroutine show_consts()
print*, "Pi = ", pi
print*, "e = ", e
end subroutine show_consts
function ePowerx(x)result(ePx)
implicit none
real::x
real::ePx
ePx = e ** x
end function ePowerx
function areaCircle(r)result(a)
implicit none
real::r
real::a
a = pi * r**2
end function areaCircle
end module constants
program module_example
use constants
implicit none
call show_consts()
Print*, "e raised to the power of 2.0 = ", ePowerx(2.0)
print*, "Area of a circle with radius 7.0 = ", areaCircle(7.0)
end program module_example
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
Pi = 3.14159274
e = 2.71828175
e raised to the power of 2.0 = 7.38905573
Area of a circle with radius 7.0 = 153.938049