Fortran/结构体
外观
< Fortran
结构体、结构化类型或派生类型 (DT) 最初是在 Fortran 90 中引入的。[1] 结构体允许用户创建包含多个不同变量的数据类型。
派生类型通常在模块中实现,以便用户可以轻松地重复使用它们。 它们还可以包含类型绑定过程,这些过程旨在处理结构体。 参数 pass(name), nopass
指示对象是否应作为第一个参数传递。
类似于 character
数据类型,结构体可以通过两种不同的参数类型进行参数化:kind, len
。 kind
参数必须在编译时已知(由常量组成),而 len
参数可以在运行时更改。
例如,我们可以定义一个新的结构体类型“Fruit”,它存储一些基本的水果变量
type fruit
real :: diameter ! in mm
real :: length ! in mm
character :: colour
end type
我们可以声明两个“Fruit”变量,并为它们分配值
type (fruit) :: apple, banana
apple = fruit(50, 45, "red")
banana%diameter = 40
banana%length = 200
banana%colour = "yellow"
然后,我们可以在正常的 Fortran 操作中使用水果变量及其子值。
!> show the usage of type-bound procedures (pass/nopass arguments)
module test_m
implicit none
private
public test_type
type test_type
integer :: i
contains
procedure, nopass :: print_hello
procedure :: print_int
end type
contains
!> do not process type specific data => nopass
subroutine print_hello
print *, "hello"
end subroutine
!> process type specific data => first argument is "this" of type "class(test_type)"
!! use class and not type below !!!!
subroutine print_int(this)
class(test_type), intent(in) :: this
print *, "i", this%i
end subroutine
end module
program main
use test_m
implicit none
type (test_type) :: obj
obj%i = 1
call obj%print_hello
call obj%print_int
end program
! testing types with params: kind + len
program main
implicit none
type matrix(rows, cols, k)
integer, len :: rows, cols
integer, kind :: k = kind(0.0) ! optional/default value
real (kind=k), dimension(rows, cols) :: vals
end type
type (matrix(rows=3, cols=3)) :: my_obj
end program
- ↑ Fortran 90 概述 - Lahey 计算机系统