簡體   English   中英

Fortran中的數據語句錯誤

[英]Error in data statement in Fortran

我要編譯的Fortran項目中的一部分代碼是

  implicit double precision (a-h,o-z)
  dimension fact(1:5)
  data fact / 
  d660p=rpt1*dp(6,beta2,rpt1)*d3(0,6,0,beta2,rpt1,rpt2,rpt3)
 1     +rpt2*dp(6,beta2,rpt2)*d3(6,0,0,beta2,rpt1,rpt2,rpt3)
  d606p=rpt1*dp(6,beta2,rpt1)*d3(0,0,6,beta2,rpt1,rpt2,rpt3)
 1     +rpt3*dp(6,beta2,rpt3)*d3(6,0,0,beta2,rpt1,rpt2,rpt3)
  d066p=rpt2*dp(6,beta2,rpt2)*d3(0,0,6,beta2,rpt1,rpt2,rpt3)
 1     +rpt3*dp(6,beta2,rpt3)*d3(0,6,0,beta2,rpt1,rpt2,rpt3)
  d633p=rpt1*dp(6,beta3,rpt1)*d3(0,3,3,beta3,rpt1,rpt2,rpt3)
 1     +rpt2*dp(3,beta3,rpt2)*d3(6,0,3,beta3,rpt1,rpt2,rpt3)
 1     +rpt3*dp(3,beta3,rpt3)*d3(6,3,0,beta3,rpt1,rpt2,rpt3)
  d363p=rpt1*dp(3,beta3,rpt1)*d3(0,6,3,beta3,rpt1,rpt2,rpt3)
 1     +rpt2*dp(6,beta3,rpt2)*d3(3,0,3,beta3,rpt1,rpt2,rpt3)
 1     +rpt3*dp(3,beta3,rpt3)*d3(3,6,0,beta3,rpt1,rpt2,rpt3)
  d336p=rpt1*dp(3,beta3,rpt1)*d3(0,3,6,beta3,rpt1,rpt2,rpt3)
 1     +rpt2*dp(3,beta3,rpt2)*d3(3,0,6,beta3,rpt1,rpt2,rpt3)
 1     +rpt3*dp(6,beta3,rpt3)*d3(3,3,0,beta3,rpt1,rpt2,rpt3)/

但是,編譯會產生以下錯誤

mc.f(2003): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT> ...

  data fact /
------------------^

mc.f(2018): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT> ...
 1     +rpt3*dp(8,beta8,rpt3)*d3(0,6,0,beta8,rpt1,rpt2,rpt3) /
------------------------------------------------------------------^
compilation aborted for mc.f (code 1)

有人知道如何使代碼正常工作嗎?

您得到的語法錯誤是因為data fact /單獨地在一行上,在斜杠后沒有任何內容。 編譯器需要一個常量或參數名稱,並告訴您。 照原樣, data語句不完整。 (感謝High Performance Mark指出這一點。我在較早的答案中錯過了這一點。)

你可以讓編譯器對待整個data通過使用在后,每行連續標記語句到結束斜杠為單行data線。 您的延續僅繼續數據內部的表達式。 (並且data的項目應以逗號分隔。)

但是,修復延續和逗號不會使代碼編譯。

程序啟動時, data語句將初始化變量。 因此,斜杠之間的數字必須是常量或命名parameters 您不能使用表達式,甚至不能使用常量表達式。 (表達式3*0.0data內部具有特殊含義;它表示零值的三倍,即0.0, 0.0, 0.0 。)

如果要初始化數組,請使用賦值,賦值將根據變量的當前值來計算條目:

  fact(1) = rpt1*dp(6,beta2,rpt1)*d3(0,6,0,beta2,rpt1,rpt2,rpt3)
 1        + rpt2*dp(6,beta2,rpt2)*d3(6,0,0,beta2,rpt1,rpt2,rpt3)

或者,如果您還需要中介變量:

  d660p = rpt1*dp(6,beta2,rpt1)*d3(0,6,0,beta2,rpt1,rpt2,rpt3)
 1        + rpt2*dp(6,beta2,rpt2)*d3(6,0,0,beta2,rpt1,rpt2,rpt3)

  fact(1) = d660p

順便說一下,您的數組有五個條目,但是您正在嘗試初始化六個。 implicit變量命名也不是一個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM