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
DO
bucles yIF
sentencias. 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 f2c
funcionará, 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.