最近まで、私は計算問題の大部分に IDL を使用してきました。私が最も頻繁に使用するルーチンの 1 つは、C でラップされ、CALL_EXTERNAL 関数を使用して IDL から呼び出されるちょっとした fortran90 コードです (これは私が書いたものではありません)。さまざまな理由から、計算の大部分を Python に移行していますが、Fortran コードを組み込むための適切な方法がわかりませんでした。F2PY が最も明白な方法のように見えますが、実際には結果として得られるモジュールは非常に不安定なようです。
基本的に、問題にアプローチするためのより良い方法があるかどうか疑問に思っています。既存の C ラッパーと Cython を Python のコードを使用するように作り直すのは比較的簡単なようですが、私は C/Cython について完全に無知であり、Python にはまったく慣れていないことを告白しなければなりません。 .
参考までに、既存の C ラッパーを以下に含めます。
#include <stdio.h>
void bvls(int argc, void *argv[]) {
extern void bvls_();
int *n, *m, *nsetp, *index, *ierr;
double **a, **b, **bnd, **w, **x;
double *rnorm;
a = (double **) argv[0];
m = (int *) argv[1];
n = (int *) argv[2];
b = (double **) argv[3];
bnd = (double **) argv[4];
x = (double **) argv[5];
rnorm = (double *) argv[6];
nsetp = (int *) argv[7];
w = (double **) argv[8];
index = (int *) argv[9];
ierr = (int *) argv[10];
bvls_(a,m,n,b,bnd,x,rnorm,nsetp,w,index,ierr);
}
編集: これを他の誰かに言及した後、中間のCラッパーの必要性をバイパスして、fortran ISO_C_BINDINGSモジュールを使用してCythonと直接インターフェースすることも可能であるべきだと彼らは提案しました。