i****d 发帖数: 255 | 1 问题:
在C中定义一个二维数组的指针 double **zzz,动态分配其空间.希望传递
zzz到一个Fortran 77子程序中操作,如何实现?
多谢!
附我的理解和尝试
1)如果zzz本身是一个静态二维数组,比如 zzz[5][3], 我们知道可以用
fsub_(zzz[][3])
传递,没有问题.
2) 我的问题中zzz所指的二维数组有一维的长度是固定的,比如说3.我试了用
fsub_(zzz[][3])
不成功.
3) 查了一些网上的例子. 有在Fortran中动态分配数组然后传回C的,但没有和我类似的
例子. | o**o 发帖数: 3964 | 2 不要搞2维数组。开线性的整块内存,自己管理维数。维数作为参数传给子程序。
唯一要注意的是Fortran是列优先,所以相对于C的行和列的定义是反的。
具体可以参考CLAPACK的接口是怎么定义的。撇开数组指针和动态分配,能更好
地把注意力集中到Fortran擅长的任务上。
【在 i****d 的大作中提到】 : 问题: : 在C中定义一个二维数组的指针 double **zzz,动态分配其空间.希望传递 : zzz到一个Fortran 77子程序中操作,如何实现? : 多谢! : 附我的理解和尝试 : 1)如果zzz本身是一个静态二维数组,比如 zzz[5][3], 我们知道可以用 : fsub_(zzz[][3]) : 传递,没有问题. : 2) 我的问题中zzz所指的二维数组有一维的长度是固定的,比如说3.我试了用 :
| r*********r 发帖数: 3195 | 3 是练手还是实用?
要实用的, boost::multi_array 不错.
可以规定内存用fortran的方式存放. | i****d 发帖数: 255 | 4 谢谢二位!
实用。自己的C程序和别人的Fortran程序。
【在 r*********r 的大作中提到】 : 是练手还是实用? : 要实用的, boost::multi_array 不错. : 可以规定内存用fortran的方式存放.
| O******e 发帖数: 734 | 5 Don't use anything like **x in Fortran. It is detrimental to optimization.
Fortran arrays regardless of dimensionality are basically C pointers like *x.
Fortran pointers have no equivalent in C.
If you insist on using a Fortran equivalence of **x for 2D arrays, read the
C interoperability chapter in Metcalf, Reid, and Cohen's Fortran 2003
Explained.
Also look up "assumed-shape arrays" in a good Fortran textbook.
【在 i****d 的大作中提到】 : 问题: : 在C中定义一个二维数组的指针 double **zzz,动态分配其空间.希望传递 : zzz到一个Fortran 77子程序中操作,如何实现? : 多谢! : 附我的理解和尝试 : 1)如果zzz本身是一个静态二维数组,比如 zzz[5][3], 我们知道可以用 : fsub_(zzz[][3]) : 传递,没有问题. : 2) 我的问题中zzz所指的二维数组有一维的长度是固定的,比如说3.我试了用 :
| k******n 发帖数: 35 | 6 I believe most people use Fortran for some computational libs. In these
cases, you do not need two dimensional array. One dimensional will serve
most purposes. |
|