Fortran
Unidades de programa y diseño de archivos.
Buscar..
Programas de fortran
Un programa completo de Fortran se compone de varias unidades de programa distintas. Las unidades del programa son:
- programa principal
- función o subprograma de subrutina
- módulo o submódulo
- unidad de programa de datos de bloque
El programa principal y algunos subprogramas de procedimiento (función o subrutina) pueden ser proporcionados por un idioma que no sea Fortran. Por ejemplo, un programa principal de C puede llamar a una función definida por un subprograma de funciones de Fortran, o un programa principal de Fortran puede llamar a un procedimiento definido por C.
Estas unidades del programa Fortran pueden ser archivos distintos o dentro de un solo archivo.
Por ejemplo, podemos ver los dos archivos:
prog.f90
program main
use mod
end program main
mod.f90
module mod
end module mod
Y el compilador (invocado correctamente) podrá asociar el programa principal con el módulo.
El único archivo puede contener muchas unidades de programa
todo.f90
module mod
end module mod
program prog
use mod
end program prog
function f()
end function f()
En este caso, sin embargo, debe tenerse en cuenta que la función f
sigue siendo una función externa en lo que respecta al programa principal y el módulo. Sin embargo, el programa principal estará accesible para el módulo.
Las reglas de alcance de escritura se aplican a cada unidad de programa individual y no al archivo en el que están contenidas. Por ejemplo, si queremos que cada unidad de alcance no tenga una escritura implícita, el archivo anterior debe escribirse como
module mod
implicit none
end module mod
program prog
use mod
implicit none
end program prog
function f()
implicit none
<type> f
end function f
Módulos y submódulos.
Los módulos están documentados en otra parte .
Los compiladores a menudo generan los llamados archivos de módulo : generalmente el archivo que contiene
module my_module
end module
resultará en un archivo llamado algo así como my_module.mod
por el compilador. En tales casos, para que un módulo sea accesible por una unidad de programa, ese archivo de módulo debe estar visible antes de que se procese esta última unidad de programa.
Procedimientos externos
Un procedimiento externo es uno que se define fuera de otra unidad de programa, o por un medio que no sea Fortran.
La función contenida en un archivo como
integer function f()
implicit none
end function f
Es una función externa.
Para procedimientos externos, su existencia se puede declarar utilizando un bloque de interfaz (para una interfaz explícita)
program prog
implicit none
interface
integer function f()
end interface
end program prog
o por una declaración de declaración para dar una interfaz implícita
program prog
implicit none
integer, external :: f
end program prog
o incluso
program prog
implicit none
integer f
external f
end program prog
El atributo external
no es necesario:
program prog
implicit none
integer i
integer f
i = f() ! f is now an external function
end program prog
Bloquear unidades de programa de datos.
Las unidades de programa de datos de bloque son unidades de programa que proporcionan valores iniciales para objetos en bloques comunes. Estos se dejan deliberadamente sin documentar aquí, y aparecerán en la documentación de las características históricas de Fortran.
Subprogramas internos
Una unidad de programa que no es un subprograma interno puede contener otras unidades de programa, llamadas subprogramas internos .
program prog
implicit none
contains
function f()
end function f
subroutine g()
end subroutine g
end program
Dicho subprograma interno tiene una serie de características:
- existe una asociación de host entre las entidades en el subprograma y el programa externo
- las reglas de escritura implícitas se heredan (
implicit none
está vigente enf
arriba) - Los subprogramas internos tienen una interfaz explícita disponible en el servidor.
Los subprogramas de módulo y los subprogramas externos pueden tener subprogramas internos, como
module mod
implicit none
contains
function f()
contains
subroutine s()
end subroutine s
end function f
end module mod
Archivos de código fuente
Un archivo de código fuente es un (generalmente) archivo de texto plano que debe ser procesado por el compilador. Un archivo de código fuente puede contener hasta un programa principal y cualquier número de módulos y subprogramas externos. Por ejemplo, un archivo de código fuente puede contener lo siguiente
module mod1
end module mod1
module mod2
end module mod2
function func1() ! An external function
end function func1
subroutine sub1() ! An external subroutine
end subroutine sub1
program prog ! The main program starts here...
end program prog ! ... and ends here
function func2() ! An external function
end function func2
Debemos recordar aquí que, aunque los subprogramas externos se encuentran en el mismo archivo que los módulos y el programa principal, los subprogramas externos no son conocidos explícitamente por ningún otro componente.
Alternativamente, los componentes individuales pueden estar distribuidos en múltiples archivos, e incluso compilados en diferentes momentos. La documentación del compilador debe leerse sobre cómo combinar varios archivos en un solo programa.
Un solo archivo de código fuente puede contener un código fuente de forma fija o de forma libre: no se pueden mezclar, aunque varios archivos que se combinan en tiempo de compilación pueden tener diferentes estilos.
Para indicar al compilador el formulario de origen, generalmente hay dos opciones:
- elección del nombre de archivo sufijo
- uso de banderas del compilador
El indicador de tiempo de compilación para indicar el origen de forma libre o fija se puede encontrar en la documentación del compilador.
Los sufijos de nombre de archivo significativos también se encuentran en la documentación del compilador, pero como regla general, se considera que un archivo llamado file.f90
contiene una fuente de forma libre, mientras que el archivo file.f
contiene una fuente de forma fija.
El uso del sufijo .f90
para indicar la fuente de forma libre (que se introdujo en el estándar Fortran 90) a menudo tienta al programador a usar el sufijo para indicar el estándar de idioma con el que se ajusta el código fuente. Por ejemplo, podemos ver archivos con sufijos .f03
o .f08
. Esto generalmente debe evitarse: la mayoría de las fuentes de Fortran 2003 también son compatibles con Fortran 77, Fortran 90/5 y Fortran 2008. Además, muchos comilers no consideran automáticamente tales sufijos.
Los compiladores también suelen ofrecer un preprocesador de código incorporado (generalmente basado en cpp). Una vez más, se puede usar un indicador de tiempo de compilación para indicar que el preprocesador debe ejecutarse antes de la compilación, pero el sufijo del archivo de código fuente también puede indicar dicho requisito de preprocesamiento.
Para los sistemas de archivos que file.F
mayúsculas y minúsculas, el archivo file.F
menudo se toma como un archivo fuente de forma fija que debe file.F90
previamente y file.F90
es un archivo fuente de forma libre que debe file.F90
previamente. Como antes, se debe consultar la documentación del compilador para dichos indicadores y sufijos de archivos.