非静压模型NHWAVE学习(5)——模型运行所需文件

本博文介绍了三种模型运行的必须文件,包括编译模型时的Makefile文件、控制模型运行的参数文件(input.txt)以及其它所需的数据文件(如初始水深文件depth.txt)。

此外,本人在NHWAVE原版源代码基础上,更新了垂向网格分层百分比可指定、被动示踪剂输移、温度场输入输出等模块,并修正了植被水流模型中的一些BUG。有兴趣的朋友请上我的GitHub下载代码。

欢迎各位朋友对此提出指导意见;大家可以一起交流,共同进步!

Makefile文件

编译NHWAVE模型的内容中,我们提到过这个Makefile文件。它控制着模型(代码)的编译,让使用者有选择地更改模型中的各项设定、启闭模型中的各项功能等。
以下,是一个makefile文件内容的示例:

#-----------BEGIN MAKEFILE-------------------------------------------------
         SHELL         = /bin/sh
         DEF_FLAGS     = -P -F -C -traditional 
         EXEC          = nhwave
#==========================================================================
#--------------------------------------------------------------------------
#        PRECISION          DEFAULT PRECISION: SINGLE                     
#                           UNCOMMENT TO SELECT DOUBLE PRECISION
#--------------------------------------------------------------------------
         FLAG_1 = -DDOUBLE_PRECISION
         FLAG_2 = -DPARALLEL
#         FLAG_3 = -DLANDSLIDE
         FLAG_4 = -DSALINITY
         FLAG_5 = -DTEMPERATURE
#         FLAG_6 = -DBUBBLE
#         FLAG_7 = -DSEDIMENT
#         FLAG_8 = -DVEGETATION
#         FLAG_9 = -DINTEL
#	  FLAG_10 = -DBALANCE2D
#	 FLAG_11 = -DOBSTACLE        
#	 FLAG_12 = -DTWOLAYERSLIDE
#	 FLAG_13 = -DCORALREEF
#	 FLAG_14 = -DPOROUSMEDIA
#--------------------------------------------------------------------------
#  mpi defs 
#--------------------------------------------------------------------------
         CPP      = /usr/bin/cpp
         CPPFLAGS = $(DEF_FLAGS)
         FC       =mpif90
#         FC        = mpiifort
         DEBFLGS  = 
         OPT      = #-g
         LDFLAGS   =-ffpe-summary='none'
         CLIB     = 
#==========================================================================
         FFLAGS = $(DEBFLGS) $(OPT) 
         MDEPFLAGS = --cpp --fext=f90 --file=-
         RANLIB = ranlib
#--------------------------------------------------------------------------
#  CAT Preprocessing Flags
#--------------------------------------------------------------------------
         CPPARGS = $(CPPFLAGS) $(DEF_FLAGS) $(FLAG_1) $(FLAG_2) $(FLAG_3) \
                   $(FLAG_4) $(FLAG_5) $(FLAG_6) $(FLAG_7) $(FLAG_8) $(FLAG_9) \
	           $(FLAG_10) $(FLAG_11) $(FLAG_12) $(FLAG_13) $(FLAG_14)
#--------------------------------------------------------------------------
#  Libraries           
#--------------------------------------------------------------------------
         LIBS  = -L/mnt/f/NHWAVE/hypre/lib -lHYPRE
         INCS  = -L/mnt/f/NHWAVE/hypre/include
#--------------------------------------------------------------------------
#  Preprocessing and Compilation Directives
#--------------------------------------------------------------------------
.SUFFIXES: .o .f90 .F .F90 

.F.o:
	$(CPP) $(CPPARGS) $*.F > $*.f90
	$(FC)  -c $(FFLAGS) $(INCS) $*.f90
#	\rm $*.f90
#--------------------------------------------------------------------------
#  NHWAVE Source Code.
#--------------------------------------------------------------------------

MODS  = mod_global.F	mod_util.F 

MAIN  = nhwave.F initialize.F two_layer_slide.F fluid_slide.F deformable_slide.F\
        source_terms.F waves.F pressure.F

SRCS = $(MODS)  $(MAIN)

OBJS = $(SRCS:.F=.o) nspcg.o

#--------------------------------------------------------------------------
#  Linking Directives               
#--------------------------------------------------------------------------

$(EXEC):	$(OBJS)
		$(FC) $(FFLAGS) $(LDFLAGS) -o $(EXEC) $(OBJS) $(LIBS)
#--------------------------------------------------------------------------
#  Cleaning targets.
#--------------------------------------------------------------------------

clean:
		/bin/rm -f *.o *.mod

clobber:	clean
		/bin/rm -f *.f90 *.o nhwave

其中有两个部分尤其重要。一是10 ~ 23行的FLAG部分,该部分控制着编译时各功能及各模块的启闭;二是63 ~ 70行的源代码文件部分,该部分指定了要编译的源文件。
对于一个makefile文件,我们要知道行首的#号代表“注释行”之意;所以,若某行行首有#号,则代表该行指令不起作用,即所对应功能/设定不会在编译过程中启动。如上述例子中的

#         FLAG_3 = -DLANDSLIDE

上述语句表示了所对应的 滑坡体模块LANDSLID 不会在此编译中启用,故所生成模型不能进行滑坡体运动的模拟计算。对于10 ~ 23行的FLAG部分,它们所对应的含义如下

  1. FLAG_1 = -DDOUBLE_PRECISION:模型中各个数据按双精度的方式计算、存取;
  2. FLAG_2 = -DPARALLEL:并行功能(开启后才能实现代码并行);
  3. FLAG_3 = -DLANDSLIDE:滑坡体模块LANDSLID module;
  4. FLAG_4 = -DSALINITY:盐度模块SALINITY module;
  5. FLAG_5 = -DTEMPERATURE:温度模块TEMPERATURE module;
  6. FLAG_6 = -DBUBBLE:气泡运动模块BUBBLE module;
  7. FLAG_7 = -DSEDIMENT:泥沙输移模拟模块SEDIMENT module;
  8. FLAG_8 = -DVEGETATION:植被水流模拟模块VEGETATION module;
  9. FLAG_9 = -DINTEL:若要使用Intel系的Fortran编译器(如IVF),则要开启此项;
  10. FLAG_10 = -DBALANCE2D:在模拟过程中估计y方向动量平衡的计算模块;
  11. FLAG_11 = -DOBSTACLE:使用浸没边界法的考虑障碍物的水流模型;
  12. FLAG_12 = -DTWOLAYERSLIDE:双层滑坡体模型TWOLAYERSLIDE module;
  13. FLAG_13 = -DCORALREEF:珊瑚礁水流模型CORALREEF module;
  14. FLAG_14 = -DPOROUSMEDIA:多孔介质流动模型POROUSMEDIA module。

由于多数模块都是后继研究者不断加入的,所以它们的功能在NHWAVE源代码所附带的用户手册中暂未提及。但我们仍可以搜索相关论文进行学习。
如果想要学习、修改源代码,对makefile及各模块间关系的理解是不可或缺的。
以后有机会,我再来结合源代码,和大家一起学习里面的各个模块(希望以后的自己能填上这个坑)。

对于63 ~ 70行这部分,它指定了代码源文件。其中,MODS指定的文件都是模块源代码,不含任何子程序与函数;而MAIN指定了这些子程序及自定义函数的源代码文件,主程序在nhwave.F中。SRC为上述MODS和MAIN的集合。
OBJS中提及的nspcg表示NHWAVE所调用的基于非对称预处理共轭梯度法(Nonsymmetric Preconditioned Conjugate Gradient, NSPCG)的大型线性方程组求解库。该库在我们求解动水压力时候被调用(pressure.F)。

input.txt文件

input是模型运行的参数文件,所有的参数均需在该文件中给出。而且,在运行前,input.txt文件必须要和nhwave可执行文件在同一目录下。
在input文件中,每个参数的设定指令都独占一行,且行末不可添加额外的标点符号(如行末句号、分号等);基本格式如下所示:

! cell numbers
Mglob = 550
Nglob = 1
Kglob = 3

上述语句表明了模型在三个方向上的网格数配置。对于input文件中的各类参数,有些需要指定数字、有些需要指定逻辑值 T 或者 F。尤其要注意的是,对于指定数字的参数,要仔细分辨该参数是整数型还是浮点数型;若为浮点数型且指定的值没有小数部分,则务必在设定值后补上 .0,例如:

Yield_Stress = 10.0

在每个参数前,都有行首为感叹号的各个注释行,其内容简要说明了参数的意义;在修改参数前,务必好好阅读这些注释。input.txt中包含了所有模块的参数设定,而对于大多数模拟,我们不会启用所有的参数,所以不必担心未开启模块的相关参数值影响了当前的模拟计算;如果模型启动时提示,要给这些”无关“参数一个输入值,则给定一个类型合适的值即可。

由于input.txt中内容繁多,以后会结合模拟实例一起讲解。

其它输入文件

除了参数文件input.txt以外,还有个需要的文件是水深文件depth.txt。这个文件指定了每个网格的初始水深值,它的数据格式如下:

D(1,1)		D(2,1)		D(3,1)		D(4,1) ... 		D(Mglob,1)
D(1,2)		D(2,2)		D(3,2)		 ...
.		...
.		...
.		...
D(1,Nglob)	D(2,Nglob)	D(3,Nglob)	D(4,Nglob) ... D(Mglob,Nglob)

注意,其实depth.txt并非不可或缺;若在input文件中将ANA_BATHY 设定为T,则计算域中的水深设定为恒定值且无需depth.txt也可启动模型。但此时我们需要修改源代码(initialize.F)中的内容来实现这一恒定水深的指定。所以,为了方便,我习惯于将ANA_BATHY 设定为F,而将depth.txt作为启动模型的必须文件。

此外,如有需要,计算域中的初始水位、初始流速场、初始盐度和温度场、波浪参数等都可用相应的.txt数据文件给出。其数据给是类似depth.txt。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值