- Fortran 教程
- Fortran - 首页
- Fortran - 概述
- Fortran - 环境设置
- Fortran - 基本语法
- Fortran - 数据类型
- Fortran - 变量
- Fortran - 常量
- Fortran - 运算符
- Fortran - 决策
- Fortran - 循环
- Fortran - 数字
- Fortran - 字符
- Fortran - 字符串
- Fortran - 数组
- Fortran - 动态数组
- Fortran - 派生数据类型
- Fortran - 指针
- Fortran - 基本输入输出
- Fortran - 文件输入输出
- Fortran - 过程
- Fortran - 模块
- Fortran - 本征函数
- Fortran - 数值精度
- Fortran - 程序库
- Fortran - 编程风格
- Fortran - 调试程序
- Fortran 资源
- Fortran - 快速指南
- Fortran - 有用资源
- Fortran - 讨论
Fortran - 构造函数
下表描述了构造函数
函数 | 描述 |
---|---|
merge(tsource, fsource, mask) | 此函数连接两个数组。如果 mask 中的条件为 .true.,则它给出 tsource 中的元素;如果 mask 中的条件为 .false.,则给出 fsource 中的元素。两个字段 tsource 和 fsource 必须具有相同的类型和相同的形状。结果也具有此类型和形状。此外,mask 必须具有相同的形状。 |
pack(array, mask, vector) | 它在 mask 的控制下将数组打包到向量中。逻辑数组 mask 的形状必须与数组的形状一致,否则 mask 必须是标量。如果包含 vector,它必须是秩为 1(即向量)的数组,其元素至少与 mask 中为真的元素一样多,并且与数组具有相同的类型。如果 mask 是值为 .true. 的标量,则 vector 必须具有与数组相同数量的元素。 |
spread(source, dim, ncopies) | 它返回一个与参数 source 类型相同的数组,其秩增加一。参数 dim 和 ncopies 为整数。如果 ncopies 为负数,则改为使用零。如果 source 是标量,则 spread 变为一个向量,其中包含 ncopies 个元素,所有这些元素都与 source 的值相同。参数 dim 指示要扩展哪个索引。它必须在 1 和 1+(source 的秩) 之间,如果 source 是标量,则 dim 必须为 1。参数 ncopies 是新维度中元素的数量。 |
unpack(vector, mask, array) | 它在 mask 的控制下将向量分散到数组中。逻辑数组 mask 的形状必须与数组的形状一致。数组 vector 必须具有秩 1(即它是一个向量),其元素至少与 mask 中为真的元素一样多,并且还必须与数组具有相同的类型。如果 array 给定为标量,则将其视为与 mask 形状相同且在所有位置都具有相同标量元素的数组。 结果将是一个与 mask 形状相同且与 vector 类型相同的数组。值将是来自 vector 的那些被接受的值,而在数组中的其余位置将保留旧值。 |
示例
以下示例演示了该概念
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_arrays.htm
广告