关于自定义类型type的使用
本帖最后由 taotao0718 于 2015-2-16 09:00 编辑编译时发生这样错误fortcom: Error: mod_random_forcing.F, line 59: This entity cannot be PUBLIC since its derived type is PRIVATE. type(forcing_fields) ,save :: ran, ran1
-----------------------------------^
原程序的一部分:
module mod_random_forcing
#define FFTW
use mod_xc
implicit none
c --- shield everything
private
type forcing_fields
character(len=5) tforce
real slp (1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !Sea level pressure
real taux (1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !wind stress in x direction
real tauy (1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !wind stress in y direction
real wndspd (1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !wind speed (tke source)
real airtmp (1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !pseudo air temperature
real relhum (1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !relative humidity
real clouds (1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !cloud cover
real precip (1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !precipitation
real sss (1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !SSS for relax
real sst (1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !SST for relax
real uwind(1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !u-component of wind
real vwind(1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !v-component of wind
real tauxice(1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !ice stress on water in x dir
real tauyice(1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) !ice stress on water in y dir
end type forcing_fields
c
...................
...................
...................
c --- These will hold the forcing fields (dim and nondimensional)
type(forcing_fields) ,save :: ran, ran1
我改为type(forcing_fields) ,save,private :: ran, ran1
依旧是一样的错误,不知道有没有高手可以指点一下,谢谢
不知道你用什么编译器?我这里是没法重现你的错误的。
如果可以,请给出更多的代码,至少要有 mod_xc 模块。或者经过简化以后给出,至少让我们能够正常编译。 楚香饭 发表于 2015-2-14 18:19
不知道你用什么编译器?我这里是没法重现你的错误的。
如果可以,请给出更多的代码,至少要有 mod_xc 模块 ...
谢谢,已添加了附件,用的是ifort编译器 我还是找不到 mod_xc 模块,还有 common_blocks.h 文件。 楚香饭 发表于 2015-2-15 17:30
我还是找不到 mod_xc 模块,还有 common_blocks.h 文件。
不好意思哈,昨天漏传了,其实还有个问题,不知道这是不是和编译器版本不一样,或者netcdf还有openmpi的选择有关,就是在有的机器上没有问题,但是换机器就出现了这个问题。 1.如果 ran 是 public 属性的,那么它的类型 :forcing_fields 也必须是 public 属性的。这是 F95 的规定。
2.你的代码里有 public :: init_random_forcing, rand_update, ran,所以,尽管你写了 type(forcing_fields) ,save,private :: ran, ran1 ,但 ran 仍然是 public 的。
3.请根据自己的需要,确定 ran 是 public 还是 private 的。
4.如果 ran 是 public 的,那么请加一句 public forcing_fields 楚香饭 发表于 2015-2-16 09:53
1.如果 ran 是 public 属性的,那么它的类型 :forcing_fields 也必须是 public 属性的。这是 F95 的规定。 ...
我之前把第六行的private注释了,就通过了,默认public属性,不知道会不会影响最终结果
谢谢您这几天的帮忙,祝新年快乐! 我一早就想让你去掉 private,但是怕影响你其他的程序。比如有重名的变量,如果public可能就变成同一个变量了。
所以最好还是保持原有的 private,单独让 ran 和 forcing_fields 变成 public 比较可靠。
新年好~~{:2_31:} 楚香饭 发表于 2015-2-16 10:10
我一早就想让你去掉 private,但是怕影响你其他的程序。比如有重名的变量,如果public可能就变成同一个变量 ...
{:3_41:}电脑坏了,才看到这条,再试试看,谢谢
页:
[1]