【WRF安装第三期(Ubuntu)】搭建WRF编译所需系统-第三方依赖库安装

news2024/9/9 6:15:12

WRF安装第三期:搭建WRF编译所需系统-第三方依赖库安装

  • 1 设置环境变量
    • 1.0 支持库的下载
    • 1.1 打开环境变量文本
    • 1.2 输入环境变量设置
    • 1.3 重新生效环境变量
  • 2 构建第三方依赖库(Building Libraries)
    • 2.0 进入LIBRARIES文件夹
    • 2.1 netcdf的安装【必要】
    • 2.2 Mpich安装【非必要】-并行
    • 2.3 zlib的安装
    • 2.4 libpng的安装
    • 2.5 jasper的安装
    • 2.6 hdf5的安装【非必要】
  • 3 库兼容性测试(Library Compatibility Tests)
    • 3.1 下载测试包
    • 3.2 解压测试包
    • 3.3 测试
      • 3.3.1 Test #1 Fortran + C + NetCDF
      • 3.3.2 Test #2 Fortran + C + NetCDF + MPI
  • 参考

1 设置环境变量

根据前一博客所述-【WRF安装第二期(Ubuntu)】搭建WRF编译所需系统-系统环境检验,WRF安装的目录结构如下:

Build_WRF
  |-- TESTS
  |-- LIBRARIES
  |-- WPS
  |-- WRF
  |–DATA(输入场数据,位置可自选)
  |-- GEOG(地表静态数据,位置可自选)

1.0 支持库的下载

第一步:进入Build_WRF目录,并创建LIBRARIES文件,命令行如下:

cd Build_WRF
mkdir LIBRARIES

第二步:下载第三方库
在Build_WRF文件目录下,依次输入以下五条命令:

wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/zlib-1.2.7.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/mpich-3.0.4.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/netcdf-4.1.3.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/jasper-1.900.1.tar.gz
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/libpng-1.2.50.tar.gz

这样,在Build_WRF文件下面就有有五个压缩包。

在构建库之前,以下路径需要设置:

setenv DIR /path_to_directory/Build_WRF/LIBRARIES
setenv CC gcc
setenv CXX g++
setenv FC gfortran
setenv FCFLAGS -m64
setenv F77 gfortran
setenv FFLAGS -m64
setenv JASPERLIB $DIR/grib2/lib
setenv JASPERINC $DIR/grib2/include
setenv LDFLAGS -L$DIR/grib2/lib
setenv CPPFLAGS -I$DIR/grib2/include

1.1 打开环境变量文本

环境安装完成后,还需要在系统中添加环境变量,下面展示的环境变量是全部的变量,包括后面需要添加的grib、netcdf等等依赖库的环境变量。

理论上以下环境变量设置有多种方式;~/.bashrc文件中修改设置目的在于少开几次环境变量的文本,少一点麻烦;直接在shell中输入指令只在本次shell中生效,再一次打开shell中则失效。

输入以下命令:

sudo nano ~/.bashrc

说明:nano是一个文本编辑器,.bashrc环境变量文本

1.2 输入环境变量设置

#系统前置设置
export DIR=/home/(这里请输入自己的用户名文件夹)/Build_WRF/LIBRARIES
export CC=gcc
export CXX=g++
export FC=gfortran
export CFLAGS='-m64'
export F77=gfortran
export FFLAGS='-m64'
export LD_LIBRARY_PATH=$DIR/grib2/lib:$LD_LIBRARY_PATH
# netcdf
export PATH=$DIR/netcdf/bin:$PATH
export NETCDF=$DIR/netcdf
# mpich
export PATH=$DIR/mpich/bin:$PATH
# zlib
export LDFLAGS=-L$DIR/grib2/lib
export CPPFLAGS=-I$DIR/grib2/include
# WPS
export JASPERLIB=$DIR/grib2/lib
export JASPERINC=$DIR/grib2/include

1.3 重新生效环境变量

输入以下命令:

source ~/.bashrc

2 构建第三方依赖库(Building Libraries)

以下5个库必须安装:

mpich-3.0.4
netcdf-c-4.7.2
netcdf-fortran-4.5.2
Jasper-1.900.1
libpng-1.2.50
zlib-1.2.11

注意:这些库必须与安装WRF和WPS所用的编译器安装在一起。

支持库用途
zlib-1.2.7zlib是提供数据压缩用的函式库,是WPS(后面会提到)必须库。
netcdf-4.1.3读nc文件的。
mpich-3.0.4用于并行运算的工具,为的就是并行处理WRF,意思就是如果计算机是单核的,可以不装,哈哈。
libpng-1.2.50libpng是一款C语言编写的比较底层的读写PNG文件的跨平台的库,需要zlib支持。编译具有 GRIB2 功能的 WPS(特别是 ungrib)所必需的压缩库。
Jasper-1.900.1也是图片库,编译具有 GRIB2 功能的 WPS(特别是 ungrib)所必需的压缩库。

2.0 进入LIBRARIES文件夹

执行以下命令:

# 进入Build_WRF文件夹
cd Build_WRF
# 创建LIBRARIES文件夹
mkdir LIBRARIES
# 进入LIBRARIES文件夹
cd LIBRARIES

2.1 netcdf的安装【必要】

说明:

  • 旧版本安装:还没有把netcdf-fortran和netcdf-c拆开
#4.1.3版本
tar zxvf netcdf-4.1.3.tar.gz
cd netcdf-4.1.3
./configure --prefix=$DIR/netcdf --disable-dap \
 --disable-netcdf-4 --disable-shared
make
make install
 
cd ..                           
  • 新版本安装:先安装c再安装fortran
#c
tar -zxvf netcdf-c-4.7.4.tar.gz
cd netcdf-c-4.7.4
./configure --prefix=$DIR/netcdf LDFLAGS=-L$DIR/netcdf/lib CPPFLAGS=-I$DIR/netcdf/include --disable-dap
make
make check
make install
 
cd ..
#Fortran
tar -zxvf netcdf-fortran-4.5.3.tar.gz
cd netcdf-fortran-4.5.3
./configure --prefix=$DIR/netcdf CPPFLAGS=-I$DIR/netcdf/include LD_LIBRARY_PATH=$DIR/netcdf/lib:$LD_LIBRARY_PATH LDFLAGS=-L$DIR/netcdf/lib
make
make check
make install
 
cd ..

注意最后要退回Build_WRF目录下

2.2 Mpich安装【非必要】-并行

说明:

假设已经设置了NetCDF安装中的所有“setenv”命令,您可以继续使用安装Mpich的命令。执行以下命令:

tar xzvf mpich-3.0.4.tar.gz
cd mpich-3.0.4
./configure --prefix=$DIR/mpich
make
make install
 
cd ..                           

2.3 zlib的安装

说明:zlib用于编译具有GRIB2功能的WPS(特别是ungrib)所需的压缩库

假设已经设置了NetCDF安装中的所有“setenv”命令,您可以继续使用安装zlib的命令。执行以下命令:

tar xzvf zlib-1.2.7.tar.gz
cd zlib-1.2.7
./configure --prefix=$DIR/grib2
make
make install
 
cd ..                           

2.4 libpng的安装

说明:libpng用于编译具有GRIB2功能的WPS(特别是ungrib)所需的压缩库
假设已经设置了NetCDF安装中的所有“setenv”命令,您可以继续使用安装libpng的命令。执行以下命令:

tar xzvf libpng-1.2.50.tar.gz
cd libpng-1.2.50
./configure --prefix=$DIR/grib2
make
make install
 
cd ..                           

2.5 jasper的安装

说明:jasper用于编译具有GRIB2功能的WPS(特别是ungrib)所需的压缩库
假设已经设置了NetCDF安装中的所有“setenv”命令,您可以继续使用安装jasper的命令。

tar xzvf jasper-1.900.1.tar.gz
cd jasper-1.900.1
./configure --prefix=$DIR/grib2
make
make install
 
cd ..                           

2.6 hdf5的安装【非必要】

说明: 官方教程未给出这个库的安装,应该是非必要支持库,用于处理hdf5数据的。

wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-1.8.22/src/hdf5-1.8.22.tar.gz
tar -xvf hdf5-1.8.22.tar.gz
cd hdf5-1.8.22
./configure --prefix=$DIR/hdf5
make
make install
 
cd ..                           

3 库兼容性测试(Library Compatibility Tests)

该测试目的在于对安装完的依赖库兼容性做测试,验证这些库是否能够与用于WPS和WRF构建的编译器一起工作。

3.1 下载测试包

第一步:从Build_WRF目录转到TESTS目录下

# 先从Build_WRF目录转到TESTS目录下
cd TESTS

第二步:下载测试包

# 下载测试包
wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/Fortran_C_NETCDF_MPI_tests.tar

3.2 解压测试包

输入以下命令:

tar -xf Fortran_C_NETCDF_MPI_tests.tar

3.3 测试

3.3.1 Test #1 Fortran + C + NetCDF

依次输入以下命令:

cp ${NETCDF}/include/netcdf.inc .
gfortran -c 01_fortran+c+netcdf_f.f
gcc -c 01_fortran+c+netcdf_c.c
gfortran 01_fortran+c+netcdf_f.o 01_fortran+c+netcdf_c.o \-L${NETCDF}/lib -lnetcdff -lnetcdf
./a.out

3.3.2 Test #2 Fortran + C + NetCDF + MPI

依次输入以下命令:

cp ${NETCDF}/include/netcdf.inc .
mpif90 -c 02_fortran+c+netcdf+mpi_f.f
mpicc -c 02_fortran+c+netcdf+mpi_c.c
mpif90 02_fortran+c+netcdf+mpi_f.o 02_fortran+c+netcdf+mpi_c.o -L${NETCDF}/lib -lnetcdff -lnetcdf
mpirun ./a.out

至此,WRF运行所需的第三方依赖库安装完成。

参考

1、WRF官方教程-Building Libraries
2、CSDN博客-WRF模型安装教程(ububtu系统)-- II.第三方依赖库安装
3、小白跑WRF第三天,安装三方依赖库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【漏洞复现】泛微E-Cology9 WorkPlanService 前台SQL注入漏洞(XVE-2024-18112)

0x01 产品简介 泛微e-cology是一款由泛微网络科技开发的协同管理平台,支持人力资源、财务、行政等多功能管理和移动办公。 0x02 漏洞概述 该漏洞是由于泛微e-cology未对用户的输入进行有效的过滤,直接将其拼接进了SQL查询语句中,导致系统出…

【RT-Thread】串口接收数据并找出一帧完整的报文

本文主要记录基于 RT-Thread的串口接收数据,并找出完成的一帧报文 实现: 完整的一帧数据发送出去,提示【找到一帧数据】不完整的一帧数据发出去,不做解析,2s后未收到数据,清空缓冲区单个字节接收的时间间隔定义为2s,间隔 2s 未收到数据,默认清空缓冲区【测试结果】 目…

【漏洞复现】Bazaar CVE-2024-40348 任意文件读取漏洞

声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。 一、漏洞描述 Bazaar是一个功能强大的版本控制系统,它能够帮助用户详细记录项目的历史变化,并简…

基于SpringBoot+Vue的原创歌曲分享平台(带1w+文档)

基于SpringBootVue的原创歌曲分享平台(带1w文档) 基于SpringBootVue的原创歌曲分享平台(带1w文档) 平台为了数据库结构的灵活性选择MySQL来设计,而java技术,B/S架构则保证了较高的平台适应性。本文主要介绍了平台开发背景,需要完成的功能与开…

Sentinel 入门与实战

一、Sentinel概念 1.1 什么是Sentinel Spring Cloud Alibaba Sentinel 是一个开源的流量控制和熔断框架,它是 Alibaba 开源的微服务框架 Spring Cloud Alibaba 中的一个组件。Sentinel 旨在解决分布式系统中的流量控制和熔断问题,帮助开发人员保护微服…

U盘格式化后数据能恢复吗?恢复方法盘点!

在数字化时代,U盘已成为我们日常生活和工作中不可或缺的数据存储设备。然而,在使用过程中,我们有时可能会因为各种原因对U盘进行格式化,从而不慎删除了重要数据。那么,U盘格式化后数据能恢复吗? 首先&…

CANoe在使用时碰到的一些很少见的Bug

CANoe作为一款成熟且稳定的总线仿真与测试工具,深受汽车工程师们的喜爱。CANoe虽然稳定,但作为一个软件来说,在使用中总会出现一些或大或小的Bug。最近全球范围内的大规模蓝屏事件,是由某个安全软件引起的。而很多CANoe使用者最近…

vue3+fetch请求+接收到流式的markdown数据+一边gpt打字机式输出内容,一边解析markdown语法+highlight.js实现代码高亮

这个问题终于解决了!好开心。 先看最终效果: video_20240724_141543_edit 项目背景:vue3 场景:像gpt一样可以对话,当用户发送问题之后,ai回复,ai是一部分一部分回复,像打印机式输出…

如何将本地代码上传到github

将本地文件上传到GitHub仓库的过程通常包括以下几个步骤: 一 创建GitHub仓库: 如果你还没有一个GitHub仓库,首先需要在GitHub上创建一个新的仓库。登录到你的GitHub账户,然后点击“New repository”按钮,填写仓库的相关…

在linux运维中为什么第一道防线是云防火墙,而不是waf

在Linux运维和云计算环境中,第一道防线通常是云防火墙(Cloud Firewall),而不是Web应用防火墙(WAF),主要是因为云防火墙提供了更基础和广泛的网络层安全控制。以下是一些关键原因: 1…

AGI思考探究过程中的意义、价值与乐趣 Ⅱ

鉴于LLM与RL两者间在整体学习范式、学习目标、模型结构的差异化与统一的考量,业内不少的思路尝试将两种思想融合在一起以期待AGI的突破,但结合后要么看着不是很巧妙,要不就是看起来很僵硬,总感觉像是一个过渡性的方法,…

C语言指针·入门用法超详解

目录 1. 什么是指针 2. 指针变量的定义格式 3. 指针的作用 3.1 查询数据 3.2 存储数据(修改数据) 3.3 操作其他函数中的变量 3.4 函数返回多个值 3.5 函数的结果和计算状态分开 1. 什么是指针 通过内存地址,指向的空间&#…

装饰大师——装饰模式(Java实现)

引言 大家好,上期我们介绍了装饰模式在Python中的实现,今天,我们将继续探讨装饰模式,并展示如何在Java中实现它。 装饰模式概述 装饰模式的核心思想是将功能附加到对象上,而不是通过继承来实现,这种模式…

【JavaSE-线程安全问题-死锁详解】

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 🌈…

HTML基础1-文本级元素

HTML 简介 什么是 HTML? HTML (HyperText Markup Language) 是一种用于创建网页的标准标记语言。它通过使用一系列预定义的元素来描述文档的结构和外观, 您可以使用 HTML 来建立自己的 WEB 站点。 HTML 的作用 HTML 用于定义网页的结构,…

快手文生图模型-Kolors快速上手

Kolors是什么 可图(Kolors):用于真实感文本到图像合成的扩散模型的有效训练 可图,是快手开源的一个文生图模型,架构上使用了chatglm,比普通的sd模型在中文理解上要强大很多,以往sd模型的提示词理解能力往往只有两种 …

《BeanShell 在 JMeter 中的应用》总结

通过案例进行讲解 一、BeanShell 介绍 官网: http://www.BeanShell.org BeanShell 是一种完全符合 Java 语法规范的脚本语言,具有以下特点: 是一种松散类型的脚本语言,类似 JS。是用 Java 写成的小型、免费、可下载的嵌入式 Java 源代码解…

计算机毕业设计选题推荐-零食批发商仓库管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

LocalDateTime的序列化和反序列化

背景 最近定位出一个LocalDateTime序列化相关的问题,简单记录一下。本文重点介绍Jackson对LocalDateTime的序列化和反序列化,并结合Spring应用场景进行介绍。 1.LocalDateTime与字符串转换 可以通过DateTimeFormatter实现LocalDateTime与字符串的相互…

Windows远程桌面无法拷贝文件问题

场景说明 Winwdows远程桌面,相比Linux方便一点就是,同是windows连接,其中复制粘贴功能,可以在两个windows无缝切换。 但最近笔者远程一台测试windows服务器时,发现无法在服务器上复制内容到本地,也无法从…