表示されているコードは、期待通りにコンパイルして実行する必要があります。私はあなたが実際に1xNの配列を読んでいると仮定しています。そして、あなたが "1X1"と言ったときにそれはタイプミスでした。そうでなければ、minloc
を使用しても意味がありません。
ただし、コメント内で報告したエラーメッセージ(An array-valued argument is required in this context
)は、スカラー値のminloc
組み込み関数を使用した場合にのみ発生します。したがって、私の推測では、dist
を配列として宣言していないと考えられます。ここで私が何を意味するかの簡単な例です:
read(funit1,*) x
で
! The contents of 'values.txt' are: -3.1, 4.1, 5.9, 2.6, -5.4
! Values may be separated by commas or blanks.
program get_min_dist
implicit none
real :: x ! <-- Cannot be used to represent an array.
real, dimension(5) :: a ! <-- An array of 5 reals. Do this instead.
integer :: loc, funit1
open(newunit=funit1, file="values.txt", status="old")
read(funit1,*) x
rewind(funit1)
read(funit1,*) a
close(funit1)
loc = minloc(abs(a-1),1) ! <-- I'm assuming there is a reason to
! subtract 1 from all values in the array
! loc = minloc(abs(x-1),1) ! <-- Error 'An array-valued arg is required`
print*, "x=",x
print*, "a=",a
print*, "index=", loc
print*, "value=", a(loc)
end program get_min_dist
ファイルが読み込まれたとき、最初の値は、あなたが見ているエラーメッセージが得られ、割り当てられます。ただし、配列a
を使用すると、予想される出力が得られます。
のAbaqusはF77スタイルの固定フォーマットでの例とドキュメントを提供し続け、およびFortranのソースコードを必要とするという事実によるかもしれF77互換性のあるコードを使用する必要もありますのでご混乱を与えられることに.Fか。for extension 。既定では、この拡張子はifort
に固定形式のコードを期待するように指示しますです。ただし、使用するコンパイラのバージョンでサポートされているFortranの機能は、固定フォーマットであっても有効です。異なるFortranバージョンの機能の利用可能性の詳細については、ご使用の(Intel Fortran)のマニュアルを参照してください。これは、例えば、何らかの形で変更することができる場合
私が知って喜んでいると思います拡張子は.f90
です。
この設定は、少なくとも私が使用したバージョン(6.9から6.14)のために、Abaqusの環境ファイルで変更することができます。私はそれが新しいリリースでは変わったとは思わないが、多分。特に初心者の方には、同意なしに他のユーザーと環境を共有する場合は、変更することをお勧めしません。
「minloc」はf95ですが、f77専用のコンパイラでabaqusを使用する方法はありません。 – agentp
distとは何ですか?もっとコードを表示してください!宣言を表示します。 'read(99、*)dist 'もFortran 90です。Fortran 90を避ける必要はありません。 –
ありがとうございました。私はFortran 90または95を使用して試してみます。 – Kim