¿Hay bibliotecas científicas de código abierto que usan Fortran moderno con OOP?

14

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?

tiam
fuente
Jack, parece que tu comentario fue demasiado grande: "(El resto de este comentario es para cumplir con el requisito de longitud)". Eso genera esperanza en mí, así que edítelo para que todos puedan leerlo: D.
tiam
2
Lo siento, mi comentario fue engañoso, ya que estaba respondiendo su última pregunta. Quiero decir que, si quieres aprender OOP moderno por ejemplo de bibliotecas completas, C ++ es el camino a seguir. Lo siento; No conozco ninguna de las mejores bibliotecas Fortran modernas de código abierto.
Jack Poulson
66
Advierto que C ++ ya es una especie de encarnación retorcida de la orientación a objetos, y muchas bibliotecas lo usan mal (es cierto para cualquier lenguaje). Estoy de acuerdo en que es importante mirar más allá de Fortran, pero también es importante mirar más allá de C ++. Aprender a expresar conceptos en lenguajes de varios tipos diferentes (orientado a objetos, genérico y funcional; estático y dinámico) valdrá la pena incluso si regresa a un lenguaje simple como C para su trabajo "real".
Jed Brown

Respuestas:

10

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.

stali
fuente
Así es, F2003 se está poniendo al día recientemente (para mi propia biblioteca, decidí seguir con F95 para una portabilidad máxima). Pronto veremos más códigos escritos en F2003 o incluso F2008.
Ondřej Čertík
Muy buen punto. Espero que veamos más código nuevo estándar en los próximos años.
tiam
Damian Rouson trabaja en ForTrillinos , que es una interfaz moderna de Fortran para el Proyecto Trillinos .
Jeremy Kozdon
7

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!

John Travolta
fuente
Me gusta Fortran yo mismo :). Conozco el sitio web wiki, los libros de Matcalds también son muy buenos, así como los tutoriales de PGI. ¡Pero ver algo de material real sería bueno!
tiam
El estilo de codificación del código dolfyn CFD es realmente completo y "moderno alfabetizado en Fortran". Allí puede encontrar ejemplos de algunas estructuras de datos, como listas vinculadas, etc., que pueden ser informativas y un poco de POO si no recuerdo mal.
Johntra Volta
4

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.

Barron
fuente
3

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.

Daniel Shapero
fuente
1

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.

Wolfgang Bangerth
fuente
-1

Existe la biblioteca de código abierto para fortran forDat by ffr Engineering que utiliza características de oop 2003

Felix Frischmann
fuente
1
Bienvenido a SciComp! Su respuesta no es realmente útil, ya que no describe a) qué hace forDat yb) qué características de OOP usa paraDat. También está perdiendo una oportunidad aquí, ya que en cuanto al desarrollador deDat (que debe revelar, por cierto, consulte scicomp.stackexchange.com/help/behavior ), también podría mencionar por qué forDat está usando esas funciones.
Christian Clason