Czy istnieje zestaw open source dla solverów ODE dla C korzystających z rodzimego typu kompleksu C99?

12

Używam GSL jako podstawy wielu moich symulacji, ale jest to trochę przesada dla moich celów i określa swój własny złożony typ ze względów starszych. Czy zamiast kodu mojego własnego solvera ODE Runge-Kutta, który prawdopodobnie nie byłby bardzo wydajny, czy istnieją jakieś solwery ODE typu open source, które używają natywnego typu kompleksu C99?

qubyte
źródło
Nie wiem, gdzie chcesz go używać, ale ogólnie RK jest dość trudny do wdrożenia w nieefektywny sposób ... Czy wykonałeś jakieś testy porównawcze, które wykazały, że masz ten problem?
Mbq
2
Żaden. Nie napisałem własnego, ponieważ nie chcę wymyślać koła na nowo. Jeśli będę musiał, zrobię to, ale znalezienie czasu na coś, co nie jest zepsute, nie jest teraz dla mnie kartą. Jeśli pojawi się odpowiedź, tego właśnie szukam, nie będę w stanie jej użyć, jeśli przez kilka miesięcy. Ponadto RK nie zawsze jest tym, czego potrzebuję, tylko tym, dla czego znam algorytm.
qubyte
Nawiasem mówiąc, przez większość czasu wykonuję symulacje małych układów kwantowych. Ale nie wyłącznie.
qubyte
Odradzałbym samodzielne wdrażanie RK o zmiennej wielkości (z wyjątkiem celów edukacyjnych). W znalezieniu optymalnego rozmiaru kroku zaangażowanych jest wiele heurystyk.
Jitse Niesen
Jak powiedziałem, każde szybkie napisanie byłoby złe lub wolne. Czy szczególnie trudno jest wdrożyć RK ze złożonymi wejściami / wyjściami? Wiem, że możesz po prostu podzielić go na dwie prawdziwe części, ale to trochę denerwujące!
qubyte

Odpowiedzi:

10

Możesz uznać to za „ przesadę ”, ale pakiet integracji czasowej PETSc może być używany z kompleksem C99 (konfiguracja --with-scalar-type=complex). Obsługiwane metody obejmują

Te implementacje są najbardziej odpowiednie dla problemów wysokowymiarowych, takich jak częściowo dyskretne równania różniczkowe cząstkowe (metoda linii).

Jed Brown
źródło
Jest trochę duży, ale nie wiedziałem o tym, więc +1. Idealnie, cokolwiek użyję, nie będzie większe niż GSL. Rzucę okiem na instrukcję i zobaczę, co myślę.
qubyte
Żeby było jasne, łączysz się z tymi bibliotekami podczas kompilacji. Czy to prawda?
qubyte
Nic nie jest powiązane w czasie kompilacji. Zawsze. Łączenie odbywa się po kompilacji (nawet jeśli kompilator wywołuje linker). Możesz dynamicznie ładować bibliotekę, ale będziesz potrzebować nagłówków, aby skompilować kod, aby wywołać bibliotekę. Jeśli to nie odpowiada na twoje pytanie, wyjaśnij, co chcesz zrobić.
Jed Brown,
Oczywiście masz rację. Głupi błąd, ale wiedziałeś, co mam na myśli. Moje pytanie byłoby lepiej sformułowane jako „Czy mam link do tych bibliotek?” w przeciwieństwie do kompilacji bitów, których potrzebuję w tym samym czasie, co mój własny kod, jak ma to miejsce w przypadku Boost. Wiem, że wywoływanie funkcji z biblioteki będzie wymagało nagłówków, robię to już od jakiegoś czasu.
qubyte
Tak, kompilujesz PETSc niezależnie od aplikacji. To nie jest tylko nagłówek jak Boost.
Jed Brown,
1

Inną opcją, którą masz, chyba że system jest dość skomplikowany, jest po prostu konwersja złożonej notacji na problem z dwiema niewiadomymi, które reprezentują rzeczywistą i wymyśloną część. Następnie możesz użyć standardowego solwera ODE o wartości rzeczywistej.

Wolfgang Bangerth
źródło
Właśnie tego staram się unikać. W rzeczywistości integratory GSL są prawdziwe tylko wtedy, gdy pamięć służy, więc to właśnie robię w tej chwili.
qubyte