Aprendiendo Fortran

9

Me preguntaba cuál es la mejor manera de aprender a programar en Fortran.

He estado buscando libros, los ejemplos que me parecieron bien fueron "Explicado Fortran 95/2003" y "Fortran para científicos e ingenieros" .

No sé qué piensan ustedes de esto.

Otra cosa que me pregunto es qué compilador debo usar. Trabajo en una máquina con Windows 7 (64 bits).

¡Espero que me puedan ayudar en esto!

Entonces, por mi experiencia con la programación:

  1. Matlab y maple fueron amables en mis primeras introducciones en el mundo de la programación. Matlab es un programa en el que en realidad soy bastante bueno, me acostumbré a trabajar con bucles y cómo combinarlos para hacer programas más eficientes. Maple está más en la fase básica (sé cómo buscar la solución para integrales simples, etc.).
  2. Un año después recibimos una introducción a C ++ en Visual Basic. El profesor en realidad fue rápido en este caso, después de 2 meses ya estábamos discutiendo consejos y herencia. Puedo escribir programas simples en este idioma, solo trabajar con clases es algo que sigue siendo una dificultad, pero creo que es solo una cuestión de práctica.
  3. Y un año después, necesitaba aprender Mathematica 8, en el que también me estoy volviendo muy bueno hoy en día.

Así que tengo un poco de experiencia en programación, ¡pero no diré que es una cantidad increíble!

La razón por la que quiero aprender Fortran se debe principalmente a que no puedes hacer física teórica por sí solo, debes probar tus teorías y para eso necesitarás poder escribir programas que puedan probar esas teorías numéricamente. Escuché que Fortran es un tipo de lenguaje poco útil cuando se trata de matemáticas numéricas, así que creo que sería útil conocer este idioma.

PD: ¿cuál es la diferencia entre Fortran95 y Fortran 2003?

Mella
fuente
3
¿Puedes ser un poco más específico en cuanto a de dónde vienes y a dónde quieres ir? ¿Ya sabes cómo programar, es decir, qué otros lenguajes de programación conoces? ¿Y qué quieres hacer en Fortran?
Pedro
Sí, tal vez debería haberlo mencionado en mi pregunta, permítame editar :) @Pedro
Nick
1
Sé que no responde la pregunta, pero tengo que recomendar encarecidamente que use Python sobre Fortran si no tiene necesidades de rendimiento específicas como principiante. Tendrás menos dolores de cabeza al lidiar con las matemáticas y la teoría, ya que Python te gritará menos. También tiene paquetes increíbles que hacen que muchas matemáticas numéricas sean muy simples (busque SciPy, Numpy, Matplotlib). Esas herramientas hacen que Python sea muy similar a MATLAB en su uso, pero también tiene un lenguaje completo para construir un buen software como ewll. Sin mencionar que es de código abierto.
hablado el
1
Fortran 95 también es similar a Matlab y un estándar ISO. Mucha gente que usa Python escribe núcleos computacionalmente pesados ​​en C / C ++ (incluso Fortran), lo que significa que ahora tiene que aprender no uno sino dos idiomas. Uno por rendimiento y el otro por conveniencia / facilidad de uso.
stali

Respuestas:

4

Voy a la segunda recomendación de stali del libro de Chapman. Aprendí del libro Fortran 90 de Chapman, y fue muy útil. Te enseñará el idioma Fortran. No le enseñará sobre buenos flujos de trabajo para la programación, y para eso, debe buscar en otro lado después de haber aprendido algo de Fortran y haber programado un poco.

La mayoría de los recursos en línea para ayudarlo con la programación de Fortran estarán basados ​​en Linux. Del mismo modo, en ciencia computacional, la mayoría de los materiales escritos se orientarán a los usuarios de Linux. Por esa razón, le recomiendo que instale VirtualBox (o algún tipo de software que le permita ejecutar sistemas operativos virtuales) y luego instale alguna distribución de Linux allí. Si nunca antes ha usado Linux, una distribución fácil de usar como Ubuntu, Mint o Fedora probablemente sea su mejor opción. Estas distribuciones requieren una cantidad mínima de configuración si se ejecutan en un entorno virtual y tienen una buena GUI para ayudarlo a navegar por el sistema operativo. Cada una de estas distribuciones tiene un administrador de paquetes que puede usar para instalar algún software adicional. Usando el administrador de paquetes, puede instalar gfortran.

Querrá desarrollar software en un editor de texto (o un IDE), por lo que probablemente valga la pena aprender los conceptos básicos de la línea de comandos. La carpintería de software tiene buenos recursos para esta tarea. (Descargo de responsabilidad: he enseñado parte de un taller para Carpintería de software). Entonces debería poder seguir aprendiendo a escribir programas simples y compilarlos en la línea de comandos, y luego aprender a usar Makefile.

El problema con hacer cualquier cosa basada en Windows es que la mayoría de los materiales en línea que verá al hacer ciencia computacional van a suponer que está usando Linux, y el consejo (si fue bueno para empezar) se romperá abajo, y te cuesta tiempo. Cygwin es una capa de API que agrega más funcionalidades similares a Linux, pero la correspondencia con Linux no es perfecta, y el software compilado para Linux no funcionará en su máquina; aún necesitará obtener versiones nativas de Windows o volver a compilar el software para Windows. Un compilador de Fortran nativo de Windows como Visual Fortran costará dinero, y todavía tendrá el problema de que la mayoría de los usuarios de Fortran y los científicos computacionales usan Linux para su desarrollo de software, lo que significa que tendrá que avanzar en su propio. Sin embargo, si realmente necesitasdistribuir software basado en Windows por alguna razón, entonces tiene sentido hacer todo el esfuerzo para descubrir cómo usar algo como Visual Fortran.

Geoff Oxberry
fuente
¡Gracias por el consejo! Pero me pregunto, en lugar de una máquina virtual, ¿no podría crear algún tipo de mecanismo de arranque dual en el que pueda elegir si primero inicio Windows7 o Linux Ubuntu? ¡Creo que de hecho podría ahorrarme mucho tiempo! Y si tuviera que ir a Windows, ¡tendré la experiencia de programación de la versión de Linux que me permite seguir los pasos en Windows mucho más rápido!
Nick
Podrías, si así lo deseas. Creo que la configuración de arranque dual es menos flexible y requiere más conocimiento técnico y tiempo (puede que tenga que cambiar el tamaño de las particiones, configurar un cargador de arranque de la manera correcta, etc.). También creo que las máquinas virtuales son más fáciles de migrar a una nueva máquina, lo que puede ser útil si desea compartir su trabajo con un colega, o si adquiere una nueva computadora y desea migrar todo su trabajo allí.
Geoff Oxberry
Finalmente encontré algo de tiempo para seguir todos los pasos necesarios. Tengo VirtualBox y tengo Linux (Ubuntu) instalado. ¿Ahora me preguntaba cuál podría ser el mejor compilador? Parece que no puedo encontrar mucho en línea sobre esa parte: s. ¿Escuché a alguien decir gfortran?
Nick
2
gfortran es gratis, y probablemente el camino de menor resistencia. La mayoría de los otros compiladores requieren comprar una licencia, con posibles excepciones para uso personal o académico. (Sé que el compilador de Intel se puede descargar y usar para uso personal solo de forma gratuita, por ejemplo; tendrá que leer las licencias para obtener más detalles). HighPerformanceMark vinculado a un sitio web que tiene comparaciones de rendimiento para compiladores.
Geoff Oxberry
6

Creo que el libro de Metcalfe es una buena guía anotada de las características modernas de Fortran, muy útil si ya conoce una versión anterior del idioma pero no es una buena introducción a la programación en el idioma.

Por mi dinero, el libro Chiver's y Sleightholme y el libro Brainerd son lo suficientemente buenos, aunque no creo que ninguno sea tan bueno como el libro de Ellis et al que, desafortunadamente, no se ha actualizado para Fortran 2003 o posterior.

Tengo una fuerte aversión al libro de Chapman. No recuerdo por qué no me gustó tanto la edición 90/95, así que ya no puedo justificar esta aversión, puedes descartarla como un prejuicio.

Pero el único libro que recomiendo sin dudarlo es el libro de Arjen Markus . Probablemente no sea una introducción ideal para alguien que todavía está tratando de descubrir las características básicas del lenguaje, pero una vez que las domine, vale la pena su peso en alguna sustancia valiosa.

En cuanto a qué compilador usar, utilizo el compilador Intel y, en general, estoy contento con él. Se integra con Visual Studio, que puede ser importante para usted. El compilador NAG tiene mejores mensajes de error y advertencia pero produce ejecutables más lentos (generalmente y su experiencia puede diferir). El compilador de gfortran es gratuito y recibe buenas críticas, pero no lo uso. Si quieres saber más, Polyhedron te lo dirá.

Marca de alto rendimiento
fuente
El libro de Markus tiene un gran TOC.
AlexE
Sí, el libro de Markus parece un gran libro, así que definitivamente lo consideraré. Para el compilador solo necesito algo con ejecutables rápidos (no se necesita integración con Visual Studio).
Nick
Creo que el compilador Intel generalmente se considera rápido.
AlexE
3

Para los libros, recomiendo "Modern Fortran Explained" de Metcalf / Reid / Cohen. Es más una referencia que un libro de texto, pero le servirá bien si ya tuvo alguna exposición a la programación en general (con digamos C).

Además de ese libro, recomiendo el sitio web de Ondřej Čertík http://fortran90.org/ . En primer lugar, no le enseñará Fortran, pero le proporcionará un conjunto de mejores prácticas. Fortran permite varias formas de programación: después de todo, es compatible con versiones anteriores. Las mejores prácticas que se ofrecen allí lo ayudarán a desarrollar un estilo Fortran moderno y consistente. Además, las preguntas frecuentes encontradas allí serán de su interés.

AlexE
fuente
2
Elegido a favor de la página de mejores prácticas de F90, eso también fue muy útil para mí.
Daniel Shapero
2

El libro de Chapmans creo que es más amigable para los novatos y una buena referencia. Los autores del segundo son todos expertos, pero creo que el libro será una buena adición a su biblioteca en una etapa posterior.

Para comenzar, te sugiero que te quedes con Fortran 95 y luego (si es necesario) te mudes a Fortran 2003. Fortran 95 es fácil de aprender (casi como Matlab) y serás productivo muy rápidamente.

En Linux tiene una serie de compiladores Fortran gratuitos (GNU, Solaris Studio, Open64, etc.) además de un conjunto más rico de herramientas, por ejemplo, valgrind, gdb, gnuplot, (para visualización rápida), svn / hg, etc. Instalación adicional de paquetes precompilados que incluyen bibliotecas numéricas (blas / lapack / netcdf / fftw, etc.) están a un comando de distancia (al menos en Debian con apt-get).

En Windows, podría ser mejor con cygwin, ya que le brinda un acceso fácil y rápido a algunas de las herramientas / bibliotecas anteriores, además del compilador GNU Fortran. Entonces sí, vaya a cygwin.com e instale el paquete principal junto con gfortran y un editor de elección (vim es bueno). Eso debería ser un buen comienzo. Más tarde, si tiene algo más, sugeriría usar el paquete apt-cyg para instalar cosas.

stali
fuente
1
No recomiendo vim (o, para el caso, emacs) como primer editor de texto. Hay demasiadas características esenciales (cortar, copiar, pegar, buscar, buscar / reemplazar) que involucran combinaciones de teclas no intuitivas para usarlo como primer editor de texto, y todos esos pasos extra y desconocidos que un nuevo alumno tiene que tomar para hacer algo simple es a la vez desalentador y distrae de lo que sea que estén tratando de hacer (que, si está recomendando un editor de texto, probablemente sea una forma de desarrollo de software).
Geoff Oxberry
1
Como primer editor, recomiendo una herramienta que tenga la capacidad de ser el único editor que necesite, no uno que supere en 3 semanas, 3 meses o incluso 3 años. Por esa razón, tanto Emacs como Vim son primeros editores adecuados. Claro que podrían tener una curva de aprendizaje inicialmente más pronunciada que otras, pero muchos programadores han pagado ese precio y han encontrado que las recompensas valen la pena.
Marca de alto rendimiento
Su comentario establece una opción falsa: aprenda vim / emacs y tenga un editor que pueda usar de por vida, a pesar de la curva de aprendizaje empinada, o use alguna otra herramienta inferior fácil de aprender que superará. Muchos programadores profesionales usan otras herramientas con curvas de aprendizaje menos pronunciadas, como gedit, Sublime Text, TextMate, TextWrangler y otras, y se llevan muy bien. Vim y emacs son excelentes editores, utilizo ambos, pero no son las únicas opciones claramente superiores para la programación (WolfgangBangerth también es un buen caso para los IDE).
Geoff Oxberry