0
ARPACKからFortran関数dsaupdを呼び出そうとしています。私は、コードがコンパイルされ、最初の「ここ」プリントアウトにしますarpackのためにcからfortran 77を呼び出す
int ido = 0;
int ncv = 2*numeigs;
int maxiter = 30;
double tol = 1e-13;
double * v = (double *) malloc(numcols * ncv *sizeof(double));
int iparam[11] = {1, 0, maxiter, 1, 0, 0, 1, 0, 0, 0, 0};
int ipntr[11];
double * workd = (double *) malloc(3*numcols*sizeof(double));
int lworkl = ncv*(ncv + 8);
double * workl = (double *) malloc(lworkl*sizeof(double));
int arpack_info = 0;
char bmat = 'I';
char which[2] = {'L', 'M'};
MPI_Barrier(comm);
if (mpi_rank == 0) {
printf("Here!\n");
dsaupd_(&ido, &bmat, &numcols, which,
&numeigs, &tol, vector,
&ncv, v, &numcols,
iparam, ipntr, workd,
workl, &lworkl, &arpack_info);
printf("Here!\n");
}
でdsaupd呼び出す前に、私は、以前のプログラムのintとしてNUMCOLSを定義しnetlib-java
extern void dsaupd_(int *ido, char *bmat, int *n, char *which,
int *nev, double *tol, double *resid,
int *ncv, double *V, int *ldv,
int *iparam, int *ipntr, double *workd,
double *workl, int *lworkl, int *info);
からC宣言を使用しましたしかし、それ以降はストールします。どのようなアイデアを私は間違ってやっているか、またはこの呼び出しをデバッグする方法?
1)Cで 'malloc'&friendsの結果をキャストしないでください。2)複合型の初期化子は定数でなければなりません。 – Olaf
私はそれらの両方を試しましたが、まだストールしています。イニシャライザは理にかなっています(ここでmaxiterは定数なので、問題ではありません)が、mallocを正しい型にキャストしないのはなぜですか? – AatG
'maxiter'は決まって定数ではなく、変数です。修飾子が 'const'であっても、それは定数ではありません。 CはC++ではなく、非常に限られた_enum-constants_以外の記号定数はありません。 – Olaf