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.
źródło
Odpowiedzi:
Zakładając, że problem polega na tym, że
DAEPACK
działa on w trybie 32-bitowym, ale nie w trybie 64-bitowym, oto kilka metod rozwiązania tego problemu.Kompiluj
DAEPACK
w trybie 32-bitowym w 64-bitowym systemie operacyjnymZobacz, 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
DAEPACK
bezpieczne środowiskoUtwórz pełne 32-bitowe środowisko na maszynie wirtualnej, używając np. VirtualBox , który z
DAEPACK
przyjemnoś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.Pobierz dane wyjściowe
DAEPACK
i 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!
źródło