lihu8918 / shallow_water_equation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

本程序基于有限差分方法,利用Arakawa-C交错网格对计算域进行离散,实现了对二维浅水方程组数值解的求解。其中,方程组比较全面地包含了浅水方程的物理过程,包括了风应力,底摩擦力,科氏力,水平压强梯度力,对流项,扩散项。程序中所采用的原始方程、离散方法均可以在《ocean modelling for beginners》此书中找到,本程序的编写也是基于书中所附练习题的代码。
程序包含了三个源文件,其中:
(1)var.f90
该文件为模块,模块名为var。里面定义了主程序中用到的所有“全局变量“。
(2)proc.f90
该文件为模块,模块名为proc。里面封装了计算过程有关的四个子程序,包括:cal_u,用于计算迭代步流速u;cal_v,用于计算迭代步流速v;cal_eta,用于计算迭代步水位eta;advect,用于计算对流项,被cal_u,cal_v两个字程序调用。
(3)main.f90
该文件为主程序,主要作用为读取水深,参数赋值,数组初始化,输出文件等。
以上程序均经过gfortran(4.4.7)和ifort(15.0.2)编译器编译通过,系统平台为CentOS 6.8。计算结果经绘图分析,也基本符合合理认知。由于水平有限,程序中如有算法错误或者程序bug,欢迎读者指正批评。

PS:本程序所有边界均采用闭边界,即边界处u,v为零,净水深为零或负值。下一步(有时间精力的话)考虑将开边界类型加入到程序算法中来,考虑的开边界类型包括clamp,零梯度以及辐射边界类型。

About


Languages

Language:Fortran 99.3%Language:Makefile 0.7%