Existe-t-il un outil qui peut générer des extensions d'intervalle des fonctions Fortran (ou C) en analysant le code Fortran (ou C)?


13

Les études de cas dans ma thèse de doctorat nécessitent que j'ai des extensions d'intervalle des sous - programmes Fortran dans CHEMKIN-II (excuses pour le lien; c'est la meilleure que j'ai pu trouver pour un package qui n'est plus distribué par le Sandia National Laboratory). CHEMKIN-II est un ensemble de chimie utilisé en chimie de la combustion; comme c'est le package standard utilisé dans la combustion, je ne peux pas (ou plutôt, je préférerais vraiment ne pas) utiliser un package différent.

Afin d'obtenir les extensions d'intervalle requises, j'ai utilisé un outil développé en interne appelé DAEPACK. Les anciens fichiers binaires que j'ai utilisés pour générer les extensions d'intervalle requises des sous-programmes CHEMKIN-II dont j'avais besoin sur un système d'exploitation 32 bits (avec une version de libstdc correspondant à gcc 2.95) il y a quelques années, mais sont depuis tombés en panne de date, et serait une épreuve énorme à utiliser (car je devrais trouver des versions 32 bits de tous les autres logiciels que j'ai utilisés). Le code source de ce paquet est également propriétaire, mais comme il a été initialement développé au MIT et que je travaille au MIT, j'ai pu (après beaucoup d'efforts) obtenir le code source de DAEPACK. En utilisant le code source que j'ai, j'ai pu compiler une version de DAEPACK compatible avec les versions 64 bits de Linux et les versions de libstdc correspondant à gcc 4.xx Cependant, ce code source, que je soupçonne est ancien, se compile en un exécutable qui ne génère pas avec succès le code d'extension d'intervalle dont j'ai besoin pour terminer ma thèse. J'ai contacté le développeur dans le but d'obtenir son aide pour corriger le code source, mais d'après les contacts précédents avec le développeur, je sais qu'il lui faudra du temps pour corriger le code source, s'il le fait.

Voici le gros problème: il me reste 6 mois avant de devoir obtenir mon diplôme parce que je manque de financement. Je ne peux pas compter sur le développeur pour corriger DAEPACK assez rapidement pour que je puisse terminer avec succès ma thèse de doctorat, c'est là que vous intervenez.

J'ai besoin d'un package qui fait ce qui suit:

  • Génère des extensions d'intervalle, des modèles de Taylor (en utilisant l'arithmétique d'intervalle) et des dérivés de code Fortran 77 presque arbitraire; Je pense que les seules structures qui ne sont pas analysées par DAEPACK sont les DOboucles et les IFinstructions. Puisque j'ai besoin de modèles Taylor, le code doit également avoir une capacité de différenciation automatique (AD).
  • Génère ces extensions d'intervalle et ces modèles de Taylor par traduction source à source du code Fortran 77 (c'est-à-dire qu'il analyse le code source comme un compilateur pour générer le code source qui calcule les extensions d'intervalle et les modèles de Taylor).

Dans un pincement, je peux utiliser un logiciel qui fait les deux choses ci-dessus pour le code C au lieu du code Fortran 77, puis tout passer f2c. Je préférerais vraiment ne pas le faire de cette façon, parce que je ne sais pas si tout traverser f2cfonctionnera même, mais je suis assez désespéré.

Pouvez-vous aider un doctorant désespéré?


Pour anticiper quelques suggestions possibles, voici des approches qui ne fonctionneront PAS pour moi, compte tenu des contraintes de temps:

  • Essayer plus fort de faire fonctionner DAEPACK; croyez-moi, j'ai essayé. Et je bug souvent le développeur.
  • Outils qui calculent des extensions d'intervalle ou des modèles de Taylor en utilisant des approches orientées objet (ou orientées objet). Je n'ai pas le temps de recoder CHEMKIN-II (ou toute autre bibliothèque de même taille) avec de nouveaux types; c'est trop grand.
  • Utilisation d'une langue autre que Fortran 77/90 ou C. Le code CHEMKIN-II est en Fortran. Je peux le convertir en C en utilisant f2c, ou si besoin est, en utilisant un clone basé sur Sandia de CHEMKIN-II appelé TChem. Mes anciens résultats utilisent CHEMKIN-II; mes nouveaux résultats devraient reproduire mes anciens résultats, et je sais déjà que Cantera ne reproduira pas ce que CHEMKIN-II fait sur la base d'études de cas et de tests unitaires. De plus, l'étudiant diplômé qui m'a précédé a fait un peu de magie noire au code source de CHEMKIN-II pour que l'arithmétique d'intervalle fonctionne particulièrement bien. Il serait difficile pour moi de reproduire cela dans n'importe quel autre paquet.

Changez votre sujet de thèse immédiatement. Débarrassez-vous de cette arithmétique stupide d'intervalle et faites quelque chose d'utile, idéalement avec un logiciel qui fonctionne. ;-D
Jed Brown

6
En prenant vos résultats existants, chaussez-les dans une interprétation de votre sujet de thèse, faites une bonne rédaction et achetez à votre comité de défense d'excellentes collations.
Matt Knepley

F:RRF:(R,R0+)((R,R0+)F(une,b)=F([une-b,une+b])
Deathbreath

1
Des aperçus de base de l'arithmétique des intervalles peuvent être trouvés sur Wikipedia (qui inclut le concept d'extension d'intervalle), et dans les références mentionnées sur cette page . La meilleure introduction aux modèles Taylor que j'ai pu trouver est ici . La différenciation automatique est généralement utilisée dans la mise en œuvre des modèles de Taylor; Je n'ai jamais entendu parler ou vu quelqu'un utiliser des approximations numériques à la place.
Geoff Oxberry

2
@MishaBrukman: Oh, je viens de jouer avec tout ça.
Geoff Oxberry

Réponses:


2

En supposant que le problème est que cela DAEPACKfonctionne en mode 32 bits mais pas en mode 64 bits, voici quelques approches pour résoudre ce problème.

Compiler DAEPACKen mode 32 bits sur un système d'exploitation 64 bits

Découvrez comment procéder dans une autre question . Cela peut être un moyen facile de continuer à travailler avec.

Si le problème est que le code généré rencontre des problèmes en mode 64 bits, compilez le code généré avec des indicateurs 32 bits similaires ou dans un environnement 32 bits (le système d'exploitation 64 bits peut exécuter du code 32 bits avec les bibliothèques appropriées, mais pas l' inverse ).

Recréer un ensemble DAEPACK environnement sécurisé

  1. Créez un environnement 32 bits complet dans une machine virtuelle en utilisant, par exemple, VirtualBox , tel qu'il DAEPACKest heureux de l'exécuter, que ce soit à partir d'anciens binaires ou recompilé dans cet environnement. Vous pouvez obtenir une version d'un système d'exploitation et d'un compilateur open source aussi anciens que nécessaire pour obtenir une version de travail du logiciel.

  2. Prenez la sortie de DAEPACKet transférez-la vers la machine hôte ou une machine virtuelle distincte où l'environnement est approprié pour l'autre logiciel et continuez à travailler. Il peut s'agir d'un système d'exploitation 64 bits plus récent, par exemple, et continuer à y travailler.

    L'utilisation de la fonction de dossiers partagés dans VirtualBox devrait vous faciliter la tâche.

Demandez à d'autres personnes de vous aider à corriger DAEPACK

J'ai remarqué que vous avez dit que ni vous ni l'auteur du logiciel n'avez le temps de résoudre ce problème, mais personne n'a dit que vous ne pouvez pas demander l'aide de quelqu'un d'autre! Considérez ces options:

  • Embaucher des étudiants de premier cycle MIT CS pour aider à résoudre les problèmes 32 bits contre 64 bits. Notez que pour les inciter à y travailler, vous devrez peut-être les rémunérer, que ce soit avec de l'argent ou de la pizza (et / ou de la bière, s'ils ont l'âge légal pour boire), par exemple. Ou envisagez de demander si votre conseiller peut embaucher des étudiants à temps partiel pour vous aider (cela peut être un problème de financement, si votre propre financement est épuisé). Ou demandez des faveurs aux programmeurs de recherche de votre département.

  • Faites pression pour une version open source de DAEPACK. Il semble que son statut de licence ne soit pas clair , mais notez que le MIT a une licence open source éponyme qui est plutôt bien connue; le publier sous une licence ouverte peut aider à mieux comprendre le problème et à résoudre les problèmes 32 bits contre 64 bits.

    Notez que selon votre département, les bureaux juridiques, administratifs, etc. peuvent prendre plus de 6 mois que vous avez quitté pour votre doctorat, alors envisagez de commencer tôt, tout en recherchant d'autres alternatives.

Bonne chance!


Après avoir passé un certain temps à rédiger cette réponse, je viens de réaliser que vous avez écrit votre question en 2012 avec un délai de 6 mois, donc cette discussion est plutôt théorique. Désolé pour ça! Je suis toujours curieux de savoir ce que vous avez fini par faire dans ce cas.
Misha Brukman

Pendant mon doctorat, j'ai essayé les trois approches que vous avez mentionnées sans succès. Le problème, IIRC, était qu'il générerait du code bogué; le compiler (bien qu'une douleur dans le cul, parce que je devais en moderniser certaines parties) était en fait le moindre de mes problèmes. Il est peu probable que DAEPACK soit publié en open source, car c'est la technologie clé d'une entreprise. Il est également épineux d'amener d'autres personnes à l'extérieur de cette entreprise et du laboratoire de mon ancien conseiller pour y remédier, et je doute que les étudiants entreprenants du MIT CS voudraient prendre ce travail ingrat.
Geoff Oxberry

@GeoffOxberry désolé d'entendre cela, mais c'est (malheureusement) trop répandu dans les logiciels dits de "qualité recherche". Félicitations pour votre persévérance et votre diplôme malgré tout!
Misha Brukman
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.