在Ubuntu18.04上编译SUNTANS模型

经测试,SUNTANS模型也可在Win10的Ubuntu子系统上安装,安装过程也可参考本blog。

SUNTANS模型

SUNTANS模型是非静压(Non-Hydrostatic)三维海洋模型。其中,SUNTANS是Stanford Unstructured Nonhydrostatic Terrain-following Adaptive Navier-Stokes Simulator的缩写。该海洋模型的控制方程为Boussinesq近似下的N-S方程。

模型采用三角形非结构化网格;变量定义采用 Arakawa C 网格的形式,即水平向流速定义在三维单元垂向面中心,且垂直于该面,垂向流速定义在三维单元水平面的 Voronoi 点上,即三角形三边垂直平分线的交点,动水压q 、盐度s、水温T等标量定义在三维单元体中心;垂向一般采用z-坐标,其水位方程由基于θ方法对沿水深积分的连续性方程得出。
大多的海洋/水动力模型往往采用静压假定;而SUNTANS采用非静压模式,即压力p=ph+q,式中ph为静水压力,q为动水压力。动水压力由压力泊松方程矫正得到。

此外,模型中还包含了紊流(湍流)模型,及盐度、温度、泥沙等模块。SUNTANS模型适用于不同尺度的各类水流现象模拟。

编译准备

本文针对的SUNTANS模型在Ubuntu系统上的编译(Ubuntu 18)。

下载源代码

首先在GitHub上下载SUNTANS模型的源代码
或利用git指令进行下载。

之后将源代码包解压,得到suntans-master文件夹。文件夹中包含:

  1. examples文件夹:一些模型的算例
  2. guide文件夹:SUNTANS模型的手册,包括哦tex文件与pdf文件
  3. main文件夹:主程序
  4. mfiles文件夹
  5. .gitignore文件、LICENSE文件和README文件

打开并浏览README文件,上面记录了模型的编译运行步骤。

所需库的安装

在安装之前,首先保证计算机上又c代码的编译器,手册中推荐的就是gcc编译器。在ubuntu系统中,这个编译器可通过sudo apt-get install gcc的指令来安装。

除此之外,还需安装一些库。本人建议安装如下三个:

  1. MPICH库:并行需要
  2. ParMetis库:并行需要
  3. Triangle库:三角形网格剖分

MPICH的安装

MPICH库的安装教程较多,可以到网络上下载所需版本的MPICH源代码进行安装。SUNTANS模型同时适用mpich-1和mpich-2;在编译过程中,编译文件会自动选择适用的版本,用户只需按要求配置好MPICH库并在Makefile.in中做好设置(后面会讲)。

采用以下指令安装MPICH:

sudo apt-get install mpich 

ParMetis的安装

SUNTANS模型同时适用ParMetis 2.0和ParMetis 3.0;在编译过程中,需要用户按要求在主程序代码和Makefile.in中做好设置(后面会讲)。

本文以ParMetis 2.0为例,讲解该库的安装。
首先打开代码包中的Makefile.in文件,检查CC变量是否正确设置(一般有 CC = mpicc)。正确设置并检查无误后在终端中输入make来编译libmetis.a和libparmetis.a。

但在输入make指令后,可能会遇到如下报错:
在这里插入图片描述若出现上述情况,则进入METISLib子文件夹,找到rename.h文件,将文件末出现的 __log2 改成 __intlog2;同样,再找到proto.h文件,将文中出现的 __log2(int) 改称 __intlog2(int)。
改完后返回上级目录(即文件夹ParMetis-2.0下),再次输入make进行编译。

安装完成后进入文件夹Graphs中,输入mtest指令进行测试。输入metest指令前需保证parmetis-test已经安装到系统上;若在输入mtest指令后,系统提示parmetis-test未安装,则先安装该库:

sudo apt-get install parmetis-test

之后继续输入mtest指令进行测试;若程序正确运行(no any ‘incorrect’ results),则证明ParMetis库已安装成功。
除了mtest,建议直接输入以下指令进行测试:

mpirun -np 8 ptest 3elt.graph

其中 -np 后对应的参数是线程数,运行时可根据计算机cpu功能,选择一个合适的值输入。

Triangle的安装

本节内容参考了用户KillGod_pty的原创文章 ,有兴趣的朋友请到大佬的博客(Triangle学习之旅——下载与安装)上了解更详细的内容。
(在此感谢该博主 KillGod_pty)

首先,到Triangle官网下载源代码,文件位置如下图所示。可以下载a.zip或a.shar。
在这里插入图片描述
下载完成后,解压得到Triangle文件夹,并在终端中进入文件夹。这里以a.zip为例,解压后得到如下图所示的7个文件。其中README为Triangle说明文件,里面详细介绍了Triangle代码包的使用方法。
在这里插入图片描述
编译有两种方法,一是直接输入make指令进行编译,二是采用如下指令进行编译:

cc -O -o triangle triangle.c -lm
cc -O -o showme showme.c -lX11

:以上第一个指令编译了Triangle库,第二个指令编译了showme.c;showme为支持triangle可视化的一款简单软件,如果在编译showme时报错,一般原因为X11没有安装完整,ubuntu可以使用如下命令检查X11是否安装:

sudo apt-cache search x11-dev

若显示:

libx11-dev - X11 client-side library (development headers)
libxkbcommon-x11-dev - library to create keymaps with the XKB X11 protocol - development files
libghc-x11-dev - Haskell X11 binding for GHC

类似的信息。则需要安装libghc-x11-dev,即:

sudo apt-get install libghc-x11-dev

完成上述安装后,Triangle也可成功编译。

安装完成后,可利用以下指令进行测试:

./triangle -p A.poly
./showme A.poly

其中,第一个指令是对图形A.poly进行三角形网格剖分,第二个指令是利用showme来查看生成的网格图形。

特别提醒:由于SUNTANS模型代码编译中可能会调用Triangle文件夹中的可执行文件,故在测试完成后,输入以下指令来生成triangle.o文件:

make trilibrary

编译SUNTANS模型

进入suntans-master下面的main文件夹,打开partition.c文件,代码开头几段如下所示:

/*
 * File: partition.c
 * Author: Oliver B. Fringer
 * Institution: Stanford University
 * --------------------------------
 * This file contains functions that use the ParMetis libraries
 *
 * Copyright (C) 2005-2006 The Board of Trustees of the Leland Stanford Junior 
 * University. All Rights Reserved.
 *
 */
#include "partition.h"
#include "memory.h"
#include "grid.h"

//Parmetis 2.0
#include "parmetis.h"				//这里表示我们配置了Parmetis 2.0库
//Parmetis 3.1
//#include "parmetislib.h"			//如果配置Parmetis 3.1则去掉前面的注释符号

若在ParMetis配置部分与你配置库的版本不符,则按要求进行修改。

再者,修改Makefile.in文件,代码中包含四个变量:MPIHOME、PARMETISHOME、TRIANGLEHOME、NETCDF4HOME。上文讲解了前三个变量对应的库的配置,所以按要求填写好库的位置,示例如下:

MPIHOME=/usr/local/mpich
PARMETISHOME=/usr/local/packages/ParMetis-2.0
TRIANGLEHOME=/usr/local/packages/triangle

注意

  1. 若MPICH库采用上述 sudo apt-get install 的方法安装配置,则 MPIHOME 变量可用 /usr 来赋值;
  2. 各个等号=前后都不能留有空格!!!

测试算例

此处以cylinder算例为例,依次执行如下指令即可:

cd suntans-master/examples/cylinder
make test
cd ../../main
make sunplot
./sunplot --datadir=../examples/cylinder/data
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值