MakefileのBlockSolve.oエラー

MakefileのBlockSolve.oエラー

Enzoプロジェクトシミュレーションを実行し、Webサイトに記載されている手順に従ってください。https://enzo.readthedocs.io/en/latest/user_guide/bootcamp.html。エラーが発生しており、インターネット検索では、私が正確に何を間違っているのかわかりません。私が受け取ったエラーは次のとおりです。

Compiling BlockSolve.F
gfortran  -c -o BlockSolve.o -fno-second-

underscore -m64 -g -DLINUX -DH5_USE_16_API   -D__max_subgrids=100000 -D__max_baryons=30 -D__max_cpu_per_node=8 -D__memory_pool_size=100000 -DINITS64 -DLARGE_INTS -DCONFIG_PINT_8 -DIO_32    -DUSE_MPI   -DCONFIG_PFLOAT_8 -DCONFIG_BFLOAT_8  -DUSE_HDF5_GROUPS   -DTRANSFER   -DNEW_GRID_IO -DFAST_SIB      -DENZO_PERFORMANCE    -DUSE_UUID -DSAB BlockSolve.F
    
BlockSolve.F:1070:11:

 1070 |       NB = ILAENV( 1, 'UGETRF', ' ', M, N, -1, -1 )
      |           1
Error: Type mismatch in argument 'ispec' at (1); passed INTEGER(4) to INTEGER(8)
BlockSolve.F:1070:11:

 1070 |       NB = ILAENV( 1, 'UGETRF', ' ', M, N, -1, -1 )
      |           1
Error: Type mismatch in argument 'n3' at (1); passed INTEGER(4) to INTEGER(8)
BlockSolve.F:1070:11:

 1070 |       NB = ILAENV( 1, 'UGETRF', ' ', M, N, -1, -1 )
      |           1
Error: Type mismatch in argument 'n4' at (1); passed INTEGER(4) to INTEGER(8)
BlockSolve.F:932:30:

  932 |          JP = J - 1 + e_idamax( M-J+1, A( J, J ), 1 )
      |                              1
Error: Type mismatch in argument 'incx' at (1); passed INTEGER(4) to INTEGER(8)
BlockSolve.F:2628:18:

 2628 |          ILAENV = IEEECK( 0, 0._RKIND, 1._RKIND )
      |                  1
Error: Type mismatch in argument 'ispec' at (1); passed INTEGER(4) to INTEGER(8)
BlockSolve.F:2639:18:

 2639 |          ILAENV = IEEECK( 1, 0._RKIND, 1._RKIND )
      |                  1
Error: Type mismatch in argument 'ispec' at (1); passed INTEGER(4) to INTEGER(8)

make: *** [BlockSolve.o] Error 1

答え1

これはMakefileエラーではありません。作る正しい動作:BlockSolve.F Fortranソースコードに6つの言語エラー(1070行に3つのエラー、932、2628、および2639行にそれぞれ1つ)があるため、ビルドが停止しました。

コンパイル時エラーを修正し、 make は次のステップに進みます。

すべてのエラーは、INT(8)が必要な関数にINT(4)変数を渡すことに関連しています。これは、ダウンロードしたソースコードが以前のFortran標準用であるか、ユーザーとは異なるアーキテクチャ用であるためです。

引用した文書には実際には「これは矛盾を引き起こします。 」正しい設定(MACH_FFLAGS_INTEGER_64など)になり、さまざまなアーキテクチャとオペレーティングシステム用に複数のmakefileが提供されます。

この記事では、これらの問題を解決するのに役立つフォーラムへのリンクも提供しますenzo-users

関連情報