如何用fes2014全球潮模型做预测
前言
基于Python (C语言也可),MAC系统 (windows也可)
python我用的编译器是Pycharm,没有python基础不影响使用
1 下载源数据
去aviso官网注册账号https://www.aviso.altimetry.fr/en/data/products/auxiliary-products/global-tide-fes/description-fes2014.html,我印象里注册的时候可以subscribe fes2014.
fes2014_elevations_and_load文件夹用于计算水位,里面有fes2014b_elevations/、fes2014b_elevations_extrapolated/、fes2014a_loadtide/。extrapolated做了空间插值处理,包含更多近岸地区。下载fes2014b_elevations_extrapolated/和fes2014a_loadtide/这两个文件夹,里面都是一堆nc文件
fes2014a_currents用于计算潮流,感兴趣也可以下载

2 下载源代码
源代码地址:https://github.com/CNES/aviso-fes
下载后打开此目录:/aviso-fes-main/data/fes2014,所有文件夹都是空的,需要把下载的数据放到相应文件夹里
把上一步下载的fes2014b_elevations_extrapolated/夹里所有nc文件拷到/aviso-fes-main/data/fes2014/ocean_tide_extrapolated,load_tide做类似处理
修改ocean_tide_extrapolated.ini 和 load_tide.ini,把nc文件的路径全部改成绝对路径


3 安装pyfes
pyfes是基于python的fes2014预报软件,需要安装后调用(通过命令行安装)。这一步大概是最艰难的,有不少人安装的时候出现类似的问题(后面详细说明)
安装guidance:https://github.com/CNES/aviso-fes/blob/main/INSTALL.md
首先,需要安装cmake和netcdf。我看有些教程推荐通过homebrew安装cmake:https://cse.engineering.nyu.edu/cs653/OpenGLCompilationMacLinux8.pdf
然后,安装conda。我直接在anaconda官网下载(如果喜欢折腾也可以通过命令行下载;不建议),如果你用的是mac M1/M2 chip,请不要下载官网提供的 for M1/M2,下载 for intel版本。根据我的经历,m1/m2版本目前大概率不支持pyfes。我下载的m1/m2版本根本找不到pyfes -- 如何确认,安装好anaconda后,打开anaconda navigator,在environment里找pyfes,如果在installed和uninstalled里都找不到,就无法安装pyfes。conda装好后,打开命令行,最前面应该出现base
前面不建议用命令行安装conda,原因是如果你用的是mac m1/m2 chip,命令行下载应该是自动给你下载了anaconda for m1/m2而不是for intel,这样你就无法安装pyfes。希望后续的更新能解决这个问题。但是,pyfes是通过命令行安装的
安装pyfes:在命令行里运行 conda install pyfes -c fbriol


安装pyfes常见错误之一:
Collecting package metadata (current_repodata.json): done
Solving environment: unsuccessful initial attempt using frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: unsuccessful initial attempt using frozen solve. Retrying with flexible solve.
PackagesNotFoundError: The following packages are not available from current channels:
pyfes
如何解决上述错误:
可以参考这个帖子https://github.com/CNES/aviso-fes/issues/19。我参考其中的办法,先更新conda,再尝试安装pyfes,需要在命令行运行
conda update --all -c conda-forge
conda install pyfes -c fbriol -c conda-forge
或者,如果还有相同错误,可以用python3.9创建一个新的环境,在新环境里安装。我建议在报这个错误的时候,打开你的anaconda navigator,确认里面是否能找到pyfes
4 进行预报
打开源代码的此目录:/aviso-fes-main/examples,tide_gauge.py用于预报具体站位某段时间的水位,fes_uv.py用于预报具体站位某段时间的流速,fes_slev.py预报全球的水位,这里以tide_gauge.py举例。在此之前我没学过python,但好在代码不复杂,稍微上网搜一下也就解决问题了。
编译器用的是Pycharm,上一步安装好pyfes后,在pycharm里import pyfes也可能会报错,需要配置一下环境。在pycharm里setting -- project:examples -- python interpreter,选择anaconda3作为interpreter

打开tide_gauge.py,这里用到了argparse函数,意思就是,你需要从命令行向tide_gauge.py传输三个(至少两个)参数,第一个指向ocean配置文件,第二个指向load配置文件,第三个是时间起点,默认是1983/01/01。这两个配置文件就是第二步里的ocean_tide_extrapolated.ini 和 load_tide.ini
此时,直接在pycharm里运行tide_gauge.py会报错,一种正确的运行方式是打开命令行,输入
python tide_gauge.py ocean_tide_extrapolated.ini load_tide.ini
注意,这两个配置文件都需要绝对路径,或者你把这两个文件拷贝到/aviso-fes-main/examples路径下
如何在pycharm里直接运行tide_gauge.py?
如果不想在命令行里运行代码,可以在pycharm里点击run -- edit configurations,新建一个python configuration,script path选你要运行的代码文件,parameters里面填入两个配置文件:ocean_tide_extrapolated.ini load_tide.ini
我填的是绝对路径,不需要添加双引号“”或者单引号‘’,用空格隔开,保存后就可以直接运行了。parameters如何填取决于代码里add_argument怎么写,遇到问题可以参考这个帖子:https://stackoverflow.com/questions/33102272/pycharm-and-sys-argv-arguments

至此,你已经能用pyfes进行潮汐预报,剩下的就是对源代码进行修改,包括经纬度坐标和时间,输出你想要的结果。