Есть ли инструмент, который может генерировать интервальные расширения функций Fortran (или C) путем анализа кода Fortran (или C)?

13

Тематические исследования в моей докторской диссертации требуют, чтобы у меня были расширения интервалов подпрограмм Фортрана в CHEMKIN-II (извинения за ссылку; это лучшее, что я мог найти для пакета, который больше не распространяется Национальной лабораторией Сандиа). CHEMKIN-II - химический пакет, используемый в химии горения; поскольку это стандартный пакет, используемый для сжигания, я не могу (или, скорее, действительно предпочел бы не использовать) другой пакет там.

Чтобы получить необходимые расширения интервалов, я использую инструмент, разработанный собственными силами, под названием DAEPACK., Старые двоичные файлы, которые я использовал для генерации требуемых расширений интервалов подпрограмм CHEMKIN-II, которые мне были нужны в 32-битной ОС (с версией libstdc, соответствующей gcc 2.95) пару лет назад, но с тех пор вышли из строя на сегодняшний день, и это было бы огромным испытанием для использования (потому что я должен был бы найти 32-разрядные версии всех остальных программ, которые я использовал). Исходный код этого пакета также является проприетарным, но поскольку он изначально разрабатывался в MIT, а я работаю в MIT, я смог (после огромных усилий) получить исходный код для DAEPACK. Используя исходный код, который у меня есть, я смог скомпилировать версию DAEPACK, совместимую с 64-битными версиями Linux и версиями libstdc, соответствующими gcc 4.xx Однако этот исходный код, который я подозреваю, устарел, компилируется в исполняемый файл, который не генерирует успешно код расширения интервала, который мне нужен для завершения моей диссертации. Я связался с разработчиком в попытке получить его помощь в исправлении исходного кода, но из предыдущего контакта с разработчиком я знаю, что ему потребуется время, чтобы исправить исходный код, если он вообще это сделает.

Вот большая проблема: у меня осталось 6 месяцев до окончания учебы, потому что у меня заканчивается финансирование. Я не могу рассчитывать на то, что разработчик исправит DAEPACK достаточно быстро, чтобы успешно завершить свою диссертацию на соискание ученой степени кандидата наук.

Мне нужен пакет, который делает следующее:

  • Генерирует интервальные расширения, модели Тейлора (с использованием интервальной арифметики) и производные от почти произвольного кода Фортрана 77; Я думаю, что единственные структуры, которые не анализируются DAEPACK - это DOциклы и IFоператоры. Поскольку мне нужны модели Тейлора, код также должен иметь возможность автоматической дифференциации (AD).
  • Генерирует эти расширения интервалов и модели Тейлора путем преобразования исходного кода в код Fortran 77 (то есть он анализирует исходный код как компилятор для генерации исходного кода, который вычисляет расширения интервалов и модели Тейлора).

В крайнем случае, я могу использовать программное обеспечение, которое выполняет две вышеупомянутые вещи для кода на C вместо кода на Fortran 77, и затем все пропустить f2c. Я действительно предпочел бы не делать это таким образом, потому что я понятия не имею, будет ли проходить все или нет f2c, но я довольно отчаянно.

Ребята, можете ли вы помочь отчаявшемуся аспиранту?


Чтобы предвидеть некоторые возможные предложения, вот подходы, которые НЕ будут работать для меня, учитывая временные ограничения:

  • Стараясь заставить DAEPACK работать; поверь мне, я пытался. И я часто ошибаюсь разработчиком.
  • Инструменты, которые рассчитывают расширения интервалов или модели Тейлора с использованием объектно-ориентированных (или объектно-ориентированных) подходов. У меня нет времени перекодировать CHEMKIN-II (или любую другую подобную большую библиотеку) с новыми типами; Это слишком большое.
  • Использование любого языка, кроме Fortran 77/90 или C. Код CHEMKIN-II находится на языке Fortran. Я могу преобразовать его в C, используя f2cили, если нужно, использовать основанный на Sandia клон CHEMKIN-II под названием TChem. Мои старые результаты используют CHEMKIN-II; мои новые результаты должны повторять мои старые результаты, и я уже знаю, что Cantera не будет копировать то, что делает CHEMKIN-II на основе тематических исследований и модульного тестирования. Кроме того, аспирант, предшествовавший мне, применил черную магию к исходному коду CHEMKIN-II, чтобы интервальная арифметика работала особенно хорошо. Мне было бы сложно воспроизвести это в любой другой упаковке.
Джефф Оксберри
источник
Измените тему вашей диссертации немедленно. Избавьтесь от этой глупой интервальной арифметики и сделайте что-нибудь полезное, в идеале с программным обеспечением, которое работает. ;-D
Джед Браун
6
Принимая ваши существующие результаты, включите их в интерпретацию темы вашей диссертации, сделайте хорошую рецензию и купите свой комитет защиты отличными закусками.
Мэтт Кнепли
@Geoff Oxberry: помогите мне понять, что вы подразумеваете под расширением интервала; расширен до , где ? Я полагаю, что у ваших функций нет таких приятных свойств, как монотонность и т. д. Это е:ррF:(р,р0+)((р,р0+)F(a,б)знак равное([a-б,a+б])
серьезная
1
Основные обзоры интервальной арифметики можно найти в Википедии (которая включает в себя концепцию расширения интервалов) и в ссылках, упомянутых на этой странице . Лучшее введение в модели Тейлора, которое я смог найти, здесь . Автоматическое дифференцирование обычно используется при реализации моделей Тейлора; Я никогда не слышал и не видел, чтобы кто-нибудь использовал вместо этого числовые приближения.
Джефф Оксберри
2
@MishaBrukman: О, я просто наказан за все это.
Джефф Оксберри

Ответы:

2

Предполагая, что проблема заключается в том, что DAEPACKработает в 32-битном режиме, но не в 64-битном режиме, вот несколько подходов для решения этой проблемы.

Компиляция DAEPACKв 32-битном режиме на 64-битной ОС

Посмотрите, как это сделать, в другом вопросе . Это может быть простой способ продолжить работу с ним.

Если проблема заключается в том, что сгенерированный код имеет проблемы в 64-битном режиме, скомпилируйте сгенерированный код с аналогичными 32-битными флагами или в 32-битной среде (64-битная ОС может запускать 32-битный код при наличии соответствующих библиотек, но не наоборот ).

Воссоздать всю безопасную DAEPACKсреду

  1. Создайте полную 32-разрядную среду в виртуальной машине, используя, например, VirtualBox , чтобы DAEPACKона работала в ней успешно, будь то из старых двоичных файлов или перекомпилирована в этой среде. Вы можете получить версию ОС с открытым исходным кодом и компилятор настолько старый, насколько вам нужно, чтобы получить рабочую версию программного обеспечения.

  2. Возьмите выходные данные DAEPACKи перенесите их на хост-компьютер или отдельную виртуальную машину, где среда подходит для другого программного обеспечения, и продолжайте работу. Это может быть более поздняя 64-битная ОС, например, и продолжающая работать там.

    Использование функции общих папок в VirtualBox должно упростить вам эту задачу.

Привлекайте других, чтобы помочь исправить DAEPACK

Я заметил, что вы сказали, что ни у вас, ни у автора программного обеспечения нет времени, чтобы это исправить, но никто не сказал, что вы не можете заручиться чьей-либо помощью! Рассмотрим эти варианты:

  • Наймите студентов бакалавриата MIT CS, чтобы помочь решить проблемы 32- и 64-разрядных систем. Обратите внимание, что для того, чтобы побудить их поработать над этим, вам, возможно, придется их компенсировать, например, деньгами или пиццей (и / или пивом, если они достигли совершеннолетия). Или подумайте, может ли ваш консультант нанять студентов с частичной занятостью, чтобы помочь с этим (может быть проблема с финансированием, если ваше собственное финансирование заканчивается). Или попросите об одолжении у программистов-исследователей в вашем отделе.

  • Лобби для релиза с открытым исходным кодом DAEPACK. Похоже, что его лицензионный статус неясен , но обратите внимание, что у MIT есть одноименная лицензия с открытым исходным кодом, которая довольно известна; выпуск его под открытой лицензией может помочь лучше понять проблему и помочь исправить 32-битные и 64-битные проблемы.

    Обратите внимание, что в зависимости от вашего департамента, юридического, административного и т. Д. Офисов может занять больше, чем 6 месяцев, которые у вас осталось для получения степени доктора философии, поэтому рассмотрите возможность начать это раньше, одновременно выбирая другие альтернативы.

Удачи!

Миша Брукман
источник
Пробыв некоторое время написания этого ответа, я просто понял , что вы написали свой вопрос в 2012 году с 6 месяцев сроком, так это обсуждение довольно спорным вопросом. Прости за это! Мне все еще любопытно, что вы в итоге сделали в этом случае.
Миша Брукман
Во время моей докторской диссертации я попробовал все три подхода, которые вы упомянули, но безуспешно. Проблема, IIRC, заключалась в том, что он генерировал бы ошибочный код; компиляция (хотя боль в заднице, потому что мне пришлось модернизировать ее части) была наименьшей из моих проблем. DAEPACK вряд ли будет выпущен с открытым исходным кодом, так как это ключевая технология компании. Также непросто заставить других людей за пределами этой компании и лаборатории моего бывшего консультанта это починить, и я сомневаюсь, что предприимчивые студенты MIT CS захотят взять на себя эту неблагодарную работу.
Джефф Оксберри
@GeoffOxberry Жаль это слышать, но это (к сожалению) слишком распространено в так называемом программном обеспечении «исследовательского качества». Поздравляю с упорством и завершением вашей степени, тем не менее!
Миша Брукман