Curso de posgrado dictado en la
Facultad de Ciencias Astronómicas y Geofísicas de la
Universidad Nacional de La Plata.
Al igual que un lenguaje humano cambia en el tiempo de acuerdo a sus necesidades, los lenguajes de programación adquieren nuevas características conforme la arquitectura y capacidad de las computadoras evolucionan. Fortran, siendo el primer lenguaje de programación de alto nivel, no está exento de ello y en el transcurso de más de sesenta años desde su creación, en cada revisión del lenguaje ha ido adquiriendo tales características, lo cual ha permitido que siga siendo uno de los lenguajes preferidos para la computación de alto rendimiento. En este curso introduciremos tales características, haciendo énfasis en una programación estructurada y modular e incorporando conceptos de la programación orientada a objetos y la programación en paralelo.
Unidad 1: Fortran en el siglo XXI
Lenguajes de programación compilados vs. interpretados. Historia y evolución del lenguaje Fortran. Compiladores. Sentencias obsoletas y refactorización. La comunidad de software abierto en el siglo XXI.
Unidad 2: Representación de los números en la computadora.
Unidades de medida de la memoria. Longitud de palabra. Representación binaria de complemento a 2 de enteros. Representación de números reales con el sistema de punto flotante. Aritmética en el sistema de punto flotante. Norma IEEE754 de precisión simple, doble y cuádruple. Precisión en Fortran. Portabilidad. Sistema de punto flotante extendido. Aritmética de no detención.
Unidad 3: Elementos básicos del lenguaje.
Tipos de datos simples: lógicos, caracteres, numéricos (enteros, reales, complejos). Constantes y variables, constantes con nombres. Asignaciones. Operaciones aritméticas, relacionales y lógicas. Funciones intrínsecas. Programación estructurada.
Estructuras de control secuencial, de selección e iteración. Entrada y salida de datos. Archivos.
Unidad 4: Arreglos.
Declaración de arreglos. Asignación estática y dinámica de arreglos. Segmentation fault. Orden. Constructores. Manipulación de arreglos como un todo o en porciones. Funciones intrínsecas para arreglos. Entrada y salida de arreglos.
Unidad 5: Modularización.
Subprogramas en Fortran. Funciones y subrutinas. Subprogramas intrínsecos, externos, internos. Interfaz explícita vía módulos. Recursión. Pasando arreglos en subprogramas. Funciones que devuelven arreglos. Pasando subprogramas como argumentos de otro subprograma (callbacks). Interfaces abstractas. Argumentos opcionales. Creación de bibliotecas de subprogramas (librerías)
Unidad 6: Programación con tipos de datos derivados.
Tipo de datos derivados. Encapsulación. Subprogramas genéricos. Redefinición de operadores. Tipo de datos parametrizados.
Unidad 7: Programación orientada a objetos.
Conceptos generales de la programación orientada a objetos. Clases y métodos. Extensión de clases, herencia y polimorfismo.
Unidad 8: Programación en paralelo.
Conceptos generales de la programación en paralelo. OpenMP. Message Passing con MPI. Coarrays.
Bibliografía
- Chapman, Stephen J., Fortran for Scientists and Engineers, Fourth Edition, 2018.
- Metcalf, M., Reid J., Cohen, M., Modern Fortran explained, 2018.
- Markus, Arjen, Modern Fortran in Practice, 2012.
- Clerman, N., Spector W., Modern Fortran, Style and Usage, 2012.
- Hanso, Richard J., Hopkins, Tim, Numerical Computing with Modern Fortran, 2013
- Curcic, Milan, Modern Fortran, 2020.
- Numrich, Robert W., Parallel Programming with Co-arrays, 2019.