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 en f 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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow