Os estudos de caso da minha tese de doutorado exigem que eu tenha extensões de intervalo das sub - rotinas Fortran no CHEMKIN-II (desculpas pelo link; é o melhor que eu poderia encontrar para um pacote que não é mais distribuído pelo Sandia National Laboratory). CHEMKIN-II é um pacote químico usado em química de combustão; como é o pacote padrão usado na combustão, não posso (ou melhor, realmente prefiro não) usar um pacote diferente por aí.
Para obter as extensões de intervalo necessárias, eu tenho usado uma ferramenta desenvolvida internamente chamada DAEPACK. Os binários antigos que eu costumava ser capaz de gerar as extensões de intervalo necessárias das sub-rotinas CHEMKIN-II que eu precisava em um SO de 32 bits (com uma versão do libstdc correspondente ao gcc 2.95) há alguns anos, mas caíram em desuso de data e seria uma provação tremenda de usar (porque eu precisaria encontrar versões de 32 bits de todos os outros softwares que usei). O código fonte deste pacote também é proprietário, mas como foi originalmente desenvolvido no MIT e eu trabalho no MIT, consegui (depois de muito esforço) obter o código fonte do DAEPACK. Usando o código-fonte que possuo, consegui compilar uma versão do DAEPACK compatível com as versões de 64 bits do Linux e as versões do libstdc correspondentes ao gcc 4.xx No entanto, esse código-fonte, que suspeito ser antigo, compila em um executável que não gera com êxito o código de extensão de intervalo necessário para concluir minha tese. Entrei em contato com o desenvolvedor na tentativa de obter sua ajuda para corrigir o código-fonte, mas com o contato anterior com o desenvolvedor, sei que levará algum tempo para ele corrigir o código-fonte, se ele o fizer.
Aqui está o grande problema: ainda tenho 6 meses até precisar me formar porque estou sem fundos. Não posso confiar no desenvolvedor para corrigir o DAEPACK com rapidez suficiente para concluir com êxito minha tese de doutorado, que é onde vocês entram.
Eu preciso de um pacote que faça o seguinte:
- Gera extensões de intervalo, modelos de Taylor (usando aritmética de intervalo) e derivadas do código Fortran 77 quase arbitrário; Eu acho que as únicas estruturas que não são analisadas pelo DAEPACK são
DO
loops eIF
declarações. Como preciso dos modelos de Taylor, o código também deve ter capacidade de diferenciação automática (AD). - Gera essas extensões de intervalo e modelos de Taylor pela tradução de fonte para fonte do código Fortran 77 (ou seja, analisa o código-fonte como um compilador para gerar o código-fonte que calcula as extensões de intervalo e os modelos de Taylor).
Em uma pitada, posso usar um software que faça as duas coisas acima no código C, em vez do código Fortran 77, e depois passar tudo f2c
. Eu realmente preferiria não fazer dessa maneira, porque não tenho idéia se a passagem de tudo f2c
funcionará ou não , mas estou desesperada.
Vocês podem ajudar um estudante de doutorado desesperado?
Para antecipar algumas sugestões possíveis, aqui estão abordagens que NÃO funcionarão para mim, dadas as restrições de tempo:
- Se esforçando mais para fazer o DAEPACK funcionar; acredite em mim, eu tentei. E eu estou incomodando o desenvolvedor com frequência.
- Ferramentas que calculam extensões de intervalo ou modelos de Taylor usando abordagens orientadas a objetos (ou orientadas a objetos). Não tenho tempo para recodificar o CHEMKIN-II (ou qualquer outra biblioteca igualmente grande) com novos tipos; é muito grande.
- Usando qualquer idioma que não seja o Fortran 77/90 ou C. O código CHEMKIN-II está no Fortran. Posso convertê-lo em C usando
f2c
, ou se necessário, um clone de CHEMKIN-II baseado em Sandia chamado TChem. Meus resultados antigos usam CHEMKIN-II; meus novos resultados devem replicar meus antigos e já sei que o Cantera não replicará o que o CHEMKIN-II faz com base em estudos de caso e testes de unidade. Além disso, o aluno de graduação que me precedeu fez alguma magia negra no código-fonte do CHEMKIN-II para fazer com que a aritmética de intervalo funcionasse especialmente bem. Seria difícil para mim replicar isso em qualquer outro pacote.