¿Existe alguna herramienta que pueda generar extensiones de intervalo de las funciones Fortran (o C) al analizar el código Fortran (o C)?

13

Los estudios de caso en mi tesis doctoral requieren que tenga extensiones de intervalo de subrutinas Fortran en CHEMKIN-II (disculpas por el enlace; es el mejor que pude encontrar para un paquete que Sandia National Laboratory ya no distribuye). CHEMKIN-II es un paquete químico usado en química de combustión; Como es el paquete estándar utilizado en la combustión, no puedo (o más bien preferiría no hacerlo) usar un paquete diferente.

Para obtener las extensiones de intervalo requeridas, he estado usando una herramienta desarrollada internamente llamada DAEPACK. Los viejos binarios que solía generar las extensiones de intervalo requeridas de las subrutinas CHEMKIN-II que necesitaba en un SO de 32 bits (con una versión de libstdc correspondiente a gcc 2.95) hace un par de años, pero desde entonces se han caído de fecha, y sería una experiencia tremenda de usar (porque tendría que encontrar versiones de 32 bits de cualquier otra pieza de software que use). El código fuente de este paquete también es propietario, pero como se desarrolló originalmente en MIT y trabajo en MIT, pude (después de un gran esfuerzo) obtener el código fuente de DAEPACK. Utilizando el código fuente que tengo, pude compilar una versión de DAEPACK compatible con las versiones de Linux de 64 bits y las versiones de libstdc correspondientes a gcc 4.xx Sin embargo, este código fuente, que sospecho que es antiguo, compila en un ejecutable que no genera con éxito el código de extensión de intervalo que necesito para completar mi tesis. Me puse en contacto con el desarrollador en un intento de obtener su ayuda para arreglar el código fuente, pero por contacto previo con el desarrollador, sé que le llevará tiempo arreglar el código fuente, si es que lo hace.

Aquí está el gran problema: me quedan 6 meses hasta que necesito graduarme porque me quedo sin fondos. No puedo confiar en que el desarrollador arregle DAEPACK lo suficientemente rápido como para completar con éxito mi tesis doctoral, que es donde ustedes entran.

Necesito un paquete que haga lo siguiente:

  • Genera extensiones de intervalo, modelos de Taylor (usando aritmética de intervalos) y derivados de código Fortran 77 casi arbitrario; Creo que las únicas estructuras que DAEPACK no analiza son DObucles y IFsentencias. Como necesito modelos Taylor, el código también debe tener la capacidad de diferenciación automática (AD).
  • Genera estas extensiones de intervalo y modelos Taylor mediante la traducción de fuente a fuente del código Fortran 77 (es decir, analiza el código fuente como un compilador para generar el código fuente que calcula las extensiones de intervalo y los modelos Taylor).

En un apuro, puedo usar un software que hace las dos cosas anteriores al código C en lugar del código Fortran 77, y luego pasar todo f2c. Realmente preferiría no hacerlo de esta manera, porque no tengo idea de si pasar todo o no f2cfuncionará, pero estoy bastante desesperado.

¿Pueden ayudar a un estudiante de doctorado desesperado?


Para anticipar algunas posibles sugerencias, aquí hay enfoques que NO funcionarán para mí, dadas las limitaciones de tiempo:

  • Intentando más para que DAEPACK funcione; créeme, lo he intentado. Y estoy molestando al desarrollador con frecuencia.
  • Herramientas que calculan extensiones de intervalo o modelos Taylor utilizando enfoques orientados a objetos (o orientados a objetos). No tengo tiempo para recodificar CHEMKIN-II (o cualquier otra biblioteca similarmente grande) con nuevos tipos; es muy grande.
  • Usando cualquier idioma que no sea Fortran 77/90 o C. El código CHEMKIN-II está en Fortran. Puedo convertirlo a C usando f2c, o si es necesario, usar un clon basado en Sandia de CHEMKIN-II llamado TChem. Mis viejos resultados usan CHEMKIN-II; mis nuevos resultados deberían replicar mis resultados anteriores, y ya sé que Cantera no replicará lo que hace CHEMKIN-II en base a estudios de casos y pruebas unitarias. Además, el estudiante graduado que me precedió hizo algo de magia negra con el código fuente CHEMKIN-II para que la aritmética de intervalos funcionara especialmente bien. Sería difícil para mí replicar eso en cualquier otro paquete.
Geoff Oxberry
fuente
Cambia el tema de tu tesis de inmediato. Deshágase de esa tonta aritmética de intervalos y haga algo útil, idealmente con un software que funcione. ;-D
Jed Brown
66
Tomando sus resultados existentes, calcelos en una interpretación del tema de su tesis, haga una buena reseña y compre excelentes bocadillos para su comité de defensa.
Matt Knepley
F:RRF:(R,R0 0+)((R,R0 0+)F(un,si)=F([un-si,un+si])
Deathbreath
1
Se pueden encontrar descripciones básicas de la aritmética de intervalos en Wikipedia (que incluye el concepto de extensión de intervalo) y en las referencias mencionadas en esta página . La mejor introducción a los modelos Taylor que pude encontrar está aquí . La diferenciación automática se usa típicamente en la implementación de modelos Taylor; Nunca he escuchado o visto que alguien use aproximaciones numéricas en su lugar.
Geoff Oxberry
2
@MishaBrukman: Oh, acabo de criticar todo eso.
Geoff Oxberry

Respuestas:

2

Suponiendo que el problema es que DAEPACKfunciona en modo de 32 bits pero no en modo de 64 bits, aquí hay algunos enfoques para abordar esto.

Compilar DAEPACKen modo de 32 bits en un sistema operativo de 64 bits

Vea cómo hacer esto en otra pregunta . Esta puede ser una manera fácil de seguir trabajando con ella.

Si el problema es que el código generado tiene problemas en el modo de 64 bits, compile el código generado con indicadores similares de 32 bits o en un entorno de 32 bits (el sistema operativo de 64 bits puede ejecutar el código de 32 bits con las bibliotecas apropiadas, pero no viceversa ).

Recrea un DAEPACKentorno seguro completo

  1. Cree un entorno completo de 32 bits en una máquina virtual utilizando, por ejemplo, VirtualBox , de modo que DAEPACKsea ​​feliz ejecutarlo en él, ya sea desde binarios antiguos o recompilados en este entorno. Puede obtener una versión de un sistema operativo de código abierto y un compilador tan antiguo como sea necesario para obtener una versión funcional del software.

  2. Tome la salida DAEPACKy transfiérala a la máquina host o a una máquina virtual separada donde el entorno sea apropiado para el otro software y continúe trabajando. Este puede ser un sistema operativo de 64 bits más reciente, por ejemplo, y continuar trabajando allí.

    El uso de la función de carpetas compartidas en VirtualBox debería facilitarlo.

Aliste a otros para ayudar a arreglar DAEPACK

Me di cuenta de que dijiste que ni tú ni el autor del software tenían tiempo para arreglar esto, ¡pero nadie dijo que no puedes pedir la ayuda de nadie más! Considere estas opciones:

  • Contrata a algunos estudiantes universitarios de MIT CS para ayudar a solucionar los problemas de 32 bits frente a 64 bits. Tenga en cuenta que para atraerlos a trabajar en él, es posible que tenga que compensarlos, ya sea con dinero o pizza (y / o cerveza, si son mayores de edad), por ejemplo. O considere preguntar si su asesor puede contratar a algunos estudiantes universitarios a tiempo parcial para que lo ayuden con esto (puede ser un problema con la financiación, si su propia financiación se está agotando). O solicite algunos favores a los programadores de investigación de su departamento.

  • Lobby para un lanzamiento de código abierto de DAEPACK. Parece que su estado de licencia no está claro , pero tenga en cuenta que el MIT tiene una licencia homónima de código abierto que es bastante conocida; liberarlo bajo una licencia abierta puede ayudar a tener más ojos sobre el problema y ayudar a solucionar los problemas de 32 bits frente a 64 bits.

    Tenga en cuenta que, dependiendo de su departamento, las oficinas legales, administrativas, etc., pueden demorar más de los 6 meses que le quedan para su doctorado, así que considere comenzar esto temprano, mientras busca otras alternativas.

¡Buena suerte!

Misha Brukman
fuente
Después de pasar un tiempo escribiendo esta respuesta, me di cuenta de que escribió su pregunta en 2012 con un plazo de 6 meses, por lo que esta discusión es bastante discutible. ¡Lo siento por eso! Todavía tengo curiosidad por saber qué terminaste haciendo en este caso.
Misha Brukman
Durante mi doctorado, probé los tres enfoques que mencionaste sin éxito. El problema, IIRC, era que generaría código defectuoso; compilarlo (aunque fue un fastidio, porque tuve que modernizar partes de él) fue en realidad el menor de mis problemas. Es poco probable que DAEPACK sea lanzado de código abierto, ya que es la tecnología clave de una empresa. También es espinoso hacer que otras personas fuera de esa compañía y el laboratorio de mi antiguo asesor lo arreglen, y dudo que los emprendedores estudiantes de MIT CS quieran asumir ese ingrato trabajo.
Geoff Oxberry
@GeoffOxberry lamento escuchar eso, pero eso (lamentablemente) es demasiado frecuente en el llamado software de "calidad de investigación". ¡Felicidades por perseverar y completar tu título!
Misha Brukman