小编Mar*_*Fly的帖子

如何将C++中的2D数组传递给Fortran子例程?

我正在编写一个小型的C++程序,它将一个二维数组(复数)传递给一个Fortran子程序,然后将它接收回来填充值.我写了一个通过并接收一维数组的版本,这很有效.2-D版本不起作用(我的真正目标是编写具有大尺寸的4-D版本 - 因此必须动态分配这些数组).

我将发布我的工作代码和非工作代码,但首先请注意我被迫使用结构(简单的,只包含两个双精度),因为Fortran似乎以与其自身的原始复数完全相同的方式解释它们.这就是我的1-D版本有效的原因.出于同样的原因,我不认为这是一个"复杂数字"的问题.

这是我的工作代码.将一维复数数组传递给Fortran子程序:

Fortran子程序:

subroutine carray(A)
complex*16 A(2)

A(1) = cmplx(3,7)
A(2) = cmplx(9,5)

return
end
Run Code Online (Sandbox Code Playgroud)

C++代码:

include <iostream>
include <complex>
using namespace std;

struct cpx{double r, i;};

extern"C"
{
   void carray_(struct cpx* A);
}

int main()
{
   struct cpx* A;
   A = new struct cpx [2];

   carray_(A);

   complex<double>* P;
   P = new complex<double> [2];

   for(x = 0; x < 2; x++)
   {
      real(P[x] = A[x].r;
      imag(P[x] = A[x].i;
   }

   cout << real(P[0]) << "\t" << imag(P[0]) << …
Run Code Online (Sandbox Code Playgroud)

c++ fortran

5
推荐指数
2
解决办法
6972
查看次数

标签 统计

c++ ×1

fortran ×1