定义派生类型数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定义派生类型数组相关的知识,希望对你有一定的参考价值。
我试图使用参数声明初始化派生类型。编译时,我收到以下错误
INTEGER(4)中的元素(1)中的数组构造函数是CHARACTER(1)。
用户定义的种类值ip
和dp
可在fasst_global
中找到。他们是:
integer,parameter:: ip = selected_int_kind(8)
integer,parameter:: dp = selected_real_kind(15,307)
我尝试使用1_ip
而不是1
作为第一个元素,它没有任何区别。我究竟做错了什么?
module fasst_derived_types
use fasst_global
implicit none
type fasst_default_soil
integer(ip):: sid
character(len=2):: ssname
real(dp):: dens,pors,ssemis,ssalb,shc,smin,smax,salpha,svgn
real(dp):: sspheat,sorgan,spsand,spsilt,spclay,spgravel
end type fasst_default_soil
type(fasst_default_soil),parameter:: fasst_soil(1) = fasst_default_soil( &
(/1, 'GW',1.947_dp,0.293_dp, 0.92_dp,0.40_dp,1.1197e-2_dp, &
0.01_dp,0.293_dp,22.6125_dp, 3.45_dp, 820.0_dp, &
0.0_dp, 5.0_dp, 2.0_dp, 2.0_dp,91.0_dp/))
end module fasst_derived_types
答案
您正尝试在此处使用两个构造函数:
- 数组构造函数;
- 结构构造函数。
每种语法都有正确的语法,但您使用的方法不正确。
数组构造函数(/.../)
用于构造数组。但是,您需要一个派生类型值数组(一个值)而不是一个数组作为单个派生类型值的组件。语法错误来自尝试创建具有各种不同/不兼容类型的数组。
所以,你想要的
type(fasst_default_soil),parameter:: fasst_soil(1) = (/fasst_default_soil(1_ip,'GW', ...)/)
或者,因为您只需要一个元素数组,甚至不需要构造该派生类型数组。
以上是关于定义派生类型数组的主要内容,如果未能解决你的问题,请参考以下文章