1

特定の fortran 標準を使用せずに、科学的な fortran コードを作成しました。しかし、ここで、使用している fortran 標準を宣言する必要があります。

get_command_argument および command_argument_count 組み込み関数が必要なため、fortran 2003 を使用していると言いました。ただし、フラグ -std=f2003 を使用してコード標準をチェックすると、コンパイルは失敗します。

一部で実数の型宣言に関するエラーが発生します。たとえば、モジュールで変数を宣言すると、次のようになります。

module innout
implicit none
real*8,parameter               :: nan=-1.
real*8,allocatable,save        :: windU(:),windV(:)
real*8,allocatable,save        :: input_param(:,:),input_rad(:,:)
real*8,allocatable,save        :: prein(:),input(:),ref_lev(:)
character(30),allocatable,save :: sceneclass(:)
end module innout

すべての実数変数で「非標準型宣言 REAL*8」というメッセージが表示されます。

誰が何が起こっているか知っていますか?

4

3 に答える 3

2

real*8Fortran 標準の型宣言ではありません。最近では、64 ビット実数を宣言する最も簡単な方法は、次のように組み込みモジュールから名前付き定数をインポートすることです。 real64iso_fortan_env

use, intrinsic :: iso_fortran_env
...
real(real64) :: my_var

関与する方法selected_real_kindやその他のメカニズムは他にもありますが、IEEE 浮動小数点型を使用してプログラムする場合real64real32、良い方法です。

@AlexanderVogt がコメントで指摘したように、これらの標準の名前付き定数は 2008 標準で言語に追加されました。私が使用した最新のコンパイラ バージョンでは、既にそれらが実装されています。

于 2015-03-04T13:14:14.987 に答える
1

指定子はkind行く方法です...

Fortran 2003 標準に制限する場合は、最初にkind()orselected_real_kind()関数を使用して対応する種類を決定する必要があります。

module innout
  implicit none
  integer,parameter                  :: REAL64 = kind(1.d0)

  real(kind=REAL64),parameter        :: nan=-1._REAL64
  real(kind=REAL64),allocatable,save :: windU(:),windV(:)
  real(kind=REAL64),allocatable,save :: input_param(:,:),input_rad(:,:)
  real(kind=REAL64),allocatable,save :: prein(:),input(:),ref_lev(:)
  character(30),allocatable,save     :: sceneclass(:)
end module innout

コンパイラが Fortran 2008 をサポートすることが許可されている場合は、モジュールISO_Fortran_envと事前定義された定数をお勧めしREAL64ます。

module innout
  use,intrinsic :: ISO_Fortran_env, only: REAL64
  implicit none
  real(kind=REAL64),parameter         :: nan=-1._REAL64
  real(kind=REAL64),allocatable,save  :: windU(:),windV(:)
  real(kind=REAL64),allocatable,save  :: input_param(:,:),input_rad(:,:)
  real(kind=REAL64),allocatable,save  :: prein(:),input(:),ref_lev(:)
  character(30),allocatable,save      :: sceneclass(:)
end module innout
于 2015-03-04T13:14:22.247 に答える