簡體   English   中英

Fortran 90陣列子集

[英]Fortran 90 array subsets

我正在嘗試閱讀一些Fortran代碼,但是像這樣的數組子集操作卻有些我無法理解

假設n = 3

和數組

INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12)
REAL(KIND=dp)   :: P(n+1),P0(n)

這條線到底是做什么的?

DO i=1,n-1
  …..
  P(3:i+2) = P(3:i+2) - i*P0(1:i) / (i+1)
  ….
END DO

它是嵌套循環嗎? j3i+2Pk1iP0

提前致謝。

走線

P(3:i+2) = P(3:i+2) - i*P0(1:i) / (i+1)

並將i替換為1do循環中的第一個值)

P(3:3) = P(3:3) - 1*P0(1:1) / 2

在lhs上,您有一個從元素3到元素3的數組P切片 (或部分),因此在這種情況下,只有一個元素-但數組切片仍然不是標量。 通過將數組P0 (相同大小)的切片減去1倍並除以2來更新此值。

在下一次迭代中, i==2

P(3:4) = P(3:4) - 2*P0(1:2) / 3

現在數組切片現在每個都是2個元素。 對數組切片的操作將應用於每個數組中的相應元素,因此該語句大約等於這兩個語句

P(3) = P(3) - 2*P0(1) / 3
P(4) = P(4) - 2*P0(2) / 3

最好以Fortran的方式將其視為對數組節的操作,而不是將其作為嵌套循環的某種語法糖。

暫無
暫無

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

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