Czy istnieje narzędzie, które może generować rozszerzenia przedziałów funkcji Fortran (lub C) przez analizowanie kodu Fortran (lub C)?

13

Studia przypadków w mojej rozprawie doktorskiej wymagają przedłużenia interwałów podprogramów Fortrana w CHEMKIN-II (przepraszam za link; to najlepsze, jakie mogłem znaleźć dla pakietu, który nie jest już dystrybuowany przez Sandia National Laboratory). CHEMKIN-II to pakiet chemiczny stosowany w chemii spalania; ponieważ jest to standardowy pakiet używany do spalania, nie mogę (a raczej wolałbym nie używać) innego pakietu.

Aby uzyskać wymagane przedłużenia interwałów, korzystałem z opracowanego przez siebie narzędzia o nazwie DAEPACK. Stare pliki binarne, za pomocą których byłem w stanie wygenerować wymagane rozszerzenia interwałów podprogramów CHEMKIN-II, których potrzebowałem w 32-bitowym systemie operacyjnym (z wersją libstdc odpowiadającą gcc 2.95) kilka lat temu, ale od tego czasu wypadły daty i byłaby to ogromna trudność w użyciu (ponieważ musiałbym znaleźć 32-bitowe wersje każdego innego oprogramowania, którego użyłem). Kod źródłowy tego pakietu jest również zastrzeżony, ale ponieważ został pierwotnie opracowany w MIT, a ja pracuję w MIT, byłem w stanie (po dużym wysiłku) uzyskać kod źródłowy dla DAEPACK. Korzystając z posiadanego kodu źródłowego, udało mi się skompilować wersję DAEPACK kompatybilną z 64-bitowymi wersjami Linuksa i wersjami libstdc odpowiadającymi gcc 4.xx Jednak ten kod źródłowy, który, jak podejrzewam, jest stary, kompiluje się w plik wykonywalny, który nie generuje kodu rozszerzenia interwału, którego potrzebuję, aby ukończyć moją pracę magisterską. Skontaktowałem się z programistą w celu uzyskania jego pomocy w naprawieniu kodu źródłowego, ale po poprzednim kontakcie z programistą wiem, że poprawa kodu źródłowego zajmie trochę czasu, jeśli w ogóle to zrobi.

Oto wielki problem: Zostało mi 6 miesięcy do ukończenia szkoły, ponieważ skończyły mi się fundusze. Nie mogę liczyć na to, że programista naprawi DAEPACK wystarczająco szybko, abym z powodzeniem ukończył pracę doktorską, do której wkraczacie.

Potrzebuję pakietu, który wykonuje następujące czynności:

  • Generuje rozszerzenia przedziałów, modele Taylora (wykorzystujące arytmetykę przedziałów) i pochodne prawie dowolnego kodu Fortran 77; Myślę, że jedynymi strukturami, które nie są analizowane przez DAEPACK, są DOpętle i IFinstrukcje. Ponieważ potrzebuję modeli Taylora, kod musi mieć również funkcję automatycznego różnicowania (AD).
  • Generuje te rozszerzenia przedziałów i modele Taylora przez tłumaczenie kodu Fortran 77 między źródłami (tzn. Analizuje kod źródłowy jak kompilator, aby wygenerować kod źródłowy, który oblicza rozszerzenia przedziałów i modele Taylora).

W skrócie, mogę użyć oprogramowania, które wykonuje powyższe dwie rzeczy do kodu C zamiast kodu Fortran 77, a następnie przekazać wszystko f2c. Naprawdę wolałbym nie robić tego w ten sposób, ponieważ nie mam pojęcia, czy przekazanie wszystkiego w f2cogóle zadziała, ale jestem zdesperowany.

Czy możecie pomóc zdesperowanym doktorantowi?


Aby przewidzieć niektóre możliwe sugestie, oto podejścia, które NIE będą dla mnie działać, biorąc pod uwagę ograniczenia czasowe:

  • Staramy się, aby DAEPACK zaczął działać; uwierz mi, próbowałem. Często podsłuchuję programistę.
  • Narzędzia do obliczania rozszerzeń przedziałów lub modeli Taylora przy użyciu metod obiektowych (lub obiektowych). Nie mam czasu na przekodowywanie CHEMKIN-II (lub innej podobnej dużej biblioteki) za pomocą nowych typów; jest za duze.
  • Używanie dowolnego języka innego niż Fortran 77/90 lub C. Kod CHEMKIN-II jest w języku Fortran. Mogę przekonwertować go do C za pomocą f2c, lub w razie potrzeby, użyć opartego na Sandii klonu CHEMKIN-II o nazwie TChem. Moje stare wyniki używają CHEMKIN-II; moje nowe wyniki powinny powielać moje stare wyniki i już wiem, że Cantera nie powiela tego, co robi CHEMKIN-II na podstawie studiów przypadków i testów jednostkowych. Co więcej, doktorant, który mnie poprzedził, zastosował trochę czarnej magii do kodu źródłowego CHEMKIN-II, aby arytmetyka interwałów działała szczególnie dobrze. Trudno byłoby mi powielić to w jakimkolwiek innym pakiecie.
Geoff Oxberry
źródło
Natychmiast zmień temat pracy magisterskiej. Pozbądź się tej głupiej arytmetyki przedziałów i zrób coś użytecznego, najlepiej z działającym oprogramowaniem. ;-D
Jed Brown
6
Biorąc swoje dotychczasowe wyniki, podnieś je do interpretacji tematu pracy dyplomowej, zrób miły napis i kup świetne obrona komitetu obrony.
Matt Knepley,
@Geoff Oxberry: Pomóż mi zrozumieć, co rozumiesz przez wydłużenie interwału; rozszerzony na , gdzie ? Zakładam, że twoje funkcje nie mają fajnych właściwości, takich jak monotoniczność itp. Czy to poważny problem z optymalizacją? F : ( R , R + 0 ) ( ( R , R + 0 ) F ( a , b ) = f ( [ a - b , a + b ] )f:RRF:(R,R0+)((R,R0+)F(a,b)=f([ab,a+b])
Deathbreath
1
Podstawowe przeglądy arytmetyki interwałów można znaleźć na Wikipedii (która obejmuje koncepcję wydłużania interwałów) oraz w odnośnikach wymienionych na tej stronie . Najlepsze wprowadzenie do modeli Taylora, które udało mi się znaleźć, znajduje się tutaj . Automatyczne różnicowanie jest zwykle stosowane przy wdrażaniu modeli Taylora; Nigdy nie słyszałem ani nie widziałem, żeby ktoś używał przybliżeń numerycznych.
Geoff Oxberry
2
@MishaBrukman: Oh, po prostu to wszystko nakręciłem.
Geoff Oxberry

Odpowiedzi:

2

Zakładając, że problem polega na tym, że DAEPACKdziała on w trybie 32-bitowym, ale nie w trybie 64-bitowym, oto kilka metod rozwiązania tego problemu.

Kompiluj DAEPACKw trybie 32-bitowym w 64-bitowym systemie operacyjnym

Zobacz, jak to zrobić w innym pytaniu . Może to być łatwy sposób na kontynuowanie pracy z nim.

Jeśli problem polega na tym, że w generowanym kodzie występują problemy w trybie 64-bitowym, skompiluj wygenerowany kod z podobnymi flagami 32-bitowymi lub w środowisku 32-bitowym (64-bitowy system operacyjny może uruchamiać kod 32-bitowy, biorąc pod uwagę odpowiednie biblioteki, ale nie odwrotnie ).

Odtwórz całe DAEPACKbezpieczne środowisko

  1. Utwórz pełne 32-bitowe środowisko na maszynie wirtualnej, używając np. VirtualBox , który z DAEPACKprzyjemnością będzie w nim działał, czy to ze starych plików binarnych, czy zrekompilowanych w tym środowisku. Możesz uzyskać wersję systemu operacyjnego i kompilatora typu open source tak starą, jak potrzebujesz działającej wersji oprogramowania.

  2. Pobierz dane wyjściowe DAEPACKi przenieś je na maszynę hosta lub oddzielną maszynę wirtualną, w której środowisko jest odpowiednie dla innego oprogramowania, i kontynuuj pracę. Może to być na przykład nowszy 64-bitowy system operacyjny i kontynuuj pracę.

    Korzystanie z funkcji folderów współdzielonych w VirtualBox powinno ci to ułatwić.

Zwerbuj innych do pomocy DAEPACK

Zauważyłem, że powiedziałeś, że ani ty, ani autor oprogramowania nie masz czasu, aby to naprawić, ale nikt nie powiedział, że nie możesz poprosić o pomoc innej osoby! Rozważ te opcje:

  • Zatrudnij kilku studentów MIT CS, którzy pomogą rozwiązać problemy z wersją 32-bitową i 64-bitową. Pamiętaj, że aby zachęcić ich do pracy, może być konieczne wynagrodzenie, na przykład pieniędzmi lub pizzą (i / lub piwem, jeśli są pełnoletnie). Lub zastanów się, czy twój doradca nie może zatrudnić niektórych studentów studiów niestacjonarnych, aby ci pomogli (może to być problem z finansowaniem, jeśli twoje fundusze się kończą). Lub poproś o przysługę od programistów zajmujących się badaniami w twoim dziale.

  • Lobbuj za wydaniem open source DAEPACK. Wygląda na to, że status licencji jest niejasny , ale należy pamiętać, że MIT ma tytułową licencję typu open source, która jest dość dobrze znana; wydanie go na otwartej licencji może pomóc lepiej przyjrzeć się problemowi i rozwiązać problemy z wersją 32-bitową i 64-bitową.

    Należy pamiętać, że w zależności od wydziału, biura prawnego, administracyjnego itp. Może to potrwać dłużej niż 6 miesięcy, które pozostały do ​​uzyskania tytułu doktora, więc rozważ rozpoczęcie tego wcześniej, szukając innych rozwiązań.

Powodzenia!

Misha Brukman
źródło
Po spędzeniu czasu na pisaniu tej odpowiedzi, właśnie zdałem sobie sprawę, że napisałeś swoje pytanie w 2012 r. Z 6-miesięcznym terminem, więc ta dyskusja jest raczej dyskusyjna. Przepraszam za to! Nadal jestem ciekawa, co skończyłaś w tej sprawie.
Misha Brukman
Podczas mojego doktoratu wypróbowałem wszystkie trzy podejścia, o których wspomniałeś, bezskutecznie. Problem, IIRC, polegał na tym, że generowałby błędny kod; skompilowanie go (choć boli mnie tyłek, bo musiałem go zmodernizować) było właściwie najmniejszym z moich problemów. DAEPACK raczej nie zostanie wydany jako oprogramowanie typu open source, ponieważ jest to kluczowa technologia firmy. Trudne jest również nakłonienie innych osób spoza tej firmy i laboratorium mojego byłego doradcy, aby to naprawili, i wątpię, czy przedsiębiorczy studenci MIT CS chcieliby podjąć tę niewdzięczną pracę.
Geoff Oxberry
@GeoffOxberry przykro nam to słyszeć, ale jest to (niestety) zbyt powszechne w tak zwanym oprogramowaniu „jakości badawczej”. Gratulujemy wytrwałości i ukończenia studiów!
Misha Brukman