鍍金池/ 教程/ Java/ Fortran構(gòu)造函數(shù)
Fortran還原功能
Fortran關(guān)系運算符
Fortran運算符優(yōu)先級
Fortran基本語法
Fortran文件輸入輸出
Fortran嵌套select case結(jié)構(gòu)
Fortran變量
Fortran Cycle語句
Fortran語言環(huán)境設(shè)置
Fortran數(shù)據(jù)類型
Fortran數(shù)組
Fortran字符
Fortran if...else if...else 語句
Fortran調(diào)試程序
Fortran編程風(fēng)格
Fortran if...then語句結(jié)構(gòu)
Fortran嵌套循環(huán)
Fortran常量
Fortran循環(huán)
Fortran導(dǎo)出數(shù)據(jù)類型
Fortran字符串
Fortran操作函數(shù)
Fortran do...while循環(huán)結(jié)構(gòu)
Fortran內(nèi)部函數(shù)
Fortran數(shù)字精度
Fortran選擇決策
Fortran重塑函數(shù)
Fortran運算符
Fortran構(gòu)造函數(shù)
Fortran模塊
Fortran位置函數(shù)
Fortran數(shù)字
Fortran指針
Fortran算術(shù)運算符
Fortran exit語句
Fortran動態(tài)數(shù)組
Fortran嵌套if結(jié)構(gòu)
Fortran select case結(jié)構(gòu)
Fortran向量和矩陣乘法函數(shù)
Fortran邏輯運算符
Fortran if...then...else 結(jié)構(gòu)
Fortran教程
Fortran過程
Fortran Stop語句
Fortran基本輸入輸出
Fortran do循環(huán)結(jié)構(gòu)
Fortran查詢函數(shù)

Fortran構(gòu)造函數(shù)

下表介紹了結(jié)構(gòu)功能:

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

它散射一個載體,掩碼下的控制陣列。邏輯陣列掩模的形狀具有以符合一個用于數(shù)組。陣列載體必須具有等級1(即它是一個向量)與至少一樣多的元素是那些掩碼內(nèi)值都為true,并且還必須具有相同類型陣列。如果陣列被給定為一個標(biāo)量,然后它被認為是使用相同形狀的掩碼,并在同一標(biāo)量元素?zé)o處不在的陣列。

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

示例

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

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

當(dāng)上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結(jié)果:

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