関数サブプログラムでサブルーチンを呼び出す必要があり、メイン プログラムで同じサブルーチンを呼び出すことができるプログラムを作成しています。
program main
implicit double precision (a-h,o-z)
parameter (ncmax=20)
dimension z(ncmax)
xI=1.0
xII=2.0
z(1)=1.0
outI = fncn (xI,xII,z,ncmax)
call Sub (xI,xII,xIII,z)
outII = 2.0*xIII
end program
function fncn (xI,xII,z,ncmax)
implicit double precision (a-h,o-z)
dimension z(ncmax)
Call Sub (xI,xII,xIII,z)
fncn = xIII
return
end function
subroutine Sub (xI,xII,xIII,z)
parameter (ncmax=20)
implicit double precision (a-h,o-z)
dimension z(ncmax)
xIII = xI + xII + z(1)
return
end subroutine
これはすべて固定形式の Fortran 77 ('.f' 拡張子) です。表示されるエラーは、セグメンテーション違反です。このサイトの他の投稿のいくつかが示唆するように、モジュールを作成することになっていますか? 私はまだ初心者で、77 でモジュールを作成する方法がわかりません。サブルーチンは、関数とメイン プログラムでアクセスできる必要があります。私の現在のプログラム構造では、関数とサブルーチンが 2 つの別個の .f ファイルに分割されており、main の最後で include ステートメントが使用されています。
このサイトで同様の問題を検索しましたが、fortran 90 に関するヘルプしか見つかりませんでした。gcc 4.6.1 から gfortran を使用しています。
編集:問題を解決しました。関数で呼び出そうとしたサブルーチンには、数値と文字の両方の出力がありました。文字出力を見落としており、文字出力を処理するための文字定義変数がありませんでした。関数内で文字変数を定義すると、すべて正常に機能しました。皆様のご理解とご協力に感謝いたします。