Esiste uno strumento là fuori che può generare estensioni di intervallo delle funzioni Fortran (o C) analizzando il codice Fortran (o C)?


13

I casi di studio nella mia tesi di dottorato richiedono che io abbia estensioni di intervallo delle subroutine Fortran in CHEMKIN-II (mi scuso per il collegamento; è il migliore che ho trovato per un pacchetto non più distribuito dal Sandia National Laboratory). CHEMKIN-II è un pacchetto chimico utilizzato nella chimica della combustione; dato che è il pacchetto standard usato nella combustione, non posso (o meglio preferirei davvero) non usare un pacchetto diverso là fuori.

Per ottenere le estensioni degli intervalli richieste, ho usato uno strumento sviluppato internamente chiamato DAEPACK. I vecchi binari che ho usato per essere in grado di generare le estensioni di intervallo richieste delle subroutine CHEMKIN-II di cui avevo bisogno su un sistema operativo a 32 bit (con una versione di libstdc corrispondente a gcc 2.95) un paio di anni fa, ma da allora sono caduti di data, e sarebbe una prova tremenda da usare (perché dovrei trovare le versioni a 32 bit di ogni altro pezzo di software che ho usato). Anche il codice sorgente di questo pacchetto è proprietario, ma poiché è stato originariamente sviluppato presso il MIT, e io lavoro presso il MIT, sono stato in grado (dopo un grande sforzo) di ottenere il codice sorgente per DAEPACK. Usando il codice sorgente che ho, sono stato in grado di compilare una versione di DAEPACK compatibile con le versioni a 64 bit di Linux e le versioni di libstdc corrispondenti a gcc 4.xx Tuttavia, questo codice sorgente, che sospetto sia vecchio, compila in un eseguibile che non genera correttamente il codice di estensione dell'intervallo di cui ho bisogno per completare la mia tesi. Ho contattato lo sviluppatore nel tentativo di ottenere il suo aiuto per correggere il codice sorgente, ma da un precedente contatto con lo sviluppatore, so che ci vorrà del tempo per sistemare il codice sorgente, se lo fa.

Ecco il grosso problema: mi restano solo 6 mesi per laurearmi perché ho finito i finanziamenti. Non posso fare affidamento sullo sviluppatore per sistemare DAEPACK in modo sufficientemente rapido da consentirmi di completare con successo la mia tesi di dottorato, che è il punto in cui vieni.

Ho bisogno di un pacchetto che esegua le seguenti operazioni:

  • Genera estensioni di intervallo, modelli di Taylor (usando l'aritmetica di intervallo) e derivate del codice Fortran 77 quasi arbitrario; Penso che le uniche strutture che non siano analizzate da DAEPACK siano DOloop e IFdichiarazioni. Dal momento che ho bisogno dei modelli Taylor, il codice deve anche avere una funzionalità di differenziazione automatica (AD).
  • Genera queste estensioni di intervallo e modelli di Taylor mediante la traduzione da sorgente a fonte del codice Fortran 77 (ovvero, analizza il codice sorgente come un compilatore per generare il codice sorgente che calcola le estensioni di intervallo e i modelli di Taylor).

In un pizzico, posso usare un software che fa le due cose precedenti al codice C anziché al codice Fortran 77, e quindi passare tutto f2c. Preferirei davvero non farlo in questo modo, perché non ho idea se tutto f2cpasserà o meno funzionerà, ma sono piuttosto disperato.

Ragazzi, potete aiutare uno studente di dottorato disperato?


Per anticipare alcuni possibili suggerimenti, ecco alcuni approcci che NON funzioneranno per me, visti i vincoli temporali:

  • Fare di più per far funzionare DAEPACK; credimi, ci ho provato. E sto tormentando spesso lo sviluppatore.
  • Strumenti che calcolano estensioni di intervallo o modelli di Taylor usando approcci orientati agli oggetti (o orientati agli oggetti). Non ho tempo di ricodificare CHEMKIN-II (o qualsiasi altra libreria similmente grande) con nuovi tipi; è troppo grande.
  • Uso di qualsiasi lingua diversa da Fortran 77/90 o C. Il codice CHEMKIN-II è in Fortran. Posso convertirlo in C usando f2c, o se necessario, usare un clone di CHEMKIN-II basato su Sandia chiamato TChem. I miei vecchi risultati usano CHEMKIN-II; i miei nuovi risultati dovrebbero replicare i miei vecchi risultati e so già che Cantera non replicherà ciò che CHEMKIN-II fa sulla base di casi di studio e test unitari. Inoltre, lo studente laureato che mi ha preceduto ha fatto un po 'di magia nera sul codice sorgente CHEMKIN-II per far funzionare l'aritmetica dell'intervallo in modo particolarmente efficace. Per me sarebbe difficile replicarlo in qualsiasi altro pacchetto.

Cambia immediatamente il tuo argomento di tesi. Sbarazzati di quell'aritmetica a intervalli stupidi e fai qualcosa di utile, idealmente con un software che funzioni. ;-D
Jed Brown

6
Prendendo i risultati esistenti, inseriscili in un'interpretazione del tuo argomento di tesi, fai una bella riscrittura e acquista fantastici snack al tuo comitato di difesa.
Matt Knepley

f:RRF:(R,R0+)((R,R0+)F(un',B)=f([un'-B,un'+B])
Deathbreath

1
Panoramica di base sull'aritmetica degli intervalli sono disponibili su Wikipedia (che include il concetto di estensione degli intervalli) e nei riferimenti citati in questa pagina . La migliore introduzione ai modelli Taylor che ho potuto trovare è qui . La differenziazione automatica viene in genere utilizzata nell'implementazione dei modelli di Taylor; Non ho mai sentito parlare o visto qualcuno usare invece approssimazioni numeriche.
Geoff Oxberry

2
@MishaBrukman: Oh, ho appena parlato di tutto ciò.
Geoff Oxberry,

Risposte:


2

Supponendo che il problema sia che DAEPACKfunziona in modalità a 32 bit ma non in modalità a 64 bit, ecco alcuni approcci per risolvere questo problema.

Compilare DAEPACKin modalità 32 bit su un sistema operativo a 64 bit

Scopri come farlo in un'altra domanda . Questo potrebbe essere un modo semplice per continuare a lavorare con esso.

Se il problema è che il codice generato presenta problemi in modalità a 64 bit, compilare il codice generato con flag a 32 bit simili o in un ambiente a 32 bit (il sistema operativo a 64 bit può eseguire codice a 32 bit con le librerie appropriate, ma non viceversa ).

Ricrea un intero DAEPACKambiente sicuro

  1. Crea un ambiente a 32 bit completo in una macchina virtuale usando, ad esempio, VirtualBox , in modo che DAEPACKsia felicemente eseguito in esso, sia da vecchi binari, sia ricompilato in questo ambiente. È possibile ottenere una versione di un SO open source e un compilatore vecchio quanto necessario per ottenere una versione funzionante del software.

  2. Prendi l'output DAEPACKe trasferiscilo sulla macchina host o su una macchina virtuale separata dove l'ambiente è appropriato per l'altro software e continua a lavorare. Questo può essere un sistema operativo a 64 bit più recente, ad esempio, e continuare a lavorare lì.

    L'uso della funzionalità delle cartelle condivise in VirtualBox dovrebbe semplificarti questa scelta.

Chiedere aiuto ad altri per risolvere DAEPACK

Ho notato che hai detto che né tu né l'autore del software avete il tempo di risolvere questo problema, ma nessuno ha detto che non potete ottenere l'aiuto di nessun altro! Considera queste opzioni:

  • Assumi alcuni studenti universitari MIT CS per aiutarti a risolvere i problemi a 32 e 64 bit. Nota che per invogliarli a lavorarci sopra, potresti doverli compensare, sia con soldi o pizza (e / o birra, se hanno l'età legale per bere), per esempio. Oppure considera di chiedere se il tuo consulente può assumere alcuni studenti part-time per aiutarti in questo (potrebbe essere un problema con il finanziamento, se il tuo finanziamento si sta esaurendo). Oppure chiedi alcuni favori ai programmatori di ricerca del tuo dipartimento.

  • Lobby per una versione open source di DAEPACK. Sembra che il suo stato di licenza non sia chiaro , ma si noti che il MIT ha un'omonima licenza open source piuttosto nota; rilasciandolo con una licenza aperta può aiutare a capire meglio il problema e a risolvere i problemi a 32 e 64 bit.

    Tieni presente che, a seconda del tuo dipartimento, gli uffici legali, amministrativi, ecc. Potrebbero richiedere più di 6 mesi che hai lasciato per il tuo dottorato di ricerca, quindi considera di iniziare in anticipo, mentre cerchi altre alternative.

In bocca al lupo!


Dopo aver trascorso un po 'di tempo a scrivere questa risposta, mi sono appena reso conto che hai scritto la tua domanda nel 2012 con una scadenza di 6 mesi, quindi questa discussione è piuttosto controversa. Mi dispiace per quello! Sono ancora curioso di sapere cosa hai fatto in questo caso.
Misha Brukman,

Durante il mio dottorato di ricerca, ho provato tutti e tre gli approcci che hai citato senza successo. Il problema, IIRC, era che avrebbe generato codice errato; compilarlo (anche se un dolore nel culo, perché ho dovuto modernizzare parti di esso) era in realtà l'ultimo dei miei problemi. È improbabile che DAEPACK venga rilasciato open source, poiché è la tecnologia chiave di un'azienda. È anche spinoso convincere altre persone fuori da quell'azienda e il mio ex consigliere a sistemarlo, e dubito che gli studenti intraprendenti del MIT CS vorrebbero svolgere quel lavoro ingrato.
Geoff Oxberry,

@GeoffOxberry mi dispiace sentirlo, ma questo è (purtroppo) fin troppo diffuso nel cosiddetto software di "qualità di ricerca". Congratulazioni per aver perseverato e aver completato la tua laurea!
Misha Brukman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.