Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 带有参数列表的Fortran类型定义_Types_Fortran - Fatal编程技术网

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

Types 带有参数列表的Fortran类型定义,types,fortran,Types,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 关于这一点的另一个问题是:我可以有一个类型定义或模块定义,后跟一个参数列表吗?因为我从书中看到了这段代码,不知道为什么我不能编译它 pro

请看一看这段代码,为什么会有问题,我该怎么做呢

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
关于这一点的另一个问题是:我可以有一个类型定义或模块定义,后跟一个参数列表吗?因为我从书中看到了这段代码,不知道为什么我不能编译它

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

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

抛开MSB关于定义
矩阵的观察,如果你有一个最新的编译器,你可以定义和声明一个参数化的定义类型,就像这样:

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
    在其声明上有一个特殊属性,即
    len
    kind
  • 我包含了种类类型参数只是为了表明它的存在,在定义参数化的派生类型时不必包含它

谢谢!我还有一个问题!谢谢,看起来GNU和Intel只完全支持fortran95,甚至2003也部分支持,所以我认为这就是原因。几乎没有人完全支持f2003。PGI有时声称他们是这样做的,但实际上他们仍然不完整。此外,它们支持的f2008功能较少。但是如何使用
矩阵
作为伪参数,但未指定参数
m
n
。例如,如果您要创建一个函数
mysum(a)
,它将
a=矩阵(m,n)