将Fortran 77翻译为C ++ - 它如何运作?

时间:2015-12-01 08:19:53

标签: c++ fortran fortran77

我试图将以下fortran 77子程序复制到c ++中。

M2_HOME

这是我的翻译

MAVEN_HOME

错误如下。有人可以帮助我并告诉我如何解决?

     subroutine calcul(nb, m, sd, x_min, n, y_w)

     common / speed_1 / v_0
     common / dat1 / x_m
     common / dat2 / x_l0, x_r0, x_lq, e_l, e_r, a1, a2, b1 
     common / sor_arr / x(6500), y(6500), z(6500)
     common / ef_mat / x_f(35000), y_f(35000)

     y_m = y_w - rl_h
     y_ma = rl_h
     y_mi = -rl_h
     x_ma = rb_h
     x_mi = -rb_h

     do 10 i = m, 1, -1
     y_y = z(i) - y_m

     if (y_y.gt.y_ma) goto 10
     if (y_y.le.y_mi) goto 10

     c1_s = y(i) / v_0
     x_l = x_l0 + e_l*c1_s**a1
     x_r = x_r0 + e_r*c1_s**a2
     cl_r = x_r - x_l
     c2_s = x(i) + x_min

    i1 = 1
    i2 = nb
    i3 = 1
    if (mod(i, 2).eq. 0) goto 20
    i1 = nb
    i2 = 1
    i3 = -1

 20 do 30 i = i1, i2, i3
    r_m1 = float(i - 1)
    x_q = c2_s + r_m1*sd - x_l
    x_q = x_q * b1 / c1_r + xl_q

    x_x = x_q - x_m
    if (x_x.gt.x_ma) goto 30
    if (x_x.le.x_mi) goto 30

    n = n + 1
    y_f(n) = y_y
    x_f(n) = x_x

 30 continue
 10 continue

    return
    end  

1 个答案:

答案 0 :(得分:4)

这有点疯狂和大胆,但你可以尝试的是初始化你的局部变量。

例如:

struct speed sp = {0};
struct dat1 d1 = {0};
struct dat2 d2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

如果你真的疯了,你甚至可以考虑使用0以外的其他值 - 实际上这个算法 sense 的东西会很棒!!!

注意:我对Fortran没有丝毫的线索,也没有研究代码的其他问题。