关于发展模式加入变量的问题解决

问题1描述:

编译的时候不报错,但是在运行的时候出错输出

FLDLST: ustar in fincl( 17 ) not found

ENDRUN: called without a message string

问题1解决:

这是因为在cas-esm 的atm_in 中写入了某个变量,但是在F90 代码里面没有加入场变量。

这是因为没有addfld(),尝试在init 的时候加入场变量来解决问题,或者在atm_in的fincl中删除这个变量。

call addfld( 'ustar'       , 'm/s'      , 1      , 'A', 'ustar'                              , phys_decomp )!mayubin 2023-12-20

问题2描述:

最近遇到一个奇怪的问题,当我输出ustar和obklen的时候,在运行的时候居然一只卡在了输出文件上很奇怪啊

然后我打开casesm.o10997620文件查看我的出错信息

 
 

(base) [chengxl@login03 run]$ cat casesm.e10997620

srun: ROUTE: split_hostlist: hl=e2112r7n[2-4],e2113r1n[1-4],e2113r2n[1-4],e2113r3n[1-4],e2113r4n[1-4],e2113r5n[1-4],

e2113r6n[1-4],e2113r7n[1-4],e2201r1n1 tree_width 0

slurmstepd: error: *** STEP 10997620.0 ON e2112r7n2 CANCELLED AT 2023-12-26T23:21:33 ***

srun: Job step aborted: Waiting up to 32 seconds for job step to finish.

slurmstepd: error: *** JOB 10997620 ON e2112r7n2 CANCELLED AT 2023-12-26T23:21:33 ***

forrtl: error (78): process killed (SIGTERM)

Image PC Routine Line Source

casesm.exe 0000000001682A6A Unknown Unknown Unknown

libpthread-2.17.s 00002B8F83C075D0 Unknown Unknown Unknown

libpthread-2.17.s 00002B8F83C044A3 pthread_spin_lock Unknown Unknown

解决2方法:

由于将原来的atm_in 和drv_in复制进现在的运行目录导致的。

问题2解决探索过程:

这个我还没有找到解决办法,也不知道问题是怎么出现的。

我试图减少我自己输出变量的个数

当我减少了我的输出变量之后,确实问题消失了,这就说明可能是我剩下的注释掉的变量的输出可能存在问题。

 nhtfrq = 0, 0 ! , -1 , 1     ! ,-1     ,-24    ,0     ,-2190  , -8760 
 mfilt  = 1, 1 ! , 24 , 26280 ! ,8760   ,365    ,12    , 4     ,1     

fincl1 = 'lhf_tbf','tau_tbf' ,'shf_tbf','n2','pbl_h','h_wave','ri','tau_coare','hsb_coare','hlb_coare', 'LHFLX', 'SHFLX'

fincl2 = 'QREFHT', 'TREFHTMN', 'TREFHTMX', 'TREFHT', 'PRECT', 'RHREFHT', 'PS', 'PSL', 'U10', 'CLDTOT', 'PRECC', 'PRECSC', 'PRECSL', 'LHFLX', 'SHFLX', 'FLDS', 'FLUT', 'FSDS', 'FSUTOA', 'FLUTC', 'TS', 'T', 'Q', 'RELHUM', 'OMEGA', 'U', 'V', 'Z3', 'FLNS','ri','n2','pbl_h','h_wave',

接下来要进一步排查问题。

插入:我们可以看见,在atm_in中加入要输出的变量,但是实际上在fortran中没有写outfld语句的时候,是不会报错的。只会 全部输出为0。

接下来我们试验加入变量h_wave_ln,结果发现,这个变量加入就导致了在变量输出的时候卡住了。

接下来我去掉h_wave_ln .然后加入qsss,tau_coare,hsb_coare,hlb_coare ,pbl_h 再次运行试验,不存在输出问题。

接下来,我们加入,ri , n2 , ustar 和obklen 再尝试一下

在运行的时候出现了这个

FLDLST: ustar in fincl( 16 ) not found

ENDRUN: called without a message string

 我在init的时候加上addfld再尝试

 
 

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(802): error #6410: This name has not bee

n declared as an array or a function. [IFRAC]

ifrac(i,j) = x2o_o%rAttr(index_x2o_Si_ifrac,n) ! ice fraction

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(803): error #6410: This name has not bee

n declared as an array or a function. [PATM]

patm (i,j) = x2o_o%rAttr(index_x2o_Sa_pslv,n) ! sea level pressure index_x2o_Sa_pslv

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(805): error #6410: This name has not bee

n declared as an array or a function. [TAUX]

taux (i,j) = x2o_o%rAttr(index_x2o_Foxx_taux,n) ! surface stress, zonal

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(806): error #6410: This name has not bee

n declared as an array or a function. [TAUY]

tauy (i,j) = x2o_o%rAttr(index_x2o_Foxx_tauy,n) ! surface stress, merid

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(807): error #6410: This name has not bee

n declared as an array or a function. [NETSW]

netsw(i,j) = x2o_o%rAttr(index_x2o_Foxx_swnet,n) ! net sw rad

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(808): error #6410: This name has not bee

n declared as an array or a function. [SEN]

sen (i,j) = x2o_o%rAttr(index_x2o_Foxx_sen,n) ! sensible

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(809): error #6410: This name has not bee

n declared as an array or a function. [LWUP]

lwup (i,j) = x2o_o%rAttr(index_x2o_Foxx_lwup,n) ! long-wave up

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(810): error #6410: This name has not bee

n declared as an array or a function. [LWDN]

lwdn (i,j) = x2o_o%rAttr(index_x2o_Foxx_lwdn,n) ! long-wave down

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(811): error #6410: This name has not bee

n declared as an array or a function. [MELTH]

melth(i,j) = x2o_o%rAttr(index_x2o_Foxx_melth,n) ! melt heat

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(812): error #6410: This name has not bee

n declared as an array or a function. [SALT]

salt (i,j) = x2o_o%rAttr(index_x2o_Foxx_salt,n) ! salinity flux

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(813): error #6410: This name has not bee

n declared as an array or a function. [PREC]

prec (i,j) = x2o_o%rAttr(index_x2o_Foxx_prec,n) !index_x2o_Foxx_prec

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(814): error #6410: This name has not bee

n declared as an array or a function. [EVAP]

evap (i,j) = x2o_o%rAttr(index_x2o_Foxx_evap,n) ! evaporation

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(815): error #6410: This name has not bee

n declared as an array or a function. [MELTW]

meltw(i,j) = x2o_o%rAttr(index_x2o_Foxx_meltw,n) ! melt water

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(816): error #6410: This name has not bee

n declared as an array or a function. [ROFF]

roff (i,j) = x2o_o%rAttr(index_x2o_Forr_roff,n) ! runoff !LPF 20121219

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(817): error #6410: This name has not bee

n declared as an array or a function. [DUU10N]

duu10n(i,j) = x2o_o%rAttr(index_x2o_So_duu10n,n) ! 10m wind speed squared

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(819): error #6410: This name has not bee

n declared as an array or a function. [SNOW1]

snow1(i,j) = x2o_o%rAttr(index_x2o_Foxx_snow,n) !snow flux

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(820): error #6410: This name has not bee

n declared as an array or a function. [ICEOFF]

iceoff(i,j)= x2o_o%rAttr(index_x2o_Forr_ioff,n) !ice runoff

-----------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(837): error #6404: This name does not ha

ve a type, and must have an explicit type. [LAT1]

lat1= LATVAP*evap ! latent (derive from evap)

--------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(837): error #8497: Illegal use of a proc

edure name in an expression, possibly a function call missing parenthesis. [EVAP]

lat1= LATVAP*evap ! latent (derive from evap)

---------------------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(839): error #6087: An array assignment s

tatement is required in this context. [PATM]

where(vit(:,:,1)

------------------------------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(840): error #6087: An array assignment s

tatement is required in this context. [IFRAC]

where(vit(:,:,1)

------------------------------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(841): error #6087: An array assignment s

tatement is required in this context. [TAUX]

where(vit(:,:,1)

------------------------------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(842): error #6087: An array assignment s

tatement is required in this context. [TAUY]

where(vit(:,:,1)

------------------------------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(843): error #6087: An array assignment s

tatement is required in this context. [NETSW]

where(vit(:,:,1)

------------------------------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(844): error #6087: An array assignment s

tatement is required in this context. [SEN]

where(vit(:,:,1)

------------------------------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(845): error #6087: An array assignment s

tatement is required in this context. [LWUP]

where(vit(:,:,1)

------------------------------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(846): error #6087: An array assignment s

tatement is required in this context. [LWDN]

where(vit(:,:,1)

------------------------------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(847): error #6087: An array assignment s

tatement is required in this context. [MELTH]

where(vit(:,:,1)

------------------------------^

/data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90(848): error #6087: An array assignment s

tatement is required in this context. [SALT]

where(vit(:,:,1)

------------------------------^

/tmp/ifortws2x0W.i90(2855): catastrophic error: Too many errors, exiting

compilation aborted for /data/chengxl/CAS-ESM2.0-test1/run/HIST_var_list_2/ocn/source/licomcpl7.F90 (code 1)

gmake: *** [licomcpl7.o] Error 1

gmake: *** Waiting for unfinished jobs....

 突然在编译的时候出现了licom 的一堆问题,很奇怪,之前也遇到过这样的问题。或许这只是偶然的现象。再次编译,这个问题消失。

运行后出现,

=====================================================================

Opened file B20TR_C35_y100.iap.h1.2000-01.nc to write 1638400

pio_support::pio_die:: myrank= -1 : ERROR:

pionfwrite_mod::write_nfdarray_double: 217 :

N

etCDF: Numeric conversion not representable

NETCDF:数值转换无法表示,这可能是存在什么变量类型转变问题。检查一下ustar,obklen,h_wave_ln的计算代码

会不会是因为这个,
————————————————
原文链接:https://blog.csdn.net/weixin_38594380/article/details/108335540

所以我改成D试一下,因为其他都是双精度的。

另外,sign是什么函数?

取前面数的绝对值,取后面数的符号。
例如:
c = SIGN (5.2, -3.1) ! returns -5.2
c = SIGN (-5.2, -3.1) ! returns -5.2
c = SIGN (-5.2, 3.1) ! returns 5.2

 将E改成D之后在进行实验

还是不对,不知道哪里出问题了。

删去输出ustar和obklen的代码,然后就不会出现在输出中断的问题。

现在发现在atm_in加上ustar和obklen都不行,会导致中断

现在发现这些还不是问题,可能原因是:我直接把原来的atm_in,drv_in复制过来导致的问题。

我后来终于发现,导致这种情况的原因就是:我把atm_in,drv_in 复制到当前运行文件夹下导致的问题。

 但是我又得将我新加的变量放里面输出,所以我使用sed命令在当前生成的atm_in里加入新输出的变量配置语句。

sed -i "12 a\\nhtfrq=0,0" atm_in
sed -i "13 a\\fincl1 = 'lhf_tbf','tau_tbf' ,'shf_tbf','n2','pbl_h','h_wave','tau_coare','hsb_coare','hlb_coare', 'LHFLX', 'SHFLX','qsss'" atm_in
sed -i "14 a\\fincl2 =  'U10','LHFLX', 'SHFLX', 'TS', 'T', 'Q', 'RELHUM', 'OMEGA', 'U', 'V', 'Z3','ri','n2','pbl_h','h_wave','obklen','ustar','h_wave_ln' "  atm_in

这里面:

sed -i "12 a\\nhtfrq=0,0" atm_in

12 表示在第十二行,

\\后加入想要加入语句

atm_in 表示想要操作的文件

总结一下:

sed -i "行号 a\\加入的命令" 文件名.后缀

更新:

我发现变量输出不出来还和计算变量语句有关系

h_wave = h_w_star*log(u) -log(c)

我发现就是这句存在问题,可能是u小于零导致的错误。于是我加上一个max()

h_wave = h_w_star*log(max(0.02,u)) -log(c)

再次尝试!成功!

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值