COAWST V3.8初学记录
我是一个完完全全的海洋数值模式初学者,此前没有接触过任何海洋数值模式,在学习COAWST模式的过程中非常难受(起码从安装到算例的运行,是完完全全一个人独立学习完成,此前有求助过一些师兄和老师,但是他们也是爱莫能助,主要是距离太远,我这边的情况他们也不甚了解,在此也要对他也表示感谢,对我提出的疑问都会及时的回复,知无不言,这也让我可以找到一些新的方向方法去解决遇到的难题)。安装和运行算例的过程中会有一些机器或者服务器的问题要自己去解决,模式的一些问题也需要自己去找答案,所以就把这一过程记录以下并发出来,寄希望可以帮助到一些和我一样的人。我想,会了基本的安装和成功运行其提供的算例,应该就算是摸到门槛了吧!祝大家一切顺利!生活学习都一切顺利!
如果觉得这个记录有帮助,还希望可以关注B站账号:https://space.bilibili.com/389618452?spm_id_from=333.1007.0.0。
该文档的PDF可以向我索要,关注B站账号,私信就好!
本记录分为以下两个部分:
第一部分:COAWST在服务器上的安装
第二部分:模式算例的运行
我没有检查文本的错别字之类的东西,应该不影响阅读,有错误的地方还请指出,万分感谢!!
不详尽之处欢迎一起讨论,相互学习!!!
注意,只是把算例跑起来而已哦!!!!!
第二部分:模式算例的运行
测试算例只是为了验证模式安装正确,就是按照手册给定的东西,把算例跑起来。部分简单的,有重复操作的,手册上比较明了的我就不给出细致的过程了。给出的算例有部分是在运算的遇到一些问题,我就标注了一下,这些问题是我在运行的时候遇到的,也算是一些小细节。
因为我是初学者,从零开始,自己的工作也还没有开展,后续会继续将自己做自己工作的问题和一些解决方式陆续发出,也欢迎大家一起交流学习。
模式运行在服务器或者超算上运行案例要一提交作业的方式进行,但是算例不是很复杂,可以直接命令行运行,提交超算作业的方式后续会根据我所用的服务器给出我的方式,总体也不难!!!
1. 单独运行ROMS模式
O.算例Upwelling、Ducknc和Estuary_test2都是单独运行ROMS模式的,与虚拟机是一样,在这里就不重复了,给出虚拟机的运行过程。
虚拟机和服务器路径上可能会有不同,但是大同小异,很容易理解,甄别。
因为虚拟机上是gfortran编译器,会有一些不一样!!!
COAWST案例运行(虚拟机部分)
算例:Upwelling
我是将Projects这个文件夹整体拷贝出来同COAWST、LIBRARIES并列。这个看个人习惯
在Projects目录下面创建Upwelling,然后进入Upwelling:
第一步-执行:(路径选择以实际的为准)
cp /home/wangling/coawst/COAWST/build_coawst.sh ./
cp /home/wangling/coawst/COAWST/ROMS/External/roms_upwelling.in ./
cp /home/wangling/coawst/COAWST/ROMS/Include/upwelling.h ./
第二步-键入 vim build_coawst.sh,按照手册更改以下内容:
export COAWST_APPLICATION=UPWELLING (算例名称,大写)
export MY_ROOT_DIR=/home/wangling/coawst/COAWST(COAWST代码的绝对路径)
export MY_PROJECT_DIR=${PWD}(Upwelling算例的位置)
第三步-mipch的选择以安装的为准
export which_MPI=mpich # compile with MPICH library
第四步-:USE_MY_LIBS都注释掉,因为在环境配置中已经配置了
#export USE_MY_LIBS=no # use system default library paths
#export USE_MY_LIBS=yes # use my customized library paths
第五步-:
export MY_HEADER_DIR=${MY_PROJECT_DIR}(第一步已经拷贝过来了)
export MY_ANALYTICAL_DIR=/home/wangling/coawst/COAWST/ROMS/Functionals
第六步:
输入:./build_coawst.sh -j 4开始编译算例,后面的4为多少核。
第七步:
上一步成功会生成coawstM的可执行文件,以及Build_roms目录。
如果有以上报错,则进入COAWST代码目录下的COAWST/Compilers/Linux-gfortran.mk,将对应的语句修改即可。
编译成功会生成可执行文件coawstM
第八步:
修改参数控制文件roms_upwelling.in
VARNAME = /home/wangling/coawst/COAWST/ROMS/External/varinfo.yaml(绝对路径)
以及运行的核数(根据需要更改核数= NtileI×NtileJ):
NtileI == 2 ! I-direction partition
NtileJ == 2 ! J-direction partition
保存退出
第九步:
运行算例:
mpirun -np 4 ./coawstM roms_upwelling.in
第十步:
算例运行结束生成4个nc文件,upwelling算例测试成功!
COAWST 手册案例
算例1:Ducknc
第一步:
进入算例所在位置,将COAWST代码中的build_coawst.sh拷贝至当前目录(做这一步时保证build_coawst.sh文件是原始文件,修改错了可以重新拷贝过来,提高容错率)。
第二步-键入 vim build_coawst.sh,按照手册(或者上一算例)更改以下内容:
export COAWST_APPLICATION=DUCKNC (算例名称,大写)
export MY_ROOT_DIR=/home/wangling/coawst/COAWST(COAWST代码的绝对路径)
export MY_PROJECT_DIR=${PWD}(Ducknc算例的位置,给绝对路径也可以,/xxx/Ducknc)
export which_MPI=mpich # compile with MPICH library
第三步:
USE_MY_LIBS都注释掉,因为在环境配置中已经配置了(第一行可以不注释)
#export USE_MY_LIBS=no # use system default library paths
#export USE_MY_LIBS=yes # use my customized library paths
第四步:(确定以下路径)
export MY_HEADER_DIR=
M
Y
P
R
O
J
E
C
T
D
I
R
(头文件)
e
x
p
o
r
t
M
Y
A
N
A
L
Y
T
I
C
A
L
D
I
R
=
{MY_PROJECT_DIR}(头文件) export MY_ANALYTICAL_DIR=
MYPROJECTDIR(头文件)exportMYANALYTICALDIR={MY_PROJECT_DIR}(目录下ana_开头的文件,主要函数公式之类的)
export BINDIR=
M
Y
P
R
O
J
E
C
T
D
I
R
i
f
[
−
n
"
{MY_PROJECT_DIR} if [ -n "
MYPROJECTDIRif[−n"{USE_DEBUG:+1}" ]; then
export SCRATCH_DIR=KaTeX parse error: Expected 'EOF', got '#' at position 30: …R}/Build_romsG #̲export SC…{MY_PROJECT_DIR}/Build_roms
#export SCRATCH_DIR=./Build_roms
fi
这一步其实就是确定路径,也让生成的文件在算例所在的路径之下,方便文件管理与查找,后续类似的不在解释。
第五步:
编译:./build_coawst.sh -j 4
编译成功后会有可执行文件coawstM生成。
第六步:
修改文件 ocean_ducknc.in 里面的变量路径以及计算核数(根据实际修改)
VARNAME = /home/wangling/coawst/COAWST/ROMS/External/varinfo.dat
NtileI == 2 ! I-direction partition
NtileJ == 2 ! J-direction partition
下滑继续修改网格文件的路径
GRDNAME == /home/wangling/coawst/Projects/Ducknc/duck94_08302010.nc
ININAME == /home/wangling/coawst/Projects/Ducknc/duck94_init_08302010.nc
FRCNAME == /home/wangling/coawst/Projects/Ducknc/duck94_wind_08302010.nc
/home/wangling/coawst/Projects/Ducknc/wave_forcing_duck_02132011.nc
第七步:执行
mpirun -np 4 ./coawstM ocean_ducknc.in
运行结束,显示运行状况以及输出4个nc文件.
算例2:Estuary_test2
第一步:
进入算例所在位置,将COAWST代码中的build_coawst.sh拷贝至当前目录(做这一步时保证build_coawst.sh文件是原始文件,修改错了可以重新拷贝过来,提高容错率)。
第二步-键入 vim build_coawst.sh,按照手册(或者上一算例)更改以下内容:
export COAWST_APPLICATION=ESTUARY_TEST2 (算例名称,大写)
export MY_ROOT_DIR=/home/wangling/coawst/COAWST(COAWST代码的绝对路径)
export MY_PROJECT_DIR=${PWD}(算例的位置给绝对路径也可以)
export which_MPI=mpich # compile with MPICH library
USE_MY_LIBS都注释掉,因为在环境配置中已经配置了(第二行可以不注释,但是需要验证是不是有效的哈)
#export USE_MY_LIBS=no # use system default library paths
#export USE_MY_LIBS=yes # use my customized library paths
第三步:(确定以下路径)
export MY_HEADER_DIR=
M
Y
P
R
O
J
E
C
T
D
I
R
(头文件)
e
x
p
o
r
t
M
Y
A
N
A
L
Y
T
I
C
A
L
D
I
R
=
{MY_PROJECT_DIR}(头文件) export MY_ANALYTICAL_DIR=
MYPROJECTDIR(头文件)exportMYANALYTICALDIR={MY_PROJECT_DIR}(目录下ana_开头的文件,主要函数公式之类的)
export BINDIR=
M
Y
P
R
O
J
E
C
T
D
I
R
i
f
[
−
n
"
{MY_PROJECT_DIR} if [ -n "
MYPROJECTDIRif[−n"{USE_DEBUG:+1}" ]; then
export SCRATCH_DIR=KaTeX parse error: Expected 'EOF', got '#' at position 30: …R}/Build_romsG #̲export SC…{MY_PROJECT_DIR}/Build_roms
#export SCRATCH_DIR=./Build_roms
fi
第五步:
编译:./build_coawst.sh -j 4
编译成功后会有可执行文件coawstM生成。
第六步:
修改文件 ocean_estuary_test2.in 里面的变量路径以及计算核数(根据实际修改)
VARNAME = /home/wangling/coawst/COAWST/ROMS/External/varinfo.dat
NtileI == 2 ! I-direction partition
NtileJ == 2 ! J-direction partition
下滑继续修改网格文件的路径
GRDNAME == /home/wangling/coawst/Projects/Estuary_test2/estuary_test2_grid.nc
第七步:执行
mpirun -np 4 ./coawstM ocean_estuary_test2.in
运行结束,显示运行状况以及输出2个nc文件.
COAWST 案例运行(服务器)
A.算例Sed_floc_toy(6.13- sediment module with flocculation-该沉积还在开发中)
文件:build_coawst.sh
export COAWST_APPLICATION=SED_FLOC_TOY
export MY_ROOT_DIR=/data/home/wangling/COAWST
export MY_PROJECT_DIR=KaTeX parse error: Expected 'EOF', got '#' at position 54: …=mpich #̲ compile with M…{MY_PROJECT_DIR}
export MY_ANALYTICAL_DIR=${MY_PROJECT_DIR}
文件:build_coawst.sh
VARNAME = /data/home/wangling/COAWST/ROMS/External/varinfo.dat
NtileI == 2 (根据自己的情况) ! I-direction partition
NtileJ == 2 ! J-direction partition
ININAME == /data/home/wangling/Projects/Sed_floc_toy/sed_floc_toy_ini.nc
FRCNAME == /data/home/wangling/Projects/Sed_floc_toy/Pair_sed_floc_toy.nc
/data/home/wangling/Projects/Sed_floc_toy/wave_force_sed_floc_toy.nc
APARNAM = /data/home/wangling/COAWST/ROMS/External/s4dvar.in
SPOSNAM = /data/home/wangling/COAWST/ROMS/External/stations.in
FPOSNAM = /data/home/wangling/COAWST/ROMS/External/floats.in
BPARNAM = /data/home/wangling/COAWST/ROMS/External/bio_Fennel.in
SPARNAM = /data/home/wangling/Projects/Sed_floc_toy/sediment_sed_floc_toy.in
USRNAME = /data/home/wangling/COAWST/ROMS/External/MyFile.dat
编译模式: ./build_coawst.sh -j X
运行模式: mpirun -n (NtileI×NtileJ) ./coawstM ocean_sed_floc_toy.in
B.算例Sed_bed_toy(6.14)
文件:build_coawst.sh
export COAWST_APPLICATION=SED_BED_TOY
export MY_ROOT_DIR=/data/home/wangling/COAWST
export MY_PROJECT_DIR=
P
W
D
(可以绝对路径)
e
x
p
o
r
t
M
Y
H
E
A
D
E
R
D
I
R
=
{PWD}(可以绝对路径) export MY_HEADER_DIR=
PWD(可以绝对路径)exportMYHEADERDIR={MY_PROJECT_DIR}
export MY_ANALYTICAL_DIR=${MY_PROJECT_DIR}
文件:build_coawst.sh
VARNAME = /data/home/wangling/COAWST/ROMS/External/varinfo.dat
NtileI == 1 ! I-direction partition
NtileJ == 1 ! J-direction partition
ININAME == /data/home/wangling/Projects/Sed_bed_toy/restrat_mix_ini.nc
FRCNAME == /data/home/wangling/Projects/Sed_bed_toy/wind_restrat_2events.nc
APARNAM = /data/home/wangling/COAWST/ROMS/External/s4dvar.in
SPOSNAM = /data/home/wangling/COAWST/ROMS/External/stations.in
FPOSNAM = /data/home/wangling/COAWST/ROMS/External/floats.in
BPARNAM = /data/home/wangling/COAWST/ROMS/External/bio_Fennel.in
SPARNAM = /data/home/wangling/Projects/Sed_bed_toy/sediment_sed_bed_toy.in
USRNAME = /data/home/wangling/COAWST/ROMS/External/MyFile.dat
编译模式: ./build_coawst.sh -j X
运行模式: mpirun -n (NtileI×NtileJ) ./coawstM ocean_sed_bed_toy.in
C.算例Trench(6.15)
文件:build_coawst.sh
export COAWST_APPLICATION=TRENCH
export MY_ROOT_DIR=/data/home/wangling/COAWST
export MY_PROJECT_DIR=
P
W
D
(可以绝对路径)
e
x
p
o
r
t
M
Y
H
E
A
D
E
R
D
I
R
=
{PWD}(可以绝对路径) export MY_HEADER_DIR=
PWD(可以绝对路径)exportMYHEADERDIR={MY_PROJECT_DIR}
export MY_ANALYTICAL_DIR=${MY_PROJECT_DIR}
编辑:ocean_trench.in
VARNAME = /data/home/wangling/COAWST/ROMS/External/varinfo.dat
NtileI == 8 ! I-direction partition(看自己情况)
NtileJ == 2 ! J-direction partition
GRDNAME == /data/home/wangling/COAWST/Data/ROMS/Grid/trench_grid_slope.nc
ININAME == /data/home/wangling/COAWST/Data/ROMS/Initial/trench_init_slope.nc
APARNAM = /data/home/wangling/COAWST/ROMS/External/s4dvar.in
SPOSNAM = /data/home/wangling/COAWST/ROMS/External/stations.in
FPOSNAM = /data/home/wangling/COAWST/ROMS/External/floats.in
BPARNAM = /data/home/wangling/COAWST/ROMS/External/bioFasham.in
SPARNAM = /data/home/wangling/Projects/Trench/sediment_trench.in
USRNAME = /data/home/wangling/COAWST/ROMS/External/MyFile.dat
编译模式: ./build_coawst.sh -j X
运行模式: mpirun -n 16(NtileI×NtileJ) ./coawstM ocean_trench.in
D.算例Wetdry(6.17)
Dam
文件:build_coawst.sh
export COAWST_APPLICATION= WETDRY_DAM_BREAK(这是两个实验)
对应有文件wetdry_dam_break.h
export MY_ROOT_DIR=/data/home/wangling/COAWST
export MY_PROJECT_DIR=
P
W
D
(可以绝对路径)
e
x
p
o
r
t
M
Y
H
E
A
D
E
R
D
I
R
=
{PWD}(可以绝对路径) export MY_HEADER_DIR=
PWD(可以绝对路径)exportMYHEADERDIR={MY_PROJECT_DIR}
export MY_ANALYTICAL_DIR=${MY_PROJECT_DIR}
编辑:ocean_trench.in
VARNAME = /data/home/wangling/COAWST/ROMS/External/varinfo.dat
NtileI == 1 ! I-direction partition(看自己情况)
NtileJ == 1 ! J-direction partition
GRDNAME == /data/home/wangling/Projects/wetdry/wetdry_dam_break_grd.nc
ININAME == /data/home/wangling/Projects/wetdry/wetdry_dam_break_init.nc
APARNAM = /data/home/wangling/COAWST/ROMS/External/s4dvar.in
SPOSNAM = /data/home/wangling/COAWST/ROMS/External/stations.in
FPOSNAM = /data/home/wangling/COAWST/ROMS/External/floats.in
BPARNAM = /data/home/wangling/COAWST/ROMS/External/bioFasham.in
SPARNAM = /data/home/wangling/COAWST/ROMS/External/sediment.in
USRNAME = /data/home/wangling/COAWST/ROMS/External/MyFile.dat
编译模式: ./build_coawst.sh -j X
运行模式: mpirun -n 1 ./coawstM ocean_wetdry_dam_break.in
Slope
文件:build_coawst.sh
export COAWST_APPLICATION= WETDRY_SLOPE_CHAN(这是两个实验)
对应有文件wetdry_slope_chan.h
export MY_ROOT_DIR=/data/home/wangling/COAWST
export MY_PROJECT_DIR=
P
W
D
(可以绝对路径)
e
x
p
o
r
t
M
Y
H
E
A
D
E
R
D
I
R
=
{PWD}(可以绝对路径) export MY_HEADER_DIR=
PWD(可以绝对路径)exportMYHEADERDIR={MY_PROJECT_DIR}
export MY_ANALYTICAL_DIR=${MY_PROJECT_DIR}
编辑:ocean_trench.in
VARNAME = /data/home/wangling/COAWST/ROMS/External/varinfo.dat
NtileI == 1 ! I-direction partition
NtileJ == 1 ! J-direction partition
GRDNAME == /data/home/wangling/Projects/wetdry/wetdry_slope_chan_grd.nc
ININAME == /data/home/wangling/Projects/wetdry/wetdry_slope_chan_init.nc
BRYNAME == /data/home/wangling/Projects/wetdry/wetdry_slope_chan_forc.nc
APARNAM = /data/home/wangling/COAWST/ROMS/External/s4dvar.in
SPOSNAM = /data/home/wangling/COAWST/ROMS/External/stations.in
FPOSNAM = /data/home/wangling/COAWST/ROMS/External/floats.in
BPARNAM = /data/home/wangling/COAWST/ROMS/External/bioFasham.in
SPARNAM = /data/home/wangling/COAWST/ROMS/External/sediment.in
USRNAME = /data/home/wangling/COAWST/ROMS/External/MyFile.dat
编译模式: ./build_coawst.sh -j X
运行模式: mpirun -n 1 ./coawstM ocean_wetdry_slope_chan.in
2. 单独运行SWAN模式
要注意cmake对不对
Case 1
文件build_coawst.sh里面(其他路径也要给对,因为重复的,这里就不赘述了)
export MY_ANALYTICAL_DIR=/data/home/wangling/Projects/Sandy/Inlet_test
文件swan_inlet_test.in以下路径给对
&& KEYWORD for number of nested SWAN grids.
NSGRIDS 1
&& KEYWORDS TO CREATE AND READ COMPUTATIONAL GRID &&
CGRID CURVILINEAR 76 71 EXC 9.999000e+003 &
CIRCLE 36 0.04 1.0 20
READGRID COORDINATES 1 ‘/data/home/wangling/Projects/Inlet_test/Swanonly/inlet_test_grid_coord.grd’ 4 0 0 FREE
&& KEYWORDS TO CREATE AND READ BATHYMETRY GRID &&
INPGRID BOTTOM CURVILINEAR 0 0 76 71 EXC 9.999000e+003
READINP BOTTOM 1 ‘/data/home/wangling/Projects/Inlet_test/Swanonly/inlet_test_bathy.bot’ 4 0 FREE
文件inlet_test.h里面
#undef NESTING
保存退出
此后命令行输入:
./build_coawst.sh -j X 编译模型
mpirun -n X ./coawstM swan_inlet_test.in 运行模型
!!!!!需要注意,我所在服务器手册上的命令:
mpiexec –np X ./coawstM.exe Projects/Inlet_test/Swanonly/swan_inlet_test.in
他报错:HYDU_create_process (utils/launch/launch.c:75): execvp error on file –np (No such file or directory)
此前其实mpirun -n X ./coawstM swan_inlet_test.in他也报错这个错误,但是后面莫名其妙好了,目前没有找出原因
Case 2(refine)
文件swan_inlet_test.in以下路径给对(这里不是重复)
&& KEYWORD for number of nested SWAN grids.
NSGRIDS 2 (特别注意)
&& KEYWORDS TO CREATE AND READ COMPUTATIONAL GRID &&
CGRID CURVILINEAR 76 71 EXC 9.999000e+003 &
CIRCLE 36 0.04 1.0 20
READGRID COORDINATES 1 ‘/data/home/wangling/Projects/Inlet_test/Swanonly/inlet_test_grid_coord.grd’ 4 0 0 FREE
&& KEYWORDS TO CREATE AND READ BATHYMETRY GRID &&
INPGRID BOTTOM CURVILINEAR 0 0 76 71 EXC 9.999000e+003
READINP BOTTOM 1 ‘/data/home/wangling/Projects/Inlet_test/Swanonly/inlet_test_bathy.bot’ 4 0 FREE
文件swan_inlet_test_ref5.in以下路径给对
&& KEYWORD for number of nested SWAN grids.
NSGRIDS 2
&& KEYWORDS TO CREATE AND READ COMPUTATIONAL GRID &&
CGRID CURVILINEAR 76 71 EXC 9.999000e+003 &
CIRCLE 36 0.04 1.0 20
READGRID COORDINATES 1 ‘/data/home/wangling/Projects/Inlet_test/Swanonly/inlet_test_grid_coord_ref5.grd’ 4 0 0 FREE
&& KEYWORDS TO CREATE AND READ BATHYMETRY GRID &&
INPGRID BOTTOM CURVILINEAR 0 0 76 71 EXC 9.999000e+003
READINP BOTTOM 1 ‘/data/home/wangling/Projects/Inlet_test/Swanonly/inlet_test_bathy_ref5.bot’ 4 0 FREE
文件inlet_test.h里面
#define NESTING
此后命令行输入:
./build_coawst.sh -j X 编译模型
mpirun -n 10 ./coawstM swan_inlet_test.in swan_inlet_test_ref5.in运行模型