蛙の井戸見聞記 Pretty frog in a well who knows nothing of the great web ocean!

~~ 好奇心は猫をも殺す Curiosity Kills the Cat ~~ ♪欲しいモノ・食べたいモノ・ネットで集めた情報と日々の記録の倉庫♪ Logging my life... Since 2003.12  

XcodeでFortranのコンパイル

  • Xcode 2.4とXcode 3.0で、プラグインのバージョンが違うので注意。
    • 2.4の方はインストーラーがついているので、クリック&クリックでインストール完了できる模様。
    • 最新版3.0の方は手動でコピーする必要がある。
  • さて、準備が整ったら、早速XcodでFortranでプログラム。
    1. 新規プロジェクトをCommand Line ToolsのStandard Toolで作製。
    2. その後、Sourceを右クリックまたはコントロール+クリックして、新規ファイルでFortranのuntitled.fを追加。
  • Fortranのプログラムは、subroutineにしておいて、main.cの方でサブルーチンを駆動するような形でコンパイル&起動する。

つまり、main.cでは

test_();

fortran.fでは

subroutine test
ここにプログラムの本体
end

とすればよい。

  • したがって、C言語中でFortranの関数を使用できるということになる。。
  • C言語Fortranでは、変数の与え方や配列の方向が違うので注意。下記、参考プログラム参照。

に載っている。

参考プログラム:

  • main.c
int main (int argc, const char * argv[]) {
	int i,j;
	double a[3][3],b,c[3][3];

	printf("-------------------\n");
        printf("Hello, World! from C \n");	
	
	printf("set the variable b and matrix a[3][3]\n");
	b=999.0;
	printf("real numnber b=%f\n",b);
	for(i=0;i<=2;i++){
		for(j=0;j<=2;j++){
			a[i][j]=i*j+j*j+j;
			printf("%f\t",a[i][j]);
		}
		printf("\n");
	}
	printf("-------------------\n");
	test_();
	test2_(a,&b);
	printf("-------------------\n");
	
	printf("Convert from a[i][j] to c[j][i] \n",b);
	for(i=0;i<=2;i++){
		for(j=0;j<=2;j++){
			c[i][j]=a[j][i];
			printf("%f\t",c[i][j]);
		}
		printf("\n");
	}
	
	printf("-------------------\n");
	test_();
	test2_(c,&b);
	printf("-------------------\n");
	
    return 0;
}
      subroutine test
       write(*,*)'Hello from Fortran'	   
       return
       end
!
	   subroutine test2(a,b)
       DOUBLE PRECISION b,a(3,3)
!	   
       INTEGER i,j
       write(*,*) 'b =',b
!	   
       write(*,*)'matrix'	  
       do 10 i=1,3
       write(*,*) (a(i,j),j=1,3)
10     continue
!
	   return
	   end