関数callFortranSubroutine マニュアル

(The documentation of function callFortranSubroutine)

Last Update: 2021/12/1


◆機能・用途(Purpose)

Fortranで書かれたサブルーチンをC言語プログラム内から呼び出す。 引数がinteger型, real型, real∗8型のみから成るサブルーチンのみ サポートしている。
Call a Fortran subroutine from a C language program. This function supports only the subroutines for which all the arguments are either integer-, real-, or ,real∗8-types.


◆形式(Format)

#include <fortran.h>
inline void callFortranSubroutine
(const char ∗subroutineFile,const char ∗subroutineName,
 const char ∗compilerName,const char ∗format,...)


◆引数(Arguments)

subroutineFile 呼び出したいサブルーチンが格納されているファイル名。
The name of the file in which the subroutine to call is defined.
subroutineName 呼び出したいサブルーチンの名前。
The name of the subroutine to call.
compilerName Fortranプログラムのコンパイルに用いるコマンド名(gfortran等)。
Name of the command used to compile a Fortran program (e.g., gfortran).
format Fortranサブルーチンに渡す引数のフォーマットを表す文字列。 「...」の部分に入る個々の引数のフォーマットを2-3文字ずつで表し、 それらの文字列を「...」における対応する引数の登場順で 半角空白1文字で区切って並べる。
A string that represents the formats of arguments used for the Fortran subroutine. The format of each argument in “...” is represented by 2-3 characters. These characters are separated by single spaces and are deployed in the order of the arguments in “...”.

個々の引数のフォーマットを表す2-3文字のうちの 最初の1文字は引数の型を表し、以下のいずれかとする。
The first character in each of the 2-3 characters to represent the format of each argument indicates the type of the argument, which can be one of the followings.

Fortranサブルーチンにおける引数の型
The type of argument in the Fortran subroutine
この関数での引数の型
The type of argument in this function
文字
The character
integer int ∗ i
real float ∗ f
real double ∗ F
real∗8 double ∗ d

個々の引数のフォーマットを表す2-3文字のうちの残りの部分(2-3文字目)は 引数が入力用か出力用かを表す。以下のいずれかとする。
The rest part (2-3th characters) in each of the 2-3 characters to represent the format of each argument indicates whether the argument is for input or output, which can be one of the followings.

引数の入出力の種類
Type of input/output of the argument
文字(列)
The character(s)
Fortranサブルーチンへの入力用変数 (先に値を設定した上でFortranサブルーチンに渡す)
A variable used as an input to the Fortran subroutine (i.e., the value needs to be set in advance and given to the subroutine)
i
Fortranサブルーチンからの出力用変数 (Fortranサブルーチン内で値が設定されて変数に格納される)
A variable used as an output from the Fortran subroutine (i.e., the value is set by the subroutine and stored in this variable)
o
入出力兼用 (先に値を設定した上でFortranサブルーチンに渡し、 サブルーチン内で値が修正されて変数に格納される)
A variable used for both input and output (i.e., the value needs to be set in advance and given to the subroutine, and then the value is modified by the subroutine and stored in this variable)
io

これらの文字を半角空白で区切って並べる。例えば 「ii Fo di fio iio do」 のような文字列になる。
These characters are deployed and separated by spaces; for example, “ii Fo di fio iio do”.
... Fortranサブルーチンに渡す引数。 サブルーチンと同じ順番で与える。 Fortranサブルーチンでの引数型に応じて以下の型の変数として与える。
The arguments required by the Fortran subroutine, given in the same order as that of the Fortran subroutine. The variable type of each argument is determined from that of the corresponding argument of the Fortran subroutine as follows.
Fortranサブルーチンにおける引数の型
The type of argument in the Fortran subroutine
この関数での可能な引数の型
The types of arguments available in this function
integer int ∗
real float ∗
double ∗
real∗8 double ∗


◆使用例(Example)

(program.c)
#include <inc.h>
int main(void)
{
    double a=1.2;
    int b=3;
    double c;
    callFortranSubroutine ("sub.f90","addint","gfortran", "Fi ii Fo",&a,&b,&c);
    printf("%.1f\n",c);
    return 0;
}

(sub.f90)
subroutine addint(d,e,f)
    implicit none
    real d
    integer e
    real f
    f=d+real(e)
end subroutine addint

このprogram.cを実行すると\(a+b\)の値が\(c\)に代入され、「4.2」と出力される。
By executing this program.c, the value of \(a+b\) is inserted into \(c\), and the result (“4.2”) is displayed.


◆関数内部での処理 (Internal processings in the function)

関数内部ではサブルーチンを呼び出すFortranプログラムが一時ファイルとして作成され、 実行される。
The function creates a Fortran program, as a temporary file, that calls the subroutine.

例えば上記の「使用例」のプログラムを実行すると、 関数によって自動的に以下のFortranプログラムが作成される。
For example, if the program shown by the “Example” above is executed, the function automatically creates a Fortran program shown below.

include ”sub.f90”
program main
implicit none
real :: r1=1.2
integer :: i2=3
real r3
call addint(r1,i2,r3)
write(6,∗) r3
end program main

この例では関数の引数a,bの値が それぞれFortranプログラムにおいて変数r1,i2の値として使用されている。 そしてFortranプログラムから出力されたr3の値が関数の引数cに読み込まれる。
In this example, the values of arguments a and b of the function are used as the values of variables r1 and i2 in the Fortran program. The output value of variable r3 from the Fortran program is then read into the argument c of the function.

作成されたFortranプログラムは自動的にコンパイルされて実行され、 関数を終える前に自動的に削除される。
The Fortran program created is automatically compiled and executed, and removed before escaping the function call.