Windows环境从零开始安装FVCOM(基于CentOS)

最近入坑了海洋模式,决定从FVCOM入手试试水,奈何从安装虚拟机开始竟然每一步都走的如此艰难,特此写下这个文章,为诸位提供便利的同时记录这一心酸的历史。


致谢:

本文主要基于以下两大教程:

1.鲲鹏社区 - 气象行业应用移植指南

https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengfvcom_02_0001.html

2.优快云 - Netcdf4.4的安装过程(毕竟安装过程的一大半是装netcdf库)

https://blog.youkuaiyun.com/schumacher2016/article/details/80850240


1. VMware安装与虚拟机配置

表1 所需资源列表
项目版本下载地址
VMware Workstation Pro17.6.1https://pan.baidu.com/s/1tg-abYmbHFYv-Fy8vvY0nw?pwd=zthq
CentOS 7 x86_647.6.1810https://pan.baidu.com/s/1HOJ_eQX3tga_N7pkwoycqQ?pwd=zfqy

1.1 VMware的下载

2023年11月22日,博通正式宣布收购VMware。加入博通之后,VMware 的官方名字也改成了 VMware by Broadcom。收购Vmware后,workstation也随之从永久许可转为订阅制,同时面向个人免费。

坏消息是,2024年5月5日之后,VMware workstation不能直接在vmware官网进行下载了,需要在博通网站上进行下载。VMware Workstation Pro下载链接 与原来相比,下载前需要注册,且下载地址及其难找,对新用户来说非常不友好。虽然我在上面给出了17.6.1版本的安装包,但考虑到以后还会更新,详细的下载过程可以参考这篇帖子:[2025年]最新VMware Workstation虚拟机下载并安装

好消息是, 2024年11月12日后,VMware宣布了VMware Workstation和VMware Fusion完全免费。但只有当前最新版本以及以后的版本才支持个人使用 (Personal Use) 免费许可。以 Workstation Pro 为例,在第一次启动时会要求你输入 license key,对于个人用户而言,你只需要选 Personal Use 就可以免费使用了。

1.2 VMware的安装

我唯一的建议是安装时关闭360安全卫士等杀毒软件,避免许多烦心事。

可以直接参考下面这篇帖子,写的挺详细的:

VMware下载与安装教程(保姆级教学超详细)

1.3 配置CentOS 7

可以参考这篇帖子的后半部分:

vm15+CentOS7安装(超级详细,保姆级教学,小白也会)

比较反人类的一点是每一步的“完成”在左上角,点击之后才能进入下一步。

注意:一定要每一步都按教程设置,比如软件选择要选“GNOME桌面”,而非默认的“最小化”

1.4 安装图形化界面

如果选择了“GNOME桌面”,则这一步可以跳过!!

我说最后一步安装感觉挺快的,没几分钟就装好了,选择最小化的代价就是没有图形化界面,取而代之的是命令行:

虽然也能凑合用,但毕竟用的不爽,所以接下来就要装一下图形化界面,参考的是这篇帖子:

CentOS7没有图形化界面,怎么安装图形化界面

当然,这对新手及其不友好,因为你装着装着就会发现——当前的镜像地址无法找到yum所需的文件!究其原因是CentOS 7 的官方仓库在 2024 年 6 月 30 日之后已经停止维护。所以使用 CentOS 7 官方仓库可能会遇到问题,那就只能换源

所以最简单粗暴的方式是——删掉这个虚拟机重装。

删除的方法是打开安装的位置,删除所有文件后,再在VMware里移除就可以了。

1.5 共享文件夹解决方案之一 —— 手动挂载(不推荐)

此方法操作简单,但不建议在共享文件夹中进行安装操作,这容易带来问题

Vmware中挂载共享文件夹操作及各命令解析

若虚拟机重启后找不到共享文件夹,则需重新挂载

解决VMware重新打开后找不到共享文件夹的问题

1.6 共享文件夹解决方案之二——Samba (推荐)

如果不介意用稍微麻烦一些的操作换来更流畅的体验,也可以使用Samba

Win 访问 CentOS samba配置的共享文件夹(简单配置看这篇足够了)

注:这篇文章中,作者在配置smb.conf一节中将其路径写错了,应为:

sudo vim /etc/samba/smb.conf

Centos7局域网上共享文件夹(推荐看这篇)

因为 smbpasswd 命令只能添加系统已知的用户,因此我所采用的添加用户的顺序为:

sudo useradd lethal
sudo passwd lethal
sudo smbpasswd -a lethal

创建共享文件夹操作:

sudo mkdir -p /NetShare
sudo chmod -R 777 /NetShare
sudo cp -rp /etc/samba/smb.conf  /etc/samba/smb.conf.bak

配置smb.conf

[NetShare]
    comment = Share Directories
    path = /NetShare
    valid users = lethal
    browseable = yes
    public = yes
    writeable = yes

配置防火墙:

sudo setenforce 0
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
sudo systemctl restart firewalld

CentOS 7 Samba 共享实现(防火墙开启 + SELinux 强制模式)

1.7 提高界面清晰度

如果觉得虚拟机的分辨率不忍直视,也可以稍作调整,增加一下清晰度

VMware 自适应分辨率设置

2. FVCOM的基础环境搭建

表2 所需资源列表
项目版本下载地址
zlib1.2.8https://pan.baidu.com/s/1beKr3EXRU_C7KBStKI9f9Q?pwd=7xg4
hdf51.10.5https://pan.baidu.com/s/1ILwaRnbv8TZ1nF5t4NaLBw?pwd=cx8q
netcdf-c4.7.0https://pan.baidu.com/s/1_y55XFnmYAGqJQQDXoCfpA?pwd=hd5u
netcdf-fortran4.4.5https://pan.baidu.com/s/19j0mMwkH6RdgwSgRGpLk5Q?pwd=xibc
metis4.0.3https://pan.baidu.com/s/1Dxa_zAdtD06Gu42Zp4SFmQ?pwd=sjjx
metis补丁4.0https://pan.baidu.com/s/1mslnf-pplRGNemWxVW82rg?pwd=wh9s 
openmpi5.0.9https://pan.baidu.com/s/1cNUIP_Yf5h9P2M6jHo-0FA?pwd=7vzx

NetCDF全称为network Common Data Format,中文译法为“网络通用数据格式”,对程序员来说,它和zip、jpeg、bmp文件格式类似,都是一种文件格式的标准。netcdf文件开始的目的是用于存储气象科学中的数据,现在已经成为许多数据采集软件的生成文件的格式。

注:netcdf 4.1.3及之前的版本中,C lib和fortran lib没有分开,netcdf4.2以上的版本c库和fortran库分开。这就导致了netcdf-fortran-4.2的安装麻烦了一点,需要依次安装 zlib,hdf5,netcdf,netcdf-c,netcdf-fortran。

2.1 安装之前的说明

1. 在开始前,我们需要下载好表2中的安装包,并统一放到共享文件夹路径下,这里我放在了

 /NetShare

路径下。

2. 由于安装netcdf4需要zlib和hdf5,我们将把这些安装在同一个目录下,这里我放在了

/usr/local/netcdf4-needed

路径下,方便后面的环境变量配置。

3. 安装使用的是root用户,如果读者用户没有root权限,可以使用sudo来提升权限。

4. 如果使用yum的官方源进行yum install xxxx 的时候,速度非常慢,则建议将CentOS的yum源 替换为国内的镜像源

2.2 安装zlib

应该是用于数据压缩,szip安装同zlib

1. 复制安装包到虚拟机(直接在共享文件夹中安装可能会出问题)

cd /usr/local
mkdir ./netcdf4-needed
cd netcdf4-needed/
mkdir ./packages
cd packages/
cp /NetShare/zlib-1.2.8.tar.gz ./

2. 解压安装包

tar -zxvf zlib-1.2.8.tar.gz

3. 配置安装信息

cd zlib-1.2.8
./configure --prefix=/usr/local/netcdf4-needed

其中可以使用 ./configure--help来查看可以使用哪些选项。这里选择默认选项安装。

4. 编译、检查、安装

make -j 4 # 使用4个线程编译
make check
make install

安装完成之后会在/usr/local/netcdf4-needed这个目录下生成三个文件lib include share

2.3 安装openmpi

openmpi是一个开源的并行计算库,用于在集群计算环境中进行并行计算

1. 将文件保存到虚拟机并解压

cd /usr/local/netcdf4-needed/packages
cp /NetShare/openmpi-5.0.9.tar.gz ./
tar -xvf openmpi-5.0.9.tar.gz

2. 配置安装路径,编译并安装

这一步里面/configure时间比较久,不要忘了进行后面的步骤。

cd openmpi-5.0.9/
./configure --prefix=/usr/local/openmpi
make -j 4
make install

3. 设置环境变量,路径为自己安装的路径

export MPI_HOME=/usr/local/openmpi
export PATH=${MPI_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${MPI_HOME}/lib:$LD_LIBRARY_PATH
export MANPATH=${MPI_HOME}/share/man:$MANPATH

4. 验证安装成功,测试一下自带的例子

cd openmpi-5.0.9/examples
make -j 4
mpirun -np 4 hello_c

执行结果如下:

2.4 安装hdf5

hdf5是为了使用netcdf-4特性,这个特性需要hdf5来支持,这个特性支持2G以上的文件。

1. 复制安装包到虚拟机(直接在共享文件夹中安装可能会出问题)

cd /usr/local/netcdf4-needed/packages
cp /NetShare/hdf5-1.10.5.tar.gz ./

2. 解压

tar -xvf hdf5-1.10.5.tar.gz

3. 配置安装信息

cd hdf5-1.10.5
./configure --prefix=/usr/local/netcdf4-needed --with-zlib=/usr/local/netcdf4-needed/ --enable-fortran --enable-parallel CC=mpicc FC=mpif90 CXX=mpicxx

4. 编译、检查、安装

make -j 4
make check
make install

安装完成后,会被安装进 /usr/local/netcdf4-needed目录下的四个文件lib include share bin 中.

2.5 安装netcdf-c

1. 复制安装包并解压

cd /usr/local/netcdf4-needed/packages
cp /NetShare/netcdf-c-4.7.0.tar.gz ./
tar -zxvf netcdf-c-4.7.0.tar.gz

2.配置安装信息

cd netcdf-c-4.7.0/
# 运行以解决configure: error: curl required for byte range support. Install curl or build without --enable-byterange.
yum install curl
yum install libcurl-devel
./configure --prefix=/usr/local/netcdf4-needed LDFLAGS=-L/usr/local/netcdf4-needed/lib CPPFLAGS=-I/usr/local/netcdf4-needed/include CC=mpicc --disable-dap

关于CPPFLAGS和LDFLAGS的用法

3. 编译、检查、安装

make -j 4
make check
make install

4. 设置NETCDF-C的环境变量

export PATH=/usr/local/netcdf4-needed/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/netcdf4-needed/lib:$LD_LIBRARY_PATH
export NETCDF=/usr/local/netcdf4-needed

2.6 安装netcdf-fortran

1. 复制安装包并解压

cd /usr/local/netcdf4-needed/packages
cp /NetShare/netcdf-fortran-4.4.5.tar.gz ./
tar -zxvf netcdf-fortran-4.4.5.tar.gz

2.配置安装信息

cd netcdf-fortran-4.4.5/
./configure --prefix=/usr/local/netcdf4-needed CPPFLAGS=-I/usr/local/netcdf4-needed/include LDFLAGS=-L/usr/local/netcdf4-needed/lib CC=mpicc FC=mpif90 F77=mpif90

注意:此处如果没有输入 --disable-dap的话,要预先安装curl. dap应该是用于远程数据处理相关的,这里不安装也行。

3.编译、检查、安装

make -j 4
make check
make install

2.7 配置环境变量

1. 终端中输入

vim ~/.bashrc

按i进入插入模式,输入如下信息:

export NETCDF=/usr/local/netcdf4-needed
export PATH=$NETCDF/bin:$PATH
export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH
export CPPFLAGS='-I/usr/local/netcdf4-needed/include'
export LDFLAGS='-L/usr/local/netcdf4-needed/lib'

输入完成保存退出(先按esc键,然后输入:wq! 保存退出)

2. 终端中输入

source ~/.bashrc

使环境变量生效

3. FVCOM的安装与调试

表3 所需资源列表
项目版本下载地址
fvcom4.1https://pan.baidu.com/s/1B2Mx51LffyJRGj5A36o2HQ?pwd=c8bc

3.1 创建主程序安装目录并复制安装包

mkdir -p /path/to/FVCOM
cp /NetShare/fvcom-4.1.tar.gz /path/to/FVCOM
cd /path/to/FVCOM
tar -xvf fvcom-4.1.tar.gz
cd FVCOM4.1

3.2 配置相关文件

# 复制“make.inc_example”文件为“make.inc”
cp Examples/Estuary/make.inc_example FVCOM_source/make.inc
# 创建“make.inc”文件软链接
ln -sf FVCOM_source/make.inc ./
# 编辑“make.inc”文件
vim make.inc

3.3 修改配置

按“i”进入编辑模式

修改TOPDIR变量值(第51行)为源码目录,注意行尾不能出现空格:

TOPDIR = /path/to/FVCOM/FVCOM4.1/FVCOM_source

修改第79、80行:

LIBDIR = -L$(INSTALLDIR)/lib -L../METIS_source/metis -L./libs/julian
INCDIR = -I$(INSTALLDIR)/include -I../METIS_source/metis -I./libs/julian

修改第97、98行:

# -L 选项用于指定链接器在搜索库文件时应该包括的额外目录
IOLIBS = -L/usr/local/netcdf4-needed/lib -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz -lcurl -lm
# -I 选项用于指定编译器在搜索头文件时应该包括的额外目录
IOINCS = -I/usr/local/netcdf4-needed/include

注释掉并添加以下内容:

#  Intel/MPI Compiler Definitions (SMAST)      
#--------------------------------------------------------------------------
#         CPP      = /usr/bin/cpp
#         COMPILER = -DIFORT
#         CC       = mpicc
#         CXX      = mpicxx
#         CFLAGS   = -O3
#         FC       = mpif90
#         DEBFLGS  = -check all traceback
# Use 'OPT = -O0 -g'  for fast compile to test the make
# Use 'OPT = -xP' for fast run on em64t (Hydra and Guppy)
# Use 'OPT = -xN' for fast run on ia32 (Salmon and Minke)
#         OPT      = -O0 –g
#         OPT      = -axN –xN
#         OPT      = -O3
 
#  gfortran defs
#--------------------------------------------------------------------------
          CPP      = /usr/bin/cpp
          COMPILER = -DGFORTRAN
          CC       = mpicc
          CXX      = mpicxx
          FC       = mpif90
          DEBFLGS  = 
          OPT      = -O3 -ffixed-line-length-none -ffree-form -ffree-line-length-none
          CLIB     =

按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

3.4 创建编译环境变量文件

创建环境变量文件

cd /path/to/FVCOM/FVCOM4.1
vim env-fvcom.sh

按“i”进入编辑模式,添加如下内容:

export GCC_HOME=/path/to/GNU
export PATH=$GCC_HOME/bin:$PATH
export LD_LIBRARY_PATH=$GCC_HOME/lib:$GCC_HOME/lib64:$LD_LIBRARY_PATH
export MPI_HOME=/usr/lib64/openmpi
export PATH=$MPI_HOME/bin:$PATH
export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH
export HDF5=/usr/local/netcdf4-needed
export PATH=$HDF5/bin:$PATH
export LD_LIBRARY_PATH=$HDF5/lib:$LD_LIBRARY_PATH
export NETCDF=/usr/local/netcdf4-needed
export PATH=$NETCDF/bin:$PATH
export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH

按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
加载环境变量:

source env-fvcom.sh

3.5 编译METIS库

# 进入METIS安装路径
cd ./METIS_source
# 解压METIS安装包
tar -zxvf metis.tgz
# 将补丁文件复制至当前目录
cp /NetShare/metis-4.0.patch ./
# 进入“metis”目录并运行补丁文件
cd metis
patch -p2 < ../metis-4.0.patch
# 创建相应目录
mkdir -p /path/to/FVCOM/FVCOM4.1/FVCOM_source/libs/install/lib
mkdir -p /path/to/FVCOM/FVCOM4.1/FVCOM_source/libs/install/include
mkdir -p /path/to/FVCOM/FVCOM4.1/FVCOM_source/libs/install/bin
# 编译安装METIS库。
make -j 4
make install

3.6 编译julian库

# 进入julian安装路径。
cd ../../FVCOM_source/libs
# 解压julian.tgz安装包。
tar -zxvf julian.tgz
# 进入解压后路径。
cd julian
# 编译安装。
make -j 4
make install

3.7 编译FVCOM主程序

# 进入FVCOM安装路径。
cd  /path/to/FVCOM/FVCOM4.1/FVCOM_source
# 编辑“mod_newinp.F”文件。
vim mod_newinp.F

按“i”进入编辑模式,修改如下内容:

第一个“contains”语句添加如下内容:

!----------------------------------------
! functions
!----------------------------------------

contains
  Character( Len = 256 ) Function N_Fmt( c , n )
    Character( Len = * ) , Intent( IN ) :: c
    Integer , Intent( IN ) :: n
    integer :: i , j
    character( len = 16 ) :: cn
    i = index( c , '<' )
    j = index( c , '>' )
    write( cn , '(g0)' ) n
    N_Fmt = c(:i-1) // Trim(adjustL(cn)) // c(j+1:)
  End Function N_Fmt

第352行:修改前:write(*,'(A20,<size>F10.4)')trim(argname)//': ',fval(1:SIZE)

write(*,N_Fmt('(A20,<size>F10.4)',SIZE))trim(argname)//': ',fval(1:SIZE)

第421行:修改前:write(*,'(A20,<size>I10)')trim(argname)//': ',ival(1:SIZE)

write(*,N_Fmt('(A20,<size>I10)',SIZE))trim(argname)//': ',ival(1:SIZE)

第494行:修改前:write(*,'(A20,<size>L10)')trim(argname)//': ',cval(1:SIZE)

write(*,N_Fmt('(A20,<size>L10)',SIZE))trim(argname)//': ',cval(1:SIZE)

第567行:修改前:write(*,'(A20,<size>A10)')trim(argname)//': ',sval(1:SIZE)

write(*,N_Fmt('(A20,<size>A10)',SIZE))trim(argname)//': ',sval(1:SIZE)

按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

在命令行中直接输入:

# 分别修改“mod_scal.F”、“internal_step.F”、“adv_t.F”、“adv_s.F”文件,对文件中以
# “IF(BACKWARD_ADVECTION”开头的语句进行相应修改,修改“==”为“.eqv.”,修改“/=”为“.neqv”.
sed -i 's/\/=\.TRUE\./\.neqv\.\.TRUE\./g' mod_scal.F
sed -i 's/==\.TRUE/\.eqv\.\.TRUE/g' internal_step.F
sed -i 's/==\.FALSE\./\.eqv\.\.FALSE\./g' adv_t.F
sed -i 's/==\.FALSE\./\.eqv\.\.FALSE\./g' adv_s.F

编译安装主程序:

make -j 4

安装成功后,可使用ll命令在当前目录查看生成的可执行文件“fvcom”

ll fvcom

执行效果如下:

3.8 Estuary算例运行和验证

# 进入FVCOM安装路径。
cd  /path/to/FVCOM/FVCOM4.1/FVCOM_source
# 创建测试目录。
mkdir -p /path/to/FVCOM/test
# 进入测试目录。
cd /path/to/FVCOM/test
# 复制测试算例到当前目录。
cp -r /path/to/FVCOM/FVCOM4.1/Examples/Estuary/ ./
# 进入运行目录。
cd ./Estuary/run

编辑算例输入文件。

# 打开算例输入文件
vim tst_run.nml

按“i”进入编辑模式,为第171行的“tst_grd.dat”增加单引号。

GRID_FILE = 'tst_grd.dat'

按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

将进程数 (-n) 调整为 ≤ CPU 核心数(可通过 nproc 查看),执行以下命令运行测试:

nproc  # 查看可用CPU核心数(例如输出4)
time mpirun -n 4 --allow-run-as-root --bind-to core /path/to/FVCOM/FVCOM4.1/FVCOM_source/fvcom --casename=tst

接下来就能看到FVCOM的logo并等待程序执行:

等几分钟,就能看到程序结束后弹出执行时间花销的信息,此时再输入

# ll 相当于 ls -l,比ls列出的信息更加详细
ll

就能看到输出的nc文件:

完结撒花!

第一次写博客,如果觉得有用的话,就请给我一键三连吧!!

复杂几何的多球近似MATLAB类及多球模型的比较 MATLAB类Approxi提供了一个框架,用于使用具有迭代缩放的聚集球体模型来近似解剖体积模型,以适应目标体积和模型比较。专为骨科、生物力学和计算几何应用而开发。 MATLAB class for multi-sphere approximation of complex geometries and comparison of multi-sphere models 主要特点: 球体模型生成 1.多球体模型生成:与Sihaeri的聚集球体算法的接口 2.音量缩放 基于体素的球体模型和参考几何体的交集。 迭代缩放球体模型以匹配目标体积。 3.模型比较:不同模型体素占用率的频率分析(多个评分指标) 4.几何分析:原始曲面模型和球体模型之间的顶点到最近邻距离映射(带颜色编码结果)。 如何使用: 1.代码结构:Approxi类可以集成到相应的主脚本中。代码的关键部分被提取到单独的函数中以供重用。 2.导入:将STL(或网格)导入MATLAB,并确保所需的函数,如DEM clusteredSphere(populateSpheres)和inpolyhedron,已添加到MATLAB路径中 3.生成多球体模型:使用DEM clusteredSphere方法从输入网格创建多球体模型 4.运行体积交点:计算多球体模型和参考几何体之间的基于体素的交点,并调整多球体模型以匹配目标体积 5.比较和可视化模型:比较多个多球体模型的体素频率,并计算多球体模型与原始表面模型之间的距离,以进行2D/3D可视化 使用案例: 骨科和生物力学体积建模 复杂结构的多球模型形状近似 基于体素拟合度量的模型选择 基于距离的患者特定几何形状和近似值分析 优点: 复杂几何的多球体模型 可扩展模型(基于体素)-自动调整到目标体积 可视化就绪输出(距离图)
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值