带有参数列表的Fortran类型定义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有参数列表的Fortran类型定义相关的知识,希望对你有一定的参考价值。

请看一下这段代码,为什么有问题,我怎么能这样做呢?

program main
type matrix(m,n)
    integer::m,n
    double precision,dimension(1:m,1:n)::value
end type matrix

type(matrix(2,3))::B
print*,"OK"
end program

另一个问题是:我可以在类型定义或模块定义后跟参数列表吗?因为我从书中看到了这个代码,不知道为什么我无法编译它。

答案

暂且不考虑MSB关于定义matrix的观点,如果你有一个最新的编译器,你可以定义和声明一个参数化的定义类型,就像这样:

type matrix(m,n,k)
    integer, len :: m,n
    integer, kind :: k
    real(kind=k), dimension(m,n) :: elements
end type matrix

...

type(matrix(4,3,selected_real_kind(0.0)) :: the_matrix

注意:

  • 并非所有广泛使用的Fortran编译器都实现了2008标准的这一特性;
  • 参数m,n,k在其声明中有一个特殊属性,lenkind;
  • 我已经包含kind-type参数只是为了表明它存在,在定义参数化派生类型时没有必要包含它。
另一答案
program main

type matrix
    integer:: m, n
    double precision, dimension(:,:), allocatable :: value
end type matrix

type (matrix) :: mat1, mat2


mat1 % m = 2
mat1 % n = 3
allocate ( mat1 % value ( mat1 % m, mat1 % n ) )
mat1 % value = 5.0

mat2 % m = 4
mat2 % n = 5
allocate ( mat2 % value ( mat2 % m, mat2 % n ) )
mat2 % value = 6.0

print*,"OK"
end program

一个很好的例子,但是没有理由在实际代码中创建这个特定的用户定义类型,因为你可以用lboundubound获得矩阵的边界 - 你不必将它们存储在一个类型中。

以上是关于带有参数列表的Fortran类型定义的主要内容,如果未能解决你的问题,请参考以下文章

fortran调用 带有参数 且 返回类型为数组的函数 及 相关歧义分析

fortran调用 带有参数 且 返回类型为数组的函数 及 相关歧义分析

Visual Studio 自定义代码片段在方法定义的参数列表中不起作用

mpifort -DMPI 编译错误:派生类型“mpi_status”用作实际参数。适用于英特尔 Fortran,但不适用于 GNU Fortran

带有复选框和自定义适配器的 ListView,片段无法正常工作

在片段中创建自定义列表视图时出错。必需的活动,找到的片段