Pasé los últimos meses codificando un programa Fortran para resolver un sistema PDE particular (describe el flujo / combustión de fluidos). Intenté usar Fortran de última generación y las nuevas capacidades de OOP que tiene Fortran moderno. Estoy trabajando solo y no tengo un gurú de Fortran a mi lado para hacer preguntas, por lo que una forma natural de aprender para mí sería mirar otras bibliotecas / solucionadores que usan Fortran moderno.
Desafortunadamente, todas las bibliotecas de Fortran parecen estar escritas en tapas bastante antiguas de Fortran, Fortran90. Por lo tanto, tuve que pensar en el diseño de clase y la interacción yo mismo. Y no estoy del todo seguro de haberlo hecho bien, especialmente si se mira desde una perspectiva de rendimiento. ¿Pero quizás me he perdido algo y hay paquetes científicos modernos escritos si Fortran y usando OOP?
Hay muchas buenas bibliotecas de C ++ para aprender (OpenFOAM, deal.II y más) y también bibliotecas de Python. Esos idiomas tienen una comunidad más grande en general también. ¿Quizás sea mejor dejar Fortran y cambiar de idioma si quiero aprender con el ejemplo?
Respuestas:
Existen códigos CFD modernos en los que puede examinar. Por ejemplo ...
Fluidez : código CFD multifase (FE) de uso general; Incluso lo hace AMR totalmente desestructurado
WRF : sistema numérico de predicción meteorológica de próxima generación de NCAR
Código Saturne : Código CFD (FV) de uso general; Algunas características enumeradas en Wikipedia
Existen códigos Fortran modernos similares para el análisis estructural.
Pero es posible que no utilicen las capacidades completas de F2003 debido a la falta de soporte generalizado del compilador. La mayoría de los nuevos compiladores admiten grandes partes de F2003 (consulte los documentos del Foro ACM SIGPLAN Fortran), pero lleva tiempo tener una amplia base de usuarios. Debian estable, por ejemplo, tiene GCC 4.4.5, por lo que, en general, no debe esperar que sus usuarios tengan algo mejor (es decir, 4.5 / 4.6 / 4.7).
Cuando los compiladores de F2003 se generalicen, verá libs / código que utilizan las capacidades de F2003.
Por ahora puedes mirar este libro de Damian Rouson sobre cómo usar las capacidades de OOP.
fuente
Si desea aprender con el ejemplo, le recomendaría rosettacode , un sitio de programación para la escasez. Allí puede encontrar muchos ejemplos de problemas escritos comparativamente en varios idiomas diferentes.
Quizás aún más interesante para usted sería Fortran wiki , y aquí hay una sección sobre OOP en Fortran que podría ser útil.
Fortan está bien, ¡no nos demos por vencidos!
fuente
Estoy de acuerdo con el comentario de @JackPoulson. No conozco ninguna biblioteca de código abierto escrita en Fortran moderno. Entonces, la respuesta a su pregunta específica sobre la necesidad de cambiar a C ++ para aprender con el ejemplo es un desafortunado "sí". Pero, para ser claros, sé que existe al menos una biblioteca que se escribió casi exclusivamente en el Fortran moderno con miras a OOP, por lo que es posible (y vale la pena). Sin embargo, esta biblioteca no es de código abierto, por lo que no lo ayudará a alcanzar su objetivo de aprendizaje.
Sin embargo, también es probable que seas reacio a tirar lo que ya has completado. Si todavía está interesado en buscar Fortran para esto y tiene preguntas específicas de desarrollo, le animo a que las haga en StackOverflow. Hay algunos desarrolladores de Fortran altamente calificados que están más que felices de ayudar.
fuente
Llego un poco tarde en este caso, pero debería echar un vistazo a la versión 3 de la biblioteca de álgebra lineal paralela PSBLAS , que aprovecha al máximo las características modernas de Fortran, como la herencia y el polimorfismo. También hay un papel aquí. donde compararon el rendimiento de esa versión con sus versiones anteriores, que se apegaron a F90 / F95. Sorprendentemente, la diferencia de velocidad fue insignificante en general.
fuente
No sé en qué dialecto de Fortran está escrito, pero hay un código PHAML de William Mitchell que es un código FEM de Fortran de uso general.
Admitiré que no soy imparcial en la discusión de Fortran vs C ++, pero me gustaría señalar que tiene dificultades para encontrar un código FEM moderno basado en Fortran y al mismo tiempo encontrar una gran cantidad de códigos basados en C ++. algo de lo que piensa la comunidad en su conjunto es el camino a seguir. Por supuesto, no hay nada de malo en intentar construir su propio código en un idioma que le guste y con el que esté familiarizado, pero su breve encuesta ya le muestra que está construyendo una isla. Es posible que desee tener eso en cuenta.
fuente
Existe la biblioteca de código abierto para fortran forDat by ffr Engineering que utiliza características de oop 2003
fuente