Existe uma ferramenta disponível para gerar extensões de intervalo das funções do Fortran (ou C) analisando o código do Fortran (ou C)?


13

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 DOloops e IFdeclaraçõ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 f2cfuncionará 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.

Mude o tópico da sua tese imediatamente. Livre-se desse aritmético intervalo bobo e faça algo útil, idealmente com o software que funciona. ;-D
Jed Brown

6
Tomando os resultados existentes, calce-os para uma interpretação do tópico da sua tese, faça uma boa redação e compre ótimos lanches para o seu comitê de defesa.
precisa saber é o seguinte

f:RRF:(R,R0 0+)((R,R0 0+)F(uma,b)=f([uma-b,uma+b])
Death Breath

1
As visões gerais básicas da aritmética de intervalo podem ser encontradas na Wikipedia (que inclui o conceito de extensão de intervalo) e nas referências mencionadas nesta página . A melhor introdução aos modelos de Taylor que eu pude encontrar está aqui . A diferenciação automática é normalmente usada na implementação de modelos de Taylor; Nunca ouvi falar ou vi alguém usar aproximações numéricas.
Geoff Oxberry

2
@MishaBrukman: Ah, eu acabei de comentar sobre tudo isso.
Geoff Oxberry

Respostas:


2

Supondo que o problema seja que DAEPACKfunciona no modo de 32 bits, mas não no modo de 64 bits, aqui estão algumas abordagens para resolver isso.

Compile DAEPACKno modo de 32 bits em um sistema operacional de 64 bits

Veja como fazer isso em outra pergunta . Essa pode ser uma maneira fácil de continuar trabalhando com ela.

Se o problema é que o código gerado está com problemas no modo de 64 bits, compile o código gerado com sinalizadores de 32 bits semelhantes ou em um ambiente de 32 bits (o SO de 64 bits pode executar o código de 32 bits, dadas as bibliotecas apropriadas, mas não vice-versa ).

Recrie todo um DAEPACKambiente seguro

  1. Crie um ambiente completo de 32 bits em uma máquina virtual usando, por exemplo, o VirtualBox , de modo que DAEPACKseja feliz rodando nela, seja de binários antigos ou recompilados nesse ambiente. Você pode obter uma versão de um sistema operacional e compilador de código aberto tão antigo quanto necessário para obter uma versão funcional do software.

  2. Pegue a saída DAEPACKe transfira-a para a máquina host ou para uma máquina virtual separada onde o ambiente é apropriado para o outro software e continue trabalhando. Pode ser um sistema operacional de 64 bits mais recente, por exemplo, e continuar trabalhando lá.

    O uso do recurso de pastas compartilhadas no VirtualBox deve facilitar isso para você.

Aliste outras pessoas para ajudar a corrigir DAEPACK

Percebi que você disse que nem você nem o autor do software têm tempo para consertar isso, mas ninguém disse que você não pode pedir a ajuda de mais ninguém! Considere estas opções:

  • Contrate alguns alunos de graduação do MIT CS para ajudar a corrigir os problemas de 32 bits vs. 64 bits. Observe que, para incentivá-los a trabalhar nisso, você pode ter que compensá-los, seja com dinheiro ou pizza (e / ou cerveja, se tiverem idade legal para beber), por exemplo. Ou considere perguntar se o seu orientador pode contratar alguns estudantes de meio período para ajudar nisso (pode ser um problema de financiamento, se o seu próprio financiamento estiver acabando). Ou peça alguns favores aos programadores de pesquisa do seu departamento.

  • Lobby para uma versão de código aberto de DAEPACK. Parece que seu status de licenciamento é claro , mas observe que o MIT possui uma licença de código-fonte de mesmo nome que é bastante conhecida; liberá-lo sob uma licença aberta pode ajudar a entender melhor o problema e a corrigir os problemas de 32 bits vs. 64 bits.

    Observe que, dependendo do seu departamento, escritórios jurídicos, administrativos, etc., pode levar mais de seis meses para o seu doutorado. Portanto, considere iniciar isso mais cedo, enquanto procura outras alternativas.

Boa sorte!


Depois de passar um tempo escrevendo essa resposta, percebi que você escreveu sua pergunta em 2012 com um prazo de 6 meses, portanto essa discussão é bastante discutível. Me desculpe por isso! Ainda estou curioso para saber o que você acabou fazendo neste caso.
Misha Brukman

Durante meu doutorado, tentei todas as três abordagens mencionadas sem sucesso. O problema, IIRC, era que geraria código de buggy; compilá-lo (apesar de um pé no saco, porque eu tive que modernizar partes dele) foi realmente o menor dos meus problemas. É improvável que o DAEPACK seja lançado em código aberto, pois é a principal tecnologia de uma empresa. Também é espinhoso levar outras pessoas para fora da empresa e o laboratório do meu ex-conselheiro para consertá-lo, e duvido que os estudantes empreendedores do MIT CS desejem assumir esse trabalho ingrato.
Geoff Oxberry

@ GeoffOxberry, desculpe-me por ouvir isso, mas isso é (infelizmente) muito prevalecente no software chamado "qualidade de pesquisa". Parabéns por perseverar e concluir seu diploma, no entanto!
Misha Brukman
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.