当前位置: 首页 > news >正文

WRF4.2安装过程全记录

由于本人安装过多次、多个版本的WRF程序,走了许多弯路,不忍心大家再像我一样浪费时间,所以整理一些可用经验。参考Compiling WRF (ucar.edu)

  • 系统环境配置 

1、首先确保有没有安装好编译语言gfortran、gcc、g++以及cpp。

2、创建WRF工作文件及其后续可能用得上的子文件。之所以选择在~/目录下直接建立WRF工作站,主要是方便所有人访问,不需要host/sudo权限。

which gfortran
which cpp
which gcc
sudo apt install gfortran gcc cpp g++ make
gcc --version
gfortran --version
cpp --version


mkdir ~/WRF_WorkStation
mkdir ~/WRF_WorkStation/Libraries
mkdir ~/WRF_WorkStation/netcdf
mkdir ~/WRF_WorkStation/grib2
mkdir ~/WRF_WorkStation/mpich
mkdir ~/WRF_WorkStation/test

3、进入~/WRF_WorkStation/test文件中,将下载好的Fortran and C Tests Tar File 解压。具体的测试成功与否请参照Compiling WRF (ucar.edu)

tar -xf Fortran_C_tests.tar
gfortran TEST_1_fortran_only_fixed.f
./a.out
gfortran TEST_2_fortran_only_free.f90
./a.out
gcc TEST_3_c_only.c
./a.out
gcc -c -m64 TEST_4_fortran+c_c.c
gfortran -c -m64 TEST_4_fortran+c_f.f90
gfortran -m64 TEST_4_fortran+c_f.o TEST_4_fortran+c_c.o
./a.out
./TEST_csh.csh
./TEST_perl.pl
./TEST_sh.sh

其他的unix命令可以后续需要的时候下载!命令下载方式是

sudo apt install command


  • 创建库

1、进入到WRF工作文件夹下的Libraries目录下。

cd ~/WRF_WorkStation/Libraries

mpich-3.0.4
netcdf-4.1.3
Jasper-1.900.1
libpng-1.2.50
zlib-1.2.7

五个压缩包下载到其中,后续可以删掉,也可以保留,随个人喜好。

2、修改~/.bashrc环境配置,这一步必须有!!!注意###后的内容全部都应该在~/.bashrc的尾部加入,然后用source ~/.bashrc生效。

vi ~/.bashrc

###-----------------------WRF installation-----------------###
export DIR=/home/hsy/WRF_WORKSTATION/LIBRARIES
export CC=gcc
export CXX=g++
export FC=gfortran
export FCFLAGS=-m64
export F77=gfortran
export FFLAGS=-m64
export JASPERLIB=$DIR/grib2/lib
export JASPERINC=$DIR/grib2/include
export LDFLAGS=-L$DIR/grib2/lib
export CPPFLAGS=-I$DIR/grib2/include

source ~/.bashrc

3、配置netcdf。

tar xzvf netcdf-4.1.3.tar.gz     #or just .tar if no .gz present
cd netcdf-4.1.3
./configure --prefix=$DIR/netcdf --disable-dap --disable-netcdf-4 --disable-shared
make
make install

vi ~/.bashrc

###--->netcdf<---###
export NETCDF=$DIR/netcdf
export PATH=$NETCDF/bin:$PATH

source ~/.bashrc

nc-config

netcdf安装过程可能会有各种各样的问题,请小心操作,一定要谨慎,不能弄错一步!错了也不要害怕,通过make clean消除编译文件后继续重来。直到看见Congratulations! You have successfully installed netCDF!字眼,且Libraries/netcdf/include/netcdf.inc存在,nc-config --help能用!

4、配置mpich

tar xzvf mpich-3.0.4.tar.gz     #or just .tar if no .gz present
cd mpich-3.0.4
./configure --prefix=$DIR/mpich
make
make install
make check #可省略此步


vi ~/.bashrc

###--->mpich<---###
export MPICH=$DIR/mpich
export PATH=$MPICH/bin:$PATH

source ~/.bashrc

5、配置zlib、jasper以及libpng

tar xzvf zlib-1.2.7.tar.gz     #or just .tar if no .gz present
cd zlib-1.2.7
./configure --prefix=$DIR/grib2
make
make install


tar xzvf libpng-1.2.50.tar.gz     #or just .tar if no .gz present
cd libpng-1.2.50
./configure --prefix=$DIR/grib2
make
make install


tar xzvf jasper-1.900.1.tar.gz     #or just .tar if no .gz present
cd jasper-1.900.1
./configure --prefix=$DIR/grib2
make
make install

进入各自的解压包下,首先配置路径到grib2文件下,./configure --prefix,再make -> make install->make check(可省略)。

最后的库的编译环境(~/.bashrc)如下:


###-----------------------WRF installation-----------------###
export DIR=/home/hsy/WRF_WORKSTATION/LIBRARIES
export CC=gcc
export CXX=g++
export FC=gfortran
export FCFLAGS=-m64
export F77=gfortran
export FFLAGS=-m64
export JASPERLIB=$DIR/grib2/lib
export JASPERINC=$DIR/grib2/include
export LDFLAGS=-L$DIR/grib2/lib
export CPPFLAGS=-I$DIR/grib2/include

###--->netcdf<---###
export NETCDF=$DIR/netcdf
export PATH=$NETCDF/bin:$PATH

###--->mpich<---###
export MPICH=$DIR/mpich
 

###--->zlib<---###
export ZLIB=$DIR/grib2
export PATH=$ZLIB/bin:$PATH

###--->libpng<---###
export LIBPNG=$DIR/grib2
export PATH=$LIBPNG/bin:$PATH

###--->jasper<---###
export JASPER=$DIR/grib2
export PATH=$JASPER/bin:$PATH

###--->WPS Compiler<---###
export WRFIO_NCD_LARGE_FILE_SUPPORT=1
export LD_LIBRARY_PATH=$DIR/grib2/lib:$LD_LIBRARY_PATH

zlib、libpng以及jasper的配置环境可以省略,因为前面已存在。


  • 库的兼容性测试

首先下载Fortran_C_NETCDF_MPI_tests.tar并解压,然后开始进行两个测试,一个是netcdf的测试,另一个是mpich的测试。

这里注意把设置的NETCDF路径下的netcdf.inc复制到test文件夹下。

tar -xf Fortran_C_NETCDF_MPI_tests.tar

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

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与WPS下载目录下,将WRFv4.2与WPSv4.2安装包解压到WRF工作文件夹下,注意两者一定要在同一文件目录下,即保证解压后的WPSV4.2/与WRFV4.2/均在WRF_WORKSTATION文件目录下。

unzip WPS-4.2.zip -d ~/WRF_WORKSTATION/WPSV4.2/

unzip WRF-4.2.zip -d ~/WRF_WORKSTATION/WRFV4.2/

2、配置编译WRF(必须先编译WRF,才可以编译WPS),首先进入WRFV4.2文件目录下,输入./configure进行配置,选择34(dmpar GNU组合),再选择1(basic),然后再编译。

注意如果这里WRF ./configure报错:libimf.so无法链接,那么参考下面这篇文章可以解决。

error while loading shared libraries: libimf.so: - Intel CommunitiesHi. I cannot complie my program using the makefile. However, if I type the complie command, it can complie. I donot know why this situation happens.icon-default.png?t=M7J4https://community.intel.com/t5/Intel-Fortran-Compiler/error-while-loading-shared-libraries-libimf-so/td-p/740546​​​​​​​

./configure
34
1
./compile em_real >& log.compile
ls -ls main/*.exe

3、等20min左右,直到出现wrf.exe (model executable)
real.exe (real data initialization)
ndown.exe (one-way nesting)
tc.exe (for tc bogusing--serial only)则证明wrf的real case编译成功了。​​​​​​​


  • 创建WPS

1、首先进入WPSV4.2中, ./clean清除WPS文件目录。

2、配置WRF,选择dmpar gfortran。

3、编译WPS。

cd WPSV4.2
./clean
export WRF_DIR=../WRFV4.2

vi ~/.bashrc
###---------- WRF compile -----------###
export WRFIO_NCD_LARGE_FILE_SUPPORT=1

source ~/.bashrc

./configure
3
./compile
ls -ls *.exe

出现三个.exe文件即为成功!

相关文章:

  • 文本文件的编码格式
  • Mediapipe 在Android studio 运行官方的 FaceDetection
  • Java项目源码下载S2SH基于java的保险业务管理系统
  • CS5086E 双节锂电升压充电管理IC特点及应用
  • linux 输出重定向
  • win10任务栏卡死桌面正常的解决方法
  • NVIDIA:应将USD作为3D互联网的HTML标准语言
  • H5画布绘制笑脸
  • 【定制项目】【M14 监测预警平台】百度地图区域绘制(时间轴)/柱状图/仪表图 - 关键技术 python flask + echarts
  • RS笔记:深度推荐模型之SIM(基于搜索的超长行为序列上的用户长期兴趣建模)[CIKM 2020, 阿里妈妈广告团队]
  • 关于第一次接入Kotlin
  • C++中菱形类关系再理解
  • stack和queue的使用和模拟实现
  • 【C++】 string类常用接口的实现
  • 华为防火墙基础自学系列 | 汇总
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • [译] React v16.8: 含有Hooks的版本
  • egg(89)--egg之redis的发布和订阅
  • input的行数自动增减
  • JS基础之数据类型、对象、原型、原型链、继承
  • node学习系列之简单文件上传
  • python docx文档转html页面
  • spring security oauth2 password授权模式
  • 百度地图API标注+时间轴组件
  • 使用Swoole加速Laravel(正式环境中)
  • 想写好前端,先练好内功
  • 如何正确理解,内页权重高于首页?
  • 选择阿里云数据库HBase版十大理由
  • # 安徽锐锋科技IDMS系统简介
  • #AngularJS#$sce.trustAsResourceUrl
  • #QT(串口助手-界面)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • $.proxy和$.extend
  • (39)STM32——FLASH闪存
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • . Flume面试题
  • ..回顾17,展望18
  • .md即markdown文件的基本常用编写语法
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net Core和.Net Standard直观理解
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • @Documented注解的作用
  • [20140403]查询是否产生日志
  • [20190416]完善shared latch测试脚本2.txt
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [C++]AVL树怎么转
  • [Flutter]打包IPA
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle
  • [GYCTF2020]Ez_Express
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [Nuget]使用Nuget管理工具包
  • [PHP]实体类基类和序列化__sleep问题
  • [Python人工智能] 四十四.命名实体识别 (5)利用bert4keras构建Bert-CRF实体识别模型(实体位置)