おっと -- あなたのスーパーバイザーの特定のバージョンの古代の f77 コンパイラーで問題なく動作する古いコードがあるように聞こえますが、標準に準拠したコンパイラーが正しいことをします。
調整可能な配列は次のようなものです。
subroutine mysub(a,n)
integer n
real a(n)
-- つまり、多かれ少なかれ C で行うのと同じ方法で配列を渡します。Fortran90 以降では、形状引き継ぎ配列を使用できます。
subroutine mysub90(a)
real a(:)
n=size(x,1)
これは、コンパイラーが配列の正しいサイズが渡されることを保証するため、非常にクリーンです。
したがって、スーパーバイザーのコードは、おそらく実行時に特定のサイズの配列を作成する方法として、サブルーチンの引数ではないものでこの種の構造を使用しているようです。標準の Fortran77 ではこれが許可されていませんでしたが、いくつかのコンパイラは拡張機能として許可していました。幸いなことに、これを行うための標準的な方法として割付け配列を使用できるようになったので、変数を割付け配列に変更することをお勧めします。
ちなみに、このような問題を事前に発見して追跡できる静的コード分析ツールはたくさんあります。 理解は、多くの問題を見つけることができる〜2週間の評価ライセンスを備えた優れた商用のものです. forcheckは、それほどユーザーフレンドリーではありませんが、非常に完全です。このようなツールを使用して、スーパーバイザーのコードを 2010 年代に引きずり出すのは少し面倒ですが、時間の優れた投資になります。もう 1 つの優れたツール セットは eclipse + photranですが、残念ながら、これは fortran90 の優れたコードがあることを前提としています。これを使用できるようになるまでには、しばらく時間がかかります。
(そして、誰かが fortran について卑劣なコメントをし始める前に -- はい、はい、そこには古いくだらない fortran コードがたくさんありますが、それは今ではほとんど fortran に固有のものではありません.)