作为更大程序的一部分,我需要在Fortran中解决一个非常简单的ODE。为了避免必须自己实现解算器(并且在我正确之前肯定会引入一些错误)我想我会使用一个库,如果有的话 - 但我找不到任何有用的东西。
我查看了ODEPACK并找到了re-packaged it的人,但原始发行版是真正毛茸茸的源代码,并且重新打包不会在我的笔记本电脑上构建 - 它会发出一系列有关将INTEGER(8)
和REAL(8)
转换为INTEGER(4)
和REAL(4)
然后停止
gfortran -shared -o libodepack.so opkda1.o opkda2.o opkdmain.o
/usr/bin/ld: opkda1.o: relocation R_X86_64_32 against `dls001_' can not be used when making a shared object; recompile with -fPIC
opkda1.o: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [odepack.so] Error 1
所以我认为它是一个32/64位不兼容问题(我有一个64位处理器)。添加-fPIC
标志作为建议的错误消息没有帮助 - 无论如何我得到了相同的消息。
ODEPACK或类似的东西是否可以以更容易安装的形式用于现代Ubuntu发行版?
答案 0 :(得分:2)
答案 1 :(得分:-1)
为什么你需要一个包呢?对于简单的ODE,您可以在10分钟内编写自己的简单RK功能。这样做可以避免程序中不必要的依赖,并学习一些非常有用的算法。如果你不喜欢这个想法,只要你的程序许可证允许,就可以从其他地方获取一些代码。 F.E.看看John Burkardt先生的收藏。如果你正在编写fortran代码,你应该知道它,但无论如何我在这里给出了两个链接。 http://people.sc.fsu.edu/~jburkardt/f_src/rk4/rk4.html http://people.sc.fsu.edu/~jburkardt/f_src/rkf45/rkf45.html