Fortran读取netcdf文件/WRF中的文件读取

一直很好奇WRF到底如何通过netcdf库读取netcdf文件,正巧有个机会,试了下fortran读取nc文件,总结一下。

netcdf库

Fortran读取nc文件需要依赖netcdf外部库。安装该库以后,会有专门写给ffortran函数声明的头文件:netcdf.inc,使用该文件后,可以使用该文件里的函数。
通常,该头文件在安装的netcdf库路径的/include/下。

使用netcdf

在Fortran中,如果你的netcdf库直接安装在了fortran的路径下,你可以直接:

use netcdf.mod

调用netcdf库。
或者,你可以:

include 'netcdf.inc'

使用头文件中声明的函数。
需要注意的是,在一些大型服务器上,用户并不具备root权限,因此,有时我们需要在编译时告知fortran相应头文件的位置,如:

gfortran read.f90 -I/usr/bin/netcdf/include  

实例

首先查看一下nc文件基本信息:

在这里插入图片描述
获取nc文件的变量与维度信息后,就可以开始读取了。

program ReadNC
  include “netcdf.inc”
  IMPLICIT NONE
  ! input file status
  integer:: ncid,status 
  character (100) FileName
  integer, parameter :: x=1701,y=801,z=50,t=1
  integer,parameter::ki=selected_real_kind(8)
  real(ki),dimension(t,z,y,x):: zu 
  !variables id 
  integer::varid1

  FileName="nest_1_20100101000000.nc"
  write(*,*)trim(FileName)

!open file 
  status=nf_open(trim(FileName),nf_nowrite,ncid) !打开netcdf文件,获取文件的ID号(ncid)
  if (status .ne. 0) then
		print*,"open failure!"
		stop
  end if
  status=nf_inq_varid(ncid,'zu',varid1) 
  status=nf_get_var(ncid,varid1,zu)
  write(*,*) zu
  status=nf_close(ncid) 
end program ReadNC

随后编译:

gfortran readnc.f90 -I /public/netcdf4/include/ -o readnc.exe -L/public/netcdf4/lib/ -lnetcdff -lnetcdf

得到real.exe,再运行生成的./real.exe即可。

WRF中的外部文件读取

在WRF中,文件的读取主要通过external文件夹中的函数。
并在frame/module_io.F文件中,同样,在external//io_netcdf/下,存在着用来测试文件读写的代码testWRFread.f90和testWRFwrite.f90。代码较为简洁,可用于查看学习。

program testread_john
  use wrf_data
  implicit none
#include "wrf_status_codes.h"
#include <netcdf.inc>
  character (80) FileName
  integer Comm
  character (80) SysDepInfo
  integer     :: DataHandle
  integer Status
  integer NCID
  real data(200)
  integer idata(200)
  real*8 ddata(200)
  logical ldata(200)
  character (80) cdata
  integer OutCount
  integer i,j,k

  integer, parameter ::    pad = 3
  integer, parameter ::    jds=1       , jde=6      , &
                           ids=1       , ide=9      , &
                           kds=1       , kde=5
  integer, parameter ::    jms=jds-pad , jme=jde+pad , &
                           ims=ids-pad , ime=ide+pad , &
                           kms=kds     , kme=kde
  integer, parameter ::    jps=jds     , jpe=jde    , &
                           ips=ids     , ipe=ide    , &
                           kps=kds     , kpe=kde

  real u( ims:ime , kms:kme , jms:jme )
  real v( ims:ime , kms:kme , jms:jme )
  real rho( ims:ime , kms:kme , jms:jme )
  real u2( ims:ime , jms:jme )
  real u1( ims:ime )

  integer int( ims:ime , kms:kme , jms:jme )
  real*8  r8 ( ims:ime , kms:kme , jms:jme )
……

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RC522(RFID射频模块)读卡ID的简单应用

文章目录 一、RFID是什么&#xff1f;二、RC522模块三、使用步骤1.硬件1.硬件连接2.引脚定义 2.软件1.初始化配置代码如下&#xff08;示例&#xff09;&#xff1a;2.引脚配置代码如下&#xff08;示例&#xff09;&#xff1a;3.模块复位代码如下&#xff08;示例&#xff09…

【工具】JS|浏览器脚本6分钟极速入门 · 开发一个限制自己刷b站的脚本

这张图花里胡哨的是让AI生成的&#xff0c;我觉得怪可爱的&#xff0c;就直接作为封面了。 这篇文章中会开发一个JS脚本&#xff0c;这是一个用来限制b站网页版功能的脚本&#xff0c;避免刷b站的时间过长。功能如下&#xff1a; 除了搜索、视频页、私信页之外的任何页都会被重…

Vue3:修改下拉框el-select的样式

问题 在Vue3项目中&#xff0c;使用了elemen-plus的下拉框&#xff0c;但是使用深度修改下拉框的样式&#xff08;比如下拉框的背景颜色&#xff09;一直不生效 解决 给下拉框框添加 popper-class属性&#xff0c;属性名根据需求取&#xff0c;比如这里取的是"selectSt…

【Docker】进阶之路:(一)容器技术发展史

【Docker】进阶之路&#xff1a;&#xff08;一&#xff09;容器技术发展史 什么是容器为什么需要容器容器技术的发展历程Docker容器是如何工作的 什么是容器 容器作为一种先进的虚拟化技术&#xff0c;已然成为了云原生时代软件开发和运维的标准基础设施。在了解容器技术之前…

【LeetCode刷题】-- 137.只出现一次的数字II

137.只出现一次的数字II class Solution {public int singleNumber(int[] nums) {Map<Integer,Integer> map new HashMap<>();for(int num : nums){Integer count map.get(num);if(count null){count 1;}else{count;}map.put(num,count);}for(Integer val:map.…

2023年安全员-B证证考试题库及安全员-B证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年安全员-B证证考试题库及安全员-B证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲随机出的…

LeetCode---374周赛

题目列表 2951. 找出峰值 2952. 需要添加的硬币的最小数量 2953. 统计完全子字符串 2954. 统计感冒序列的数目 一、找到峰值 这个简单的模拟&#xff0c;代码如下 class Solution { public:vector<int> findPeaks(vector<int>& mountain) {int nmountain…

【附源码】完整版,Python+Selenium+Pytest+POM自动化测试框架封装

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、测试框架简介 …

[每周一更]-(第76期):Go源码阅读与分析的方式

读源码可以深层理解Go的编写方式&#xff0c;理解作者们的思维方式&#xff1b;也有助于对Go语法用法深刻的理解&#xff0c;我们从这一篇说一下如何读源码&#xff0c;从哪些源码着手&#xff0c;从 简单到深入的方式学习源码&#xff1b; 学习源码也是一个修炼过程&#xff0…

科技改变旅游,道观漫游可视化:智能化管理助力道观游览

道观漫游可视化是一种通过技术手段实现道观游览的可视化展示方式&#xff0c;让游客能够更加直观地了解道观的历史、文化和建筑特色。 随着旅游业的不断发展&#xff0c;道观漫游可视化已经成为了旅游行业中的一个重要方向&#xff0c;吸引了越来越多的游客前来体验。 道观漫游…

Excel 动态拼接表头实现导出

public class Column {//单元格内容private String content;//字段名称&#xff0c;用户导出表格时反射调用private String fieldName;//这个单元格的集合private List<Column> listTpamscolumn new ArrayList<Column>();int totalRow;int totalCol;int row;//exc…

vue使用echarts显示中国地图

项目引入echarts以后&#xff0c;在页面创建canvas标签 引入一个公共js文件&#xff08;下面这段代码就是china.js文件&#xff09; (function (root, factory) {if (typeof define function && define.amd) {// AMD. Register as an anonymous module.define([ex…

孜然地址引导页V9(带后台)

刚刚在浏览之前经常访问的网站的时候我发现他不用那个域名了&#xff0c;然后我见这个页面好看&#xff0c;就把他干下来了&#xff0c;然后把给他写了个后台。另外如果你的子页面收录多的话&#xff0c;人家百度访问你的子页面会显示404的&#xff0c;所以为了流量可观安装这个…

【带头学C++】----- 九、类和对象 ---- 9.8 动态对象创建

目录 9.8 动态对象创建 9.8.1 动态创建对象基础概念 9.8.2 C语言创建动态对象的 9.8.3 new创建动态对象 9.8.4 delete释放动态对象 9.8.5 动态对象数组 9.8 动态对象创建 9.8.1 动态创建对象基础概念 在创建数组时&#xff0c;我们通常需要预先指定数组的长度&#xff0…

三个臭皮匠(ctr,nerdctl,crictl)顶一个诸葛亮(docker)

文章目录 containerd简介 nerdctl简介安装精简 Minimal 安装完整Full 安装启动服务 命令参数容器运行容器列出容器详情容器日志容器进入容器停止容器删除镜像列表镜像拉取镜像标签镜像导出镜像导入镜像删除镜像构建配置tab键配置加速配置仓库http方式https方式 ctr简介命令参数…

java--Calendar

1.Calendar ①代表的是系统此刻时间对应的日历 ②通过它可以单独获取、修改时间中的年、月、日、时、分、秒等(月份是从0开始的)。 2.Calender日历类的常见方法 注意&#xff1a;calender是可变对象&#xff0c;一旦修改后其对象本身表示的时间将产生变化。

8. MySQL 触发器

目录 概述 定义 触发器特性&#xff1a; 基础操作 创建触发器 NEW和OLD 其他操作 查看触发器 删除触发器 注意事项 概述 定义 触发器&#xff0c;就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段&#xff0c;但是触…

Serverless单体架构的崛起

在过去的几十年里&#xff0c;我们见证了应用架构以快速的速度演变。当我还是一个年轻的程序员时&#xff0c;开始编写一个简单的代码库&#xff0c;我们可以称之为单体应用。 我记得为前端编写了一些HTML/CSS&#xff0c;后端用了一些Java。但后来&#xff0c;随着时代发展和…

系统设计之Nginx

一、Nginx是什么 Nginx ("engine x") 是一个开源的&#xff0c;支持高性能、高并发的 Web 服务和代理服务软件。它是由俄罗斯人 Igor Sysoev 开发的&#xff0c;最初被应用在俄罗斯的大型网站 www.rambler.ru 上。后来作者将源代码以类 BSD 许可的形式开源出来供全球…

2023年山东省职业院校技能大赛信息安全管理与评估第一阶段样题

2023年山东省职业院校技能大赛信息安全管理与评估样题 竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000 分。三个模块内容和分值分别是&#xff1a; \1. 第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;240 分钟&…