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ą
DO
pętle iIF
instrukcje. 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 f2c
ogó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.