We help IT Professionals succeed at work.

Fortran 90 to C

2,486 Views
Last Modified: 2013-11-08
I was perusing the web and found - in effect - source code to convert fortran code to C.  Unfortunately i'm having difficulties  compiling source.

The question.  Does anyone have an f90 to C or f2C (basically a fortran to C converter - preferably fortran 90 to C/C++?) converter that works in a PC enviornment (Unsure how much difference it make, nonetheless, I'm ruinning XP) that I could obtain?  I've got lots of fortran code to convert.

My 'outside' email would be forums_mp@hotmail.com

Thanks in advance
Comment
Watch Question

jkr
CERTIFIED EXPERT
Top Expert 2012
Commented:
This problem has been solved!
(Unlock this solution with a 7-day Free Trial)
UNLOCK SOLUTION

Author

Commented:

Consider the example referenced in the manual for f2c

------------------------------------
FUNCTION DOT(N,X,Y)
INTEGER N
REAL X(N),Y(N)
DOT = 0
DOT 10 I = 1, N
10  DOT = DOT + X(I)*Y(I)
END

using f2c per the above
Error on line 1 of test2.F: illegal continuation card (starts "FUNCTI")
Error on line 2 of test2.F: illegal continuation card (starts "INTEGE")
Error on line 3 of test2.F: illegal continuation card (starts "REAL X")
Error on line 4 of test2.F: nondigit in statement label field "DOT ="
Error on line 5 of test2.F: nondigit in statement label field "DOT 1"
Error on line 4 of test2.F: unclassifiable statement (starts "0")
Error on line 6 of test2.F: labeled continuation line (starts "10  DO")
Error on line 7 of test2.F: nondigit in statement label field "END  "
   MAIN:
Error on line 5 of test2.F: syntax error
Warning on line 7: missing final end statement
------------------------------------------------------------------------
What all this means is beyond me and cant find anything per the documentation highlighting a fix.
Any ideas?

Commented:
This problem has been solved!
(Unlock this solution with a 7-day Free Trial)
UNLOCK SOLUTION

Commented:
3) This line:

DOT 10 I = 1, N

is ILLEGAL.  It should be (I assume):

DO 10 I = 1, N

Author

Commented:

Truly appreaciate the timely responses.  I have to apologize, I now have a fotran book.  Simply put i've never used fortran in the past.   with some general clean ups,  I sense this function should look like.

integer *n;
// real *x, *y;
float *x, *y;

float dot_(int *n, float* x, float* y)
{
    /* System generated locals */
    integer i__1;
    // real ret_val;
    float ret_val;

    /* Local variables */
    static integer i__;

    /* Parameter adjustments */
    --y;
    --x;

    /* Function Body */
   //  ret_val = (float)0.;
    ret_val = 0.0;

    i__1 = *n;
    for (i__ = 1; i__ <= i__1; ++i__) {
/* L10: */
     ret_val += x[i__] * y[i__];
    }
    return ret_val;
} /* dot_ */

Commented:
BTW, f2c does make C from FORTRAN but the C it makes is NOT very good C.