WW3 Quick Start 踩坑记录

WW3快速demo步骤

ww3是最常用的海浪模拟模型。ww3来源于前沿研究人员的直接贡献,所以代码风格和结构没有成体系地优化,并且totally user unfriendly。所以即使运行最简单的demo test也会踩到不少坑。Here,记录2个新鲜出炉的bug。

WW3 Quick Start步骤超级简单,只需要setup model和通过ftp下载原始nc文件。我克隆好WW3 repo以后,按照manual手册做了以下2个操作:

# 设置编译器和模型模式
model/bin/w3_setup model -c gnu -s NCEP_st4

# 通过ftp下载数据
model/bin/ww3_from_ftp.sh

经过setup和数据下载,就可以开始自行编译ww3 model。

model/bin/w3_make

现在来讲下我在编译过程碰到的2个报错。

argument mismatch

先来看看报错原文。

fortran经过多年的流传,很多不合规代码已经不能为新版本编译器所容忍,所以编译不兼容时有发生。老版本代码没有检验接口参数类型和数量,而新版本gfortran编译器则严苛得多,于是编译时报错。不过ww3被用了这么多年,我们有理由相信接口检验不合格不会影响代码的正常功能。

So,怎么求新编译器放过这个错误惹?最简单的方式就是在编译参数中加入一个新的flag。

-fallow-argument-mismatch

针对我配置的运行示例,我们将model/bin/cmplr.env第262的编译选项中加入了上述flag。

optc='-c -J$path_m -g -fno-second-underscore -ffree-line-length-none -fallow-argument-mismatch'

这样就能避免新编译器矫枉过正。康康chat chat怎么解释allow-argument-mismatch标志。

allow-argument-mismatch标志是gfortran编译器选项之一,允许编译器忽略子程序或函数中实际参数与声明参数之间的不匹配。默认情况下,gfortran会检查参数不匹配,并在参数的数量、类型或种类不匹配时发出错误消息。但是,在某些情况下,例如调用旧代码或与外部库进行接口时,可能需要允许参数不匹配。allow-argument-mismatch标志启用了这种行为,即使存在参数不匹配,也允许代码编译和运行。但是,应谨慎使用,因为如果参数不符合预期,可能会导致未定义的行为和运行时错误。

——By ChatGPT

undefined reference w3iorsmd

well,解决完上一个bug以后,重新编译,马上咱们就遇到了第二个bug——ww3_gint linking error。终端只提示了makefile 512行错误(makefile指的是model/src/makefile)。但是可以在model/obj_XXX/link.err里面看到详细内容,如下图所示。

Which is totally 令人崩溃的。好端端的官方示例为什么会出现未定义函数,excuse me???不过先冷静下来,ww3的源代码的makefile由model/bin/make_makefile.sh脚本制作,每一个模块的依赖都事先在model/bin/build_utils.sh中设定好了。

首先,我们可以肯定ww3_gint.F90代码里面必然使用到了w3iorsmd库函数,但是,当我们打开makefile或者build_utils.sh,可以看到,里面毫无w3iorsmd踪迹。see below。

makefile

build_utils.sh

可以看到里面的依赖包列表并没有w3iorsmd。完全是个BUG,所以我们要自行在列表里添加w3iorsmd库。即,在build_utils.sh的IO中加入该包,如下所示。

现在再编译就没有任何问题惹。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值