如何用fes2014全球潮模型做預(yù)測(cè)
前言
????基于Python (C語(yǔ)言也可),MAC系統(tǒng) (windows也可)
????python我用的編譯器是Pycharm,沒(méi)有python基礎(chǔ)不影響使用
1 下載源數(shù)據(jù)
去aviso官網(wǎng)注冊(cè)賬號(hào)https://www.aviso.altimetry.fr/en/data/products/auxiliary-products/global-tide-fes/description-fes2014.html,我印象里注冊(cè)的時(shí)候可以subscribe fes2014.?
fes2014_elevations_and_load文件夾用于計(jì)算水位,里面有fes2014b_elevations/、fes2014b_elevations_extrapolated/、fes2014a_loadtide/。extrapolated做了空間插值處理,包含更多近岸地區(qū)。下載fes2014b_elevations_extrapolated/和fes2014a_loadtide/這兩個(gè)文件夾,里面都是一堆nc文件
fes2014a_currents用于計(jì)算潮流,感興趣也可以下載

2 下載源代碼
源代碼地址:https://github.com/CNES/aviso-fes
下載后打開(kāi)此目錄:/aviso-fes-main/data/fes2014,所有文件夾都是空的,需要把下載的數(shù)據(jù)放到相應(yīng)文件夾里
把上一步下載的fes2014b_elevations_extrapolated/夾里所有nc文件拷到/aviso-fes-main/data/fes2014/ocean_tide_extrapolated,load_tide做類似處理
修改ocean_tide_extrapolated.ini 和 load_tide.ini,把nc文件的路徑全部改成絕對(duì)路徑


3 安裝pyfes
pyfes是基于python的fes2014預(yù)報(bào)軟件,需要安裝后調(diào)用(通過(guò)命令行安裝)。這一步大概是最艱難的,有不少人安裝的時(shí)候出現(xiàn)類似的問(wèn)題(后面詳細(xì)說(shuō)明)
安裝guidance:https://github.com/CNES/aviso-fes/blob/main/INSTALL.md
首先,需要安裝cmake和netcdf。我看有些教程推薦通過(guò)homebrew安裝cmake:https://cse.engineering.nyu.edu/cs653/OpenGLCompilationMacLinux8.pdf
然后,安裝conda。我直接在anaconda官網(wǎng)下載(如果喜歡折騰也可以通過(guò)命令行下載;不建議),如果你用的是mac M1/M2 chip,請(qǐng)不要下載官網(wǎng)提供的 for M1/M2,下載 for intel版本。根據(jù)我的經(jīng)歷,m1/m2版本目前大概率不支持pyfes。我下載的m1/m2版本根本找不到pyfes -- 如何確認(rèn),安裝好anaconda后,打開(kāi)anaconda navigator,在environment里找pyfes,如果在installed和uninstalled里都找不到,就無(wú)法安裝pyfes。conda裝好后,打開(kāi)命令行,最前面應(yīng)該出現(xiàn)base
前面不建議用命令行安裝conda,原因是如果你用的是mac m1/m2 chip,命令行下載應(yīng)該是自動(dòng)給你下載了anaconda for m1/m2而不是for intel,這樣你就無(wú)法安裝pyfes。希望后續(xù)的更新能解決這個(gè)問(wèn)題。但是,pyfes是通過(guò)命令行安裝的
安裝pyfes:在命令行里運(yùn)行?conda install pyfes -c fbriol


安裝pyfes常見(jiàn)錯(cuò)誤之一:
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
如何解決上述錯(cuò)誤:
可以參考這個(gè)帖子https://github.com/CNES/aviso-fes/issues/19。我參考其中的辦法,先更新conda,再嘗試安裝pyfes,需要在命令行運(yùn)行
????conda update --all -c conda-forge
????conda install pyfes -c fbriol -c conda-forge
或者,如果還有相同錯(cuò)誤,可以用python3.9創(chuàng)建一個(gè)新的環(huán)境,在新環(huán)境里安裝。我建議在報(bào)這個(gè)錯(cuò)誤的時(shí)候,打開(kāi)你的anaconda navigator,確認(rèn)里面是否能找到pyfes
4 進(jìn)行預(yù)報(bào)
打開(kāi)源代碼的此目錄:/aviso-fes-main/examples,tide_gauge.py用于預(yù)報(bào)具體站位某段時(shí)間的水位,fes_uv.py用于預(yù)報(bào)具體站位某段時(shí)間的流速,fes_slev.py預(yù)報(bào)全球的水位,這里以tide_gauge.py舉例。在此之前我沒(méi)學(xué)過(guò)python,但好在代碼不復(fù)雜,稍微上網(wǎng)搜一下也就解決問(wèn)題了。
編譯器用的是Pycharm,上一步安裝好pyfes后,在pycharm里import pyfes也可能會(huì)報(bào)錯(cuò),需要配置一下環(huán)境。在pycharm里setting -- project:examples -- python interpreter,選擇anaconda3作為interpreter

打開(kāi)tide_gauge.py,這里用到了argparse函數(shù),意思就是,你需要從命令行向tide_gauge.py傳輸三個(gè)(至少兩個(gè))參數(shù),第一個(gè)指向ocean配置文件,第二個(gè)指向load配置文件,第三個(gè)是時(shí)間起點(diǎn),默認(rèn)是1983/01/01。這兩個(gè)配置文件就是第二步里的ocean_tide_extrapolated.ini?和?load_tide.ini
此時(shí),直接在pycharm里運(yùn)行tide_gauge.py會(huì)報(bào)錯(cuò),一種正確的運(yùn)行方式是打開(kāi)命令行,輸入
python tide_gauge.py ocean_tide_extrapolated.ini load_tide.ini
注意,這兩個(gè)配置文件都需要絕對(duì)路徑,或者你把這兩個(gè)文件拷貝到/aviso-fes-main/examples路徑下
如何在pycharm里直接運(yùn)行tide_gauge.py?
如果不想在命令行里運(yùn)行代碼,可以在pycharm里點(diǎn)擊run -- edit configurations,新建一個(gè)python configuration,script path選你要運(yùn)行的代碼文件,parameters里面填入兩個(gè)配置文件:ocean_tide_extrapolated.ini?load_tide.ini
我填的是絕對(duì)路徑,不需要添加雙引號(hào)“”或者單引號(hào)‘’,用空格隔開(kāi),保存后就可以直接運(yùn)行了。parameters如何填取決于代碼里add_argument怎么寫(xiě),遇到問(wèn)題可以參考這個(gè)帖子:https://stackoverflow.com/questions/33102272/pycharm-and-sys-argv-arguments

至此,你已經(jīng)能用pyfes進(jìn)行潮汐預(yù)報(bào),剩下的就是對(duì)源代碼進(jìn)行修改,包括經(jīng)緯度坐標(biāo)和時(shí)間,輸出你想要的結(jié)果。