Fortran建構函式


下表介紹了結構功能:

函式 描述
merge(tsource, fsource, mask) 該功能連線兩個陣列。它給出了tsource及元素,如果mask條件是.true。如果掩碼的條件是.false。這兩個欄位tsource 和fsource 必須是相同的型別並具有相同的形狀。其結果也就是這種型別和形狀。還掩碼必須具有相同的形狀。
pack(array, mask, vector) 它包一個陣列,以使用掩碼的控制向量。邏輯陣列掩模的形狀,具有以符合一個用於陣列,要不然掩碼必須是一個標量。如果載體被包括在內,它必須是秩1與至少一樣多的元素是在掩碼為真,並且具有相同的型別的陣列的陣列(即一個向量)。如果掩碼的值為.true。然後向量代替必須的元件陣列的數量相同。
spread(source, dim, ncopies) 它返回相同型別作為引數源與秩增加一個陣列。引數dim 和ncopies都是整數。如果ncopies是負則用零值來代替。如果source是一個標量,然後擴散變得所有具有相同值 ncopies 元素的向量。引數dim 指示哪個索引將被延長。它必須是範圍為1和1+(源級)中,如果 source 是一個標量,dim 必須是1。引數 ncopies 是在新的尺寸元素的數量。
unpack(vector, mask, array)

它散射一個載體,掩碼下的控制陣列。邏輯陣列掩模的形狀具有以符合一個用於陣列。陣列載體必須具有等級1(即它是一個向量)與至少一樣多的元素是那些掩碼內值都為true,並且還必須具有相同型別陣列。如果陣列被給定為一個標量,然後它被認為是使用相同形狀的掩碼,並在同一標量元素無處不在的陣列。

其結果將是具有相同形狀的掩碼和型別相同的向量陣列。該值將是那些從所接受的載體,而在陣列的剩餘位置的舊值被保留。

範例

下面的例子演示了這一概念:

program arrayConstruction
implicit none
   interface
      subroutine write_array (a)
         real :: a(:,:)
      end subroutine write_array
      
      subroutine write_l_array (a)
         logical :: a(:,:)
      end subroutine write_l_array
   end interface

   real, dimension(2,3) :: tsource, fsource, result
   logical, dimension(2,3) :: mask
   
   tsource = reshape( (/ 35, 23, 18, 28, 26, 39 /), &
                    (/ 2, 3 /) )
   fsource = reshape( (/ -35, -23, -18, -28, -26, -39 /), &
                    (/ 2,3 /) )
   mask = reshape( (/ .true., .false., .false., .true., &
                 .false., .false. /), (/ 2,3 /) )

   result = merge(tsource, fsource, mask)
   call write_array(tsource)
   call write_array(fsource)
   call write_l_array(mask)
   call write_array(result)
   
end program arrayConstruction



subroutine write_array (a)

   real :: a(:,:)
   do i = lbound(a,1), ubound(a,1)
      write(*,*) (a(i, j), j = lbound(a,2), ubound(a,2) )
   end do
   return
   
end subroutine write_array


subroutine write_l_array (a)

   logical :: a(:,:)
   do i = lbound(a,1), ubound(a,1)
      write(*,*) (a(i, j), j= lbound(a,2), ubound(a,2))
   end do
   return
   
end subroutine write_l_array

當上述程式碼被編譯和執行時,它產生了以下結果:

35.0000000   18.0000000   26.0000000    
23.0000000   28.0000000   39.0000000    
-35.0000000  -18.0000000  -26.0000000    
-23.0000000  -28.0000000  -39.0000000    
T F F
F T F
35.0000000   -18.0000000  -26.0000000    
-23.0000000  28.0000000   -39.0000000