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

WRF-Hydro在Ubuntu 22.04 LTS上的系统化部署与编译实战

1. 环境准备与系统配置在开始WRF-Hydro的部署之前我们需要确保Ubuntu 22.04 LTS系统已经做好了充分准备。我建议使用全新的系统环境这样可以避免各种依赖冲突问题。实测下来干净的Ubuntu系统是最稳定的选择。首先更新系统软件包这个步骤看似简单但非常重要。我遇到过不少因为系统未更新导致的依赖问题特别是gcc编译器的版本兼容性问题。执行以下命令sudo apt update sudo apt upgrade -y接下来安装基础编译工具链。这里有个小技巧如果你不确定某个包是否已经安装可以使用apt list --installed命令查看。完整的编译环境需要以下组件sudo apt install -y gcc g gfortran make cmake git我强烈建议创建一个专门的项目目录来管理所有相关文件。这样做的好处是路径清晰后期维护方便。你可以按照自己的习惯命名我通常这样操作mkdir -p ~/wrf_hydro/{sources,apps}这里sources用于存放下载的源码包apps则是安装目录。为了后续操作方便我们可以设置环境变量export APPS~/wrf_hydro/apps export SOURCES~/wrf_hydro/sources记得把这些变量添加到.bashrc文件中这样每次登录都会自动加载。我习惯用vim编辑你也可以使用nano或其他编辑器echo export APPS~/wrf_hydro/apps ~/.bashrc echo export SOURCES~/wrf_hydro/sources ~/.bashrc source ~/.bashrc2. 依赖库的编译与安装2.1 MPICH并行计算环境WRF-Hydro需要MPI支持我们选择MPICH作为并行计算环境。在编译过程中我发现版本选择很关键 - 太新的版本可能会有兼容性问题。经过多次测试4.1.2版本最为稳定。下载并解压源码wget -P $SOURCES https://www.mpich.org/static/downloads/4.1.2/mpich-4.1.2.tar.gz tar -xzf $SOURCES/mpich-4.1.2.tar.gz -C $SOURCES编译安装时有个重要参数--prefix它指定了安装目录。我建议单独为MPICH创建目录cd $SOURCES/mpich-4.1.2 ./configure --prefix$APPS/mpich --enable-fastall,O3 make -j$(nproc) make install这里的-j$(nproc)参数可以让make使用所有CPU核心并行编译大幅缩短编译时间。安装完成后记得将MPICH的bin目录加入PATHecho export PATH$APPS/mpich/bin:$PATH ~/.bashrc source ~/.bashrc验证安装是否成功which mpicc mpiexec --version2.2 NetCDF及其依赖库NetCDF是WRF-Hydro的核心依赖它本身又依赖zlib和HDF5。这里有个坑我踩过多次必须严格按照顺序安装而且版本要匹配。首先安装zlibwget -P $SOURCES https://www.zlib.net/zlib-1.2.13.tar.gz tar -xzf $SOURCES/zlib-1.2.13.tar.gz -C $SOURCES cd $SOURCES/zlib-1.2.13 ./configure --prefix$APPS/netcdf make -j$(nproc) make install接着是HDF5这里有几个关键配置选项wget -P $SOURCES https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.2/src/hdf5-1.12.2.tar.gz tar -xzf $SOURCES/hdf5-1.12.2.tar.gz -C $SOURCES cd $SOURCES/hdf5-1.12.2 ./configure --prefix$APPS/netcdf \ --with-zlib$APPS/netcdf \ --enable-fortran \ --enable-cxx \ --enable-hl make -j$(nproc) make install最后安装NetCDF C和Fortran库。这里需要特别注意环境变量的设置export CPPFLAGS-I$APPS/netcdf/include export LDFLAGS-L$APPS/netcdf/lib export LD_LIBRARY_PATH$APPS/netcdf/lib:$LD_LIBRARY_PATHNetCDF C库安装wget -P $SOURCES https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz tar -xzf $SOURCES/netcdf-c-4.9.2.tar.gz -C $SOURCES cd $SOURCES/netcdf-c-4.9.2 ./configure --prefix$APPS/netcdf \ --disable-dap \ --enable-netcdf-4 make -j$(nproc) make installNetCDF Fortran库安装wget -P $SOURCES https://downloads.unidata.ucar.edu/netcdf-fortran/4.6.1/netcdf-fortran-4.6.1.tar.gz tar -xzf $SOURCES/netcdf-fortran-4.6.1.tar.gz -C $SOURCES cd $SOURCES/netcdf-fortran-4.6.1 ./configure --prefix$APPS/netcdf make -j$(nproc) make install3. 环境变量配置正确的环境变量设置是WRF-Hydro能够找到所有依赖库的关键。我整理了一份完整的配置方案经过多个项目验证cat EOF ~/.bashrc # WRF-Hydro Environment export NETCDF$APPS/netcdf export PATH$APPS/netcdf/bin:$APPS/mpich/bin:$PATH export LD_LIBRARY_PATH$APPS/netcdf/lib:$APPS/mpich/lib:$LD_LIBRARY_PATH export WRFIO_NCD_LARGE_FILE_SUPPORT1 EOF source ~/.bashrc验证NetCDF安装是否成功ncdump --version nf-config --all如果这些命令都能正确输出版本信息说明环境已经准备就绪。我遇到过因为LD_LIBRARY_PATH设置不当导致的库找不到问题这时候可以用ldd命令检查二进制文件的依赖关系。4. WRF-Hydro编译与安装4.1 获取源代码建议直接从官方GitHub仓库获取最新稳定版wget -P $SOURCES https://github.com/NCAR/wrf_hydro_nwm_public/archive/refs/tags/v5.2.0.tar.gz tar -xzf $SOURCES/v5.2.0.tar.gz -C $SOURCES cd $SOURCES/wrf_hydro_nwm_public-5.2.0/trunk/NDHMS4.2 配置编译环境复制并编辑环境配置模板cp template/setEnvar.sh . sed -i s/^export.*NETCDF.*/export NETCDF$APPS\/netcdf/ setEnvar.sh echo export WRFIO_NCD_LARGE_FILE_SUPPORT1 setEnvar.sh source setEnvar.sh4.3 编译过程运行配置脚本./configure选择选项2Linux系统gfortran编译器。然后开始编译./compile_offline_NoahMP.sh setEnvar.sh compile.log 21 tail -f compile.log编译过程可能需要30分钟到数小时取决于你的硬件配置。我建议使用screen或tmux来保持会话防止网络中断导致编译失败。4.4 验证安装编译成功后你会在Run目录下看到生成的可执行文件ls -l Run/*.exe最常见的错误是内存不足如果遇到这种情况可以尝试增加swap空间sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile5. 常见问题排查在多次部署过程中我总结了一些常见问题及其解决方案问题1编译NetCDF时出现hdf5.h找不到这是因为HDF5的头文件路径不正确。确保在编译NetCDF前正确设置了CPPFLAGSexport CPPFLAGS-I$APPS/netcdf/include问题2MPI运行时出现共享库错误这通常是因为运行时找不到MPICH的库。检查LD_LIBRARY_PATH是否包含MPICH的lib目录export LD_LIBRARY_PATH$APPS/mpich/lib:$LD_LIBRARY_PATH问题3WRF-Hydro编译失败提示内存不足除了增加swap空间还可以尝试减少并行编译的线程数export COMPILATION_TARGETS4 ./compile_offline_NoahMP.sh setEnvar.sh问题4运行时出现NetCDF格式错误这可能是由于NetCDF版本不兼容导致的。建议使用我推荐的版本组合或者尝试在编译WRF-Hydro时添加export WRF_HYDRO_NUDGING16. 性能优化建议根据我的实测经验以下几个优化措施可以显著提升WRF-Hydro的运行效率编译器优化在编译MPICH时使用更激进的优化选项./configure --prefix$APPS/mpich --enable-fastall,O3 --enable-threadsmultiple并行配置根据你的CPU核心数调整运行时的MPI进程数。例如对于16核CPUmpirun -np 16 ./wrf_hydro.exeIO优化对于大规模模拟可以启用NetCDF的大文件支持export WRFIO_NCD_LARGE_FILE_SUPPORT1 export WRF_HYDRO_QUILT1内存管理对于内存受限的系统可以调整export MALLOC_MMAP_MAX_0 export MALLOC_TRIM_THRESHOLD_536870912磁盘IO将输入/输出目录挂载到高性能存储设备上或者使用tmpfsmkdir -p /mnt/tmpfs sudo mount -t tmpfs -o size20G tmpfs /mnt/tmpfs经过这些优化在我的测试环境中WRF-Hydro的运行效率提升了约30%。特别是在处理大流域、高分辨率模拟时效果更为明显。

相关文章:

WRF-Hydro在Ubuntu 22.04 LTS上的系统化部署与编译实战

1. 环境准备与系统配置 在开始WRF-Hydro的部署之前,我们需要确保Ubuntu 22.04 LTS系统已经做好了充分准备。我建议使用全新的系统环境,这样可以避免各种依赖冲突问题。实测下来,干净的Ubuntu系统是最稳定的选择。 首先更新系统软件包&#xf…...

OpenHarmony LiteOS-M Shell 命令开发指南

概述 本文档详细介绍如何在 OpenHarmony LiteOS-M 内核中添加自定义 shell 命令,以 version、reboot、poweroff 命令为例进行说明。 目录结构 kernel/liteos_m/components/shell/ ├── include/shcmd.h # 命令声明头文件 ├── src/base/shcmd.c …...

5分钟快速上手:用Python高效下载Google卫星地图的终极指南

5分钟快速上手:用Python高效下载Google卫星地图的终极指南 【免费下载链接】google-map-downloader Small tools to download Google maps satellite image for a given extent & zoom level to a TIFF file with geographical coordinates and speeding it up …...

免费实时空气质量API接口:一站式获取AQI+PM2.5+NO2+CO+O3+SO2+PM10数据

1. 空气质量API接口的价值与应用场景 空气质量数据对现代生活的重要性不言而喻。无论是个人健康管理、企业决策还是政府监管,实时准确的空气质量信息都发挥着关键作用。作为一个开发者,我曾经在多个项目中需要集成空气质量数据,但市面上的商业…...

遥感数字图像处理教程【2.1】

2 . 非线性拉伸使用非线性拉伸函数对图像进行拉伸变化,即为非线性拉伸。常用的非线性函数有指数函数、对数函数、平 方 根 、高斯函数等。1)指数变换对于图像中亮的部分,指数变换扩大了灰度间隔,突出了细节;对于暗的部…...

C语言完美演绎7-15

/* 范例&#xff1a;7-15 */#include <string.h>#include <stdio.h>void main(void){/* 定义参数dest的字符数组destination[25] */char destination[25];/* 定义参数scr的字符指针scr1、scr2、scr3 */char *scr1 "tiger" , *scr2 " is", *sc…...

Flutter导航与路由详解

Flutter导航与路由详解 什么是Flutter导航与路由&#xff1f; 在Flutter应用中&#xff0c;导航与路由是指在不同页面之间切换的机制。Flutter提供了一套完整的导航系统&#xff0c;包括基本的页面跳转、命名路由、参数传递、路由动画等功能。 基本导航 1. 使用Navigator.p…...

AIAgent学习机制失效诊断手册(工业级Agent训练失败率下降73%的实证模型)

第一章&#xff1a;AIAgent学习机制失效诊断手册&#xff08;工业级Agent训练失败率下降73%的实证模型&#xff09; 2026奇点智能技术大会(https://ml-summit.org) AI Agent在真实产线中常因隐性学习机制退化导致训练失败——并非梯度爆炸或数据缺失&#xff0c;而是目标函数与…...

CSS Grid布局详解与实战应用

CSS Grid布局详解与实战应用 什么是CSS Grid布局&#xff1f; CSS Grid布局是一种二维布局系统&#xff0c;允许我们同时控制行和列的布局&#xff0c;为网页设计提供了更灵活的布局方案。与Flexbox的一维布局不同&#xff0c;Grid布局可以同时处理行和列&#xff0c;非常适合创…...

QuickTime Player录屏声音不全?试试这招!Soundflower+麦克风双轨录制教程

Mac双轨高清录屏终极方案&#xff1a;Soundflower与BlackHole实战指南 每次用QuickTime录制教程视频时&#xff0c;系统声音和麦克风解说总是无法完美同步&#xff1f;这个问题困扰着无数内容创作者。作为一位长期使用Mac进行音乐制作和视频教程录制的资深用户&#xff0c;我深…...

MedGemma 1.5医疗AI助手:基于Linux系统的部署与优化

MedGemma 1.5医疗AI助手&#xff1a;基于Linux系统的部署与优化 1. 引言 医疗AI正在改变传统的诊疗方式&#xff0c;但很多医疗机构面临数据隐私和网络安全的挑战。MedGemma 1.5作为谷歌开源的医疗多模态模型&#xff0c;提供了完全本地化部署的解决方案&#xff0c;让医院和…...

生产环境离线部署大模型

一、普通服务器升级ai服务器 1、服务器插槽装载8张INVIDA RTX 4090的显卡(单显卡48GB) 2、在INVIDA官网下载安装NVIDIA驱动NVIDIA-Linux-x86_64-550.120.run //服务器上禁用开源驱动 nouveau echo "blacklist nouveau" >> /etc/modprobe.d/blacklist-nouveau…...

OV2640寄存器配置黑魔法:手把手教你用ESP32-S3调出专业级画质

OV2640寄存器配置黑魔法&#xff1a;手把手教你用ESP32-S3调出专业级画质 在嵌入式视觉领域&#xff0c;OV2640这颗200万像素的图像传感器堪称常青树。它价格亲民、资料丰富&#xff0c;但想要榨干它的性能潜力&#xff0c;却需要深入理解其寄存器配置的奥秘。本文将带你从ISP底…...

机器学习与深度学习的区别是什么?看这一篇就够了

机器学习与深度学习的区别是什么&#xff1f;看这一篇就够了 标签&#xff1a;#机器学习、#深度学习、#人工智能、#计算机视觉、#自然语言处理、#数据分析、#ai### 一、企业招聘角度拆解&#xff1a;机器学习 vs 深度学习&#xff0c;岗位、要求、薪资、需求量### 二、对比学习…...

从ESP8266到ESP32-C6:一文看懂乐鑫芯片的‘家族进化史’与背后的物联网十年

从ESP8266到ESP32-C6&#xff1a;解码乐鑫芯片的十年物联网战略布局 2014年&#xff0c;一款售价仅3美元的Wi-Fi芯片悄然问世&#xff0c;谁也没想到这颗名为ESP8266的小芯片会彻底改变物联网行业的游戏规则。当时市面上的Wi-Fi模块价格普遍在10美元以上&#xff0c;且需要外接…...

面了个新人连Agent如何进行冷启动都不知道

一、产品侧&#xff1a;先做「精准小功能」&#xff0c;不做“万金油” ❌ 拒绝做一个什么都懂但都不准的Agent ✅ 核心逻辑&#xff1a;场景收窄 知识聚焦 人工兜底 1.只攻一个垂直场景 ToB方向&#xff1a;比如“合同审核Agent”. “电商售后Agent”&#xff0c;场景越…...

从洗碗到叠衣:用RECAP算法让机器人学会‘吃一堑长一智’

从洗碗到叠衣&#xff1a;用RECAP算法让机器人学会“吃一堑长一智” 想象一下&#xff0c;你刚教会家里的机器人如何叠衣服。第一次尝试时&#xff0c;它把袖子塞进了衣领里&#xff1b;第二次&#xff0c;衣服直接掉在了地上&#xff1b;第三次&#xff0c;它终于叠好了——但…...

为什么你的网络总抽风?可能是这个ARP协议漏洞在捣鬼(含防御方案)

为什么你的网络总抽风&#xff1f;可能是这个ARP协议漏洞在捣鬼&#xff08;含防御方案&#xff09; 想象一下这样的场景&#xff1a;你正在视频会议中发言&#xff0c;突然画面卡顿、声音断断续续&#xff1b;或者游戏激战正酣时&#xff0c;角色突然掉线。这些恼人的网络&quo…...

Phi-3-mini-128k-instruct代码解释能力实测:逆向工程与文档生成

Phi-3-mini-128k-instruct代码解释能力实测&#xff1a;逆向工程与文档生成 最近在尝试一些新的代码辅助工具&#xff0c;发现微软开源的Phi-3-mini-128k-instruct模型挺有意思。它主打轻量化和指令跟随&#xff0c;特别是那个128k的超长上下文&#xff0c;理论上能塞进去不少代…...

为什么92%的SITS2026项目在Phase 2失败?——多Agent角色编排、任务分解与状态同步的黄金三角模型,

第一章&#xff1a;SITS2026深度解析&#xff1a;多Agent协作系统设计 2026奇点智能技术大会(https://ml-summit.org) SITS2026&#xff08;Scalable Intelligent Task Synthesis 2026&#xff09;是一个面向开放域复杂任务的多Agent协作框架&#xff0c;其核心设计理念是“角…...

YOLOv7实战指南:如何实现高精度与实时性的多任务目标检测

1. YOLOv7为什么能成为工业级目标检测的首选&#xff1f; 第一次接触YOLOv7是在去年做一个智能质检项目时&#xff0c;当时测试了YOLOv5、YOLOv7和YOLOv8三个版本。结果发现YOLOv7在检测微小电子元件缺陷时&#xff0c;准确率比v5高出12%&#xff0c;推理速度却比v8还要快15%。…...

AIAgent自动驾驶到底靠不靠谱?2026奇点大会127项实测数据揭示L4级商用真相

第一章&#xff1a;AIAgent自动驾驶的范式革命与奇点大会背景 2026奇点智能技术大会(https://ml-summit.org) 传统自动驾驶系统长期依赖模块化流水线设计——感知、定位、规划、控制被严格解耦&#xff0c;各模块由独立模型驱动&#xff0c;通过手工定义接口传递确定性信号。…...

揭秘Reward Hacking真相:为什么90%的AI Agent在训练后期崩溃?

第一章&#xff1a;Reward Hacking的本质与系统性风险 2026奇点智能技术大会(https://ml-summit.org) Reward hacking 是强化学习系统在优化目标函数过程中&#xff0c;绕过设计者真实意图、利用奖励函数漏洞获取高分的非预期行为。它并非偶然错误&#xff0c;而是智能体在目…...

AIAgent协议一致性危机爆发前夜:4步诊断法+3类协议健康度SLI指标(P99延迟、语义丢失率、Schema漂移频次),立即自查你的Agent集群

第一章&#xff1a;AIAgent架构中的通信协议设计 2026奇点智能技术大会(https://ml-summit.org) 在多智能体协同系统中&#xff0c;通信协议是决定Agent间语义对齐、时序可控与容错能力的核心基础设施。不同于传统微服务间RESTful或gRPC调用&#xff0c;AIAgent需支持异步事件…...

目标分解效率提升300%的关键:动态权重分配算法(已开源v2.1,支持LangChain/AutoGen无缝集成)

第一章&#xff1a;AIAgent架构中的目标分解策略 2026奇点智能技术大会(https://ml-summit.org) 在复杂任务驱动的AI Agent系统中&#xff0c;目标分解是实现自主规划与协同执行的核心前置环节。它并非简单地将顶层目标切分为子任务&#xff0c;而是需结合领域知识、资源约束、…...

为什么93%的AIAgent在复杂任务中“想得清却走不远”?SITS2026深度拆解规划-执行失配症,附3套已验证Prompt-Action协同模板

第一章&#xff1a;SITS2026分享&#xff1a;AIAgent规划与推理能力 2026奇点智能技术大会(https://ml-summit.org) AI Agent 的规划与推理能力正从符号逻辑驱动迈向多模态协同增强的新阶段。在 SITS2026 技术分享中&#xff0c;核心聚焦于如何构建具备分层目标分解、动态环境…...

海思Hi3516DV500/HI3519DV500开发实战:从SDK编译到多媒体例程验证

1. 环境准备&#xff1a;搭建Hi3516DV500/HI3519DV500开发环境 拿到海思SDK后&#xff0c;第一件事就是搭建开发环境。我建议使用Ubuntu 18.04或20.04系统&#xff0c;这是官方推荐的环境。安装完系统后&#xff0c;需要配置一些基础工具链&#xff1a; sudo apt-get update su…...

深入解析CMP0074策略:如何正确使用<PackageName>_ROOT变量优化CMake依赖查找

1. 理解CMP0074策略的核心机制 当你第一次在CMake项目中看到"CMP0074 is not set"的黄色警告时&#xff0c;可能会感到困惑。这个看似简单的警告背后&#xff0c;其实隐藏着CMake依赖查找机制的重要进化。让我们从一个实际案例开始&#xff1a;假设你在Windows上编译…...

【JAVA基础面经】线程间的通信方式

文章目录前言JMM内存共享变量 volatile⭐Object.wait() / notify() / notifyAll()⭐Lock 和 Condition 接口等待多个事件完成 CountDownLatch⭐循环屏障 CyclicBarrier信号量 Semaphore阻塞队列 BlockingQueue ⭐两个线程交换数据 Exchanger&#xff08;了解&#xff09;异步编…...

计算机视觉需要哪些数学基础区别如何高效学习线性代数和概率论区别

计算机视觉需要哪些数学基础区别如何高效学习线性代数和概率论区别 标签&#xff1a;#计算机视觉、#线性代数、#人工智能、#深度学习、#自然语言处理、#神经网络、#机器学习### 一、痛点引入&#xff1a;为什么很多人怕CV数学&#xff1f;真相是什么&#xff1f;### 二、CV必备…...