2

みんなが元気でいることを願っています。私は現在、プロジェクトを進めており、いくつかのプログラミング手法を扱うのに苦労しています。

私のプロジェクトを要約すると、PRO/II というシミュレーション ソフトウェアで使用できるように、Fortran でいくつかのコードを変更する必要があります。すべての関数とサブルーチンは既に作成されています。

ただし、コードを PRO/II と互換性を持たせるには、Fortran での入力データ (ユーザー自身による入力) の割り当て方法を変更する必要があります。実際、以前は、ユーザーがテキスト ファイルにデータを入力し、それを fortran サブルーチンが読み取っていました。

しかし、現在では、データはシミュレーション ソフトウェアに直接入力されます。すべての入力データをサブルーチンに記録するコードを書くことができました。しかし、PRO/II でシミュレーションを実行すると、入力データは「メイン サブルーチン」にのみ関連付けられます。メイン サブルーチン以外の関数やサブルーチンから値にアクセスすることはできません。実際、PRO/II はメイン サブルーチンの引数にのみ値を与えます。

そこから、メインサブルーチンから関数を呼び出すと問題ありません。問題になるのは、他の関数またはサブルーチンを呼び出す関数です。私は自分自身をできるだけ明確にしようとします。したがって、サブルーチン X と、次のような多くの関数とサブルーチンがあるとします。

Subroutine X


End Subroutine


Function A(variables)

Uses Functions B and C

End Function

Function B(variables)

Uses Function D and E

End Function

Function C(variables)

Uses functions D and E

End Function

Function D(variables)

End function

Function D(variables)

End Function

Function E(variables)

End Function

したがって、問題は、メイン サブルーチンで計算した値、または Fortran プログラムに送信される PRO/II に入力した値に、関数 D および E からアクセスできないことです。メイン サブルーチンからテキスト ファイルを取得し、さまざまな関数とサブルーチンによって毎回すべての値を読み取ります。しかし、PRO/II でシミュレーションを実行するには時間がかかります。80 個の関数と 20 個のサブルーチンがあり、呼び出されるたびにテキスト ファイルを開いて値を読み取ります。

テキスト ファイルから読み取ることなく、すべての関数とサブルーチンで値を読み取る方法はありますか? つまり、メイン サブルーチンで計算したすべての変数を、プログラム内のすべての関数とサブルーチンに適用する方法はありますか?

私は本当にそれを理解するのに苦労しています。

問題が分からない場合や質問がある場合は、お知らせください。

助けてくれてありがとう。

4

1 に答える 1

3

値を の変数に入れることができmoduleuseそのモジュールをすべての関数とサブルーチン、およびメイン プログラムに入れることができます。

以下に小さな例を示します。

module globVar
  implicit none

  integer :: var1
end module

module calculus

contains
  function doStuff(input)
    use globVar, only: var1
    implicit none
    integer,intent(in)  :: input
    integer             :: doStuff

    doStuff = input*var1
  end function
end module calculus


program test
  use globVar
  use calculus

  implicit none

  write(*,*) 'Enter "var1"'
  read *,var1

  write(*,*) doStuff(2)
end program
于 2013-10-20T11:36:56.000 に答える