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  

上一篇: Fortran查询函数 下一篇: Fortran重塑函数