本文介绍如何利用IRI(Internation Reference Ionosphere 国际参考电离层) 2016模型离线版本(Fortran语言)实现任意时间全球的电离层二维TEC分布图,该功能是IRI在线查询不具备的。

话不多说,先上一张效果图,下图为2019年6月21日(夏至日)的全球TEC分布图,网格精度为1°。

图0. IRI-2016模型生成的全球TEC分布图

图1. IRI官方网站的截图

如上图所示,IRI官方网站(http://irimodel.org/)目前提供了MATLAB、Python和Fortran三个版本的电离层的离线查询运行程序。其中Matlab版本需要不具备真正的“离线”功能,即其运行基于CMCC提供的在线服务支持,且运行过程中存在无法连接等问题,使用及其不便。Python版本的基于官方提供的pyglow模块,仅能在Linux系统下先编译、后安装。因此,本文重点介绍利用Fortran版本的离线软件包实现任意精度,任意时刻的全球二维TEC网格的计算方法,并能够真正意义上做到离线运行。

Fortran版本的离线软件包是IRI官方提供最早,最稳健的离线版本,其完整内容如下:

图2. Fortran版本的软件包

其中”*.dat”为数据文件,”*.for”为Fortran程序,其中“iritest.for”为演示程序(main函数),其余for程序为相关的子函数(即subroutine)。编译并运行Fortran需要利用Fortran编译器,目前较为常用的有Visual Studio,Code Blocks和Simply Fortran,个人推荐使用Simply Fortran因为它是专门为Fortran程序设计的编译器前两种集成度太高且不够轻量化(Fortran 2.4安装及注册机,网盘链接:https://pan.baidu.com/s/1E5oZg-DiquAU163lGBEOpw 提取码:1t1q )。下面先介绍IRI-Fortran的基本内容与使用方法:

(1)IRI官网下载Fortran软件包(http://www.irimodel.org/)

图3. IRI官网截图

上图中的程序和数据文件都是需要的,关于Fortran软件包的下载可以进一步参考(https://blog.csdn.net/sinat_32602421/article/details/88671935),注意图3中第一行的“common files for all vision”也是必须下载的,其中包含的为“*.asc”文件,并将其拷贝到与代码相同的路径即可。

(2)在Simply Fortran中创建工程并添加文件

安装好Simply Fortran并利用注册机生成的注册码完成激活后,首先创建一个新的工程(*.prj文件)如图9中的IRI2016.prj,第二步将刚刚下载的所有程序及数据文件添加到IRI2016.prj下,此时代码所在路径下应包含图2中的全部内容。

图4. 新建Fortran工程

(3) 编译并运行iritest.for(main函数)

如下图所示先编译,再点击运行iritest.for,和C语言一样同一个工程路径下只能有一个main函数,接下来改写iritest.for的时候如果需要备份原代码请将备份的.for程序从工程路径下移除。

图5. 编译程序

图6. 点击运行程序

如果代码没有语法错误会显示编译complete,接下来运行iritest.for会在下方调试栏内弹出会话语句,使用键盘输入需要查询的经纬度时间等信息完成对电离层数据的查询,会话如下:

图7. 通过键盘输入完成查询

上述步骤同样可以双击在图2中的target.exe在命令行模式下完成。

(4) 检查结果

完成上述操作后原始文件夹下会出现一个fort.7文件,这个文件就是刚刚查询的电离层数据,选择用记事本或写字板打开此文件,如下图所示。

图8. 电离层数据查询结果

该结果后期可应用matlab或python进行读取。到目前为止,为大家介绍了Fortran版本的离线软件包的基本使用方法,以上实现的功能与在线查询可实现的功能基本相同。读者在使用过程中可以发现,在上述查询TEC数据的过程中只有一个可迭代的变量,如果需要生成二维TEC网格就需要对iritest.for进行修改来实现(即多嵌套一层循环),接下来对具体的修改方法进行说明,话不多说直接上对iritest.for进行修改的程序截图:

(1)将键盘输入改为直接设置

iritest.for的原始输入为print、read的标准输入方式,即从键盘读取数据作为输入,实际上在查询的过程中,一次可能只需要修改一个变量(如经纬度、时间等),其他参数如海拔、TEC积分上限高度输出格式的选择等基本不需要修改。更重要的是输出二维的全球TEC网格需要对程序进行多次迭代(纬度范围:-90°~90°,经度范围:0~360°),在多次迭代中每次都用键盘输入查询参数是不现实的,也失去了迭代的意义。因此将图9所示的输入方式更改为图10所示的直接在程序中进行定义。

图9. iritest.for的原始输入

图10. 修改后参数变为直接在程序中设置

(2)添加循环

首先对iritest.for中原本的循环参数进行设置,使之设置为针对纬度(也可以是经度,此处如设置为经度则外层循环设置为纬度)的循环,如下图所示(其中ivar=2表示针对纬度进行循环)。

图11.对原始循环参数进行修改

下面我们需要做的是给该程序多嵌套一层循环,Fortran中的计数循环定义格式为

DO index=istart,iend,step
              循环语句
       END DO
       step如果缺少,默认是1。

因此,在程序的变量声明部分结束后添加如下图所示的循环语句(如果需要更高精度的网格可以指定迭代的step)

图12. 对程序进行如上图所示的修改

循环的终止(即enddo)设置在程序的最后,这里需要注意原本iritest.for在程序末尾设置了,判断循环是否中止的变量icontinue,该变量可以通过键盘输入,如下图所示

图13. 原始程序中的迭代终止方式

显然我们并不想每次通过键盘输入决定程序是否继续,即我们希望程序运行结束自动停止,因此需要对程序的结尾部分进行如下修改:

图14. 程序结尾处进行如图所示修改

至此,完成对程序的修改,重新编译并运行即可得到全球TEC的二维分布数据,其同样线性存储于fort.7文件中,后续工作可以直接将"fort.7"重命名为txt格式的文件,并编写相应的matlab或python程序将其读取为二维网格数据。

相信大家已经通过上述介绍了解了如何手动修改IRI官方提供的Fortran程序实现生成任意时刻,任意精度的全球电离层TEC数据的方法,最后奉上一个修改好的iritest.for文件(可直接替换原程序包中的同名文件)和一组对应的fort.7文件(包含数据)的网盘链接。

下载链接:

  1. 网盘链接:https://pan.baidu.com/s/1bUsT_jO9fNpZQ1_elnczBw 
    提取码:tmhb

本文参考:

《(20190319)IRI-Fortran程序包,说明和使用》

https://blog.csdn.net/sinat_32602421/article/details/88671935

IRI 2016模型计算二维全球电离层TEC分布网格(Fortran离线版)相关推荐

  1. C语言:编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递

    /*编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递*/ #include<stdio.h> #define N 4 #define M 3 int findmax(int ( ...

  2. 梯度下降计实例计算(二维)

    梯度下降计实例计算(二维) 文章目录 内容简介 示例说明 绘制曲线 进一步讨论 参考资料 内容简介 梯度下降是在机器学习中重要的计算内容.本文就一个具体的示例,展示如何在梯度下降中. 示例说明 设损失 ...

  3. 分别计算二维数组主对角线元素与辅对角线元素的和。

    知识点:理解对角线与熟悉二维数组的下标. 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等 ...

  4. cad计算机面积和周长,CAD怎么计算二维图形的面积和周长

    CAD怎么计算二维图形的面积和周长 CAD是一款实用的绘图软件,在工程设计的各个领域里应用十分广泛,具有强大的二维绘图功能,那么我们用CAD怎么计算二维图形的面积和周长呢? 下面来看看具体的实例: ( ...

  5. MATLAB对autumn.tif文件计算二维DCT变换

    %对autumn.tif文件计算二维DCT变换 RGB = imread('autumn.tif'); I = rgb2gray(RGB); %真彩色图像转换成灰度图像 J = dct2(I); %计 ...

  6. opencv 计算二维矢量的幅值—magnitude()函数

    计算二维矢量的幅值:magnitude()函数 该函数用来计算二维矢量的幅值 void magnitude(InputArray x,InputArray y,OutputArray magnitud ...

  7. 3.5 二维随机变量函数的分布

    学习目标: 要学习二维随机变量的分布,我可能会遵循以下步骤: 了解基本概念:我会开始学习二维随机变量.联合概率密度函数.边缘概率密度函数.条件概率密度函数.期望值和方差等基本概念,以确保我对这些概念有 ...

  8. 计算二维紧束缚模型费米面和nesting程序新思路

    这里使用随机生成的方法在多边形布里渊区生成k点坐标,优点是程序好写,缺点是计算量很大 下面这段代码是生成六边形内的点,是用数学方法生成的 function Kpos=GetKPoints(N) a = ...

  9. matlab计算矩阵的相关系数矩阵,计算二维矩阵的相关系数

    很久没有用Matlab工具了,最近由于需要数据处理所以又重拾起 主要记录如何用Matlab计算矩阵的相关系数方法 矩阵形式:4096*3575 目标:得到该矩阵每一行与其余行数据之间的相关系数矩阵(4 ...

最新文章

  1. mysql中concat函数的使用相关总结
  2. Py之BaseHTTPServer:Python库之BaseHTTPServer的简介、安装、使用方法之详细攻略
  3. JS中的HTML片段
  4. JS中创建函数的几种方式
  5. 完善三个数字对象排序程序。MOOC,Java第四章 面向对象和类 第一次作业
  6. egg extend ts_电竞5.21日王者荣耀KPL分析:DYG冲击西部榜首,TS战队能否虐菜?
  7. 我们的内存中都放了什么
  8. 电脑cpu温度过高怎么办_解决电脑主板CPU温度过高,COC机箱提升电脑健康指数
  9. 访问艺术馆(codevs 1163)树形DP
  10. 2012 年美国总统候选人政治献金 数据分析(numpy+pandas)
  11. Windows邮件添加QQ邮箱
  12. SSH Agent Forwarding概念与示例
  13. 计算机视觉在农业领域中的应用
  14. 有没有压缩视频的软件?能压缩视频的软件?压缩视频用什么软件比较好?
  15. chrome无法打开无痕模式的解决方案
  16. linux正则表达式与文本处理工具
  17. 【不懂就问】互联网、因特网和万维网到底是什么
  18. 监听Home键和锁屏键
  19. cocos2dx android游戏防破解总结
  20. Thunderbird 乱码

热门文章

  1. CC2530并行I/O端口应用
  2. 解决:JDK安装下一步没反应,JDK安装失败
  3. 天使汇自众筹上线六小时筹资 510 万元,超额完成任
  4. 中国联通数字乡村白皮书 附下载
  5. 11. Windows应用程序常用控件
  6. matlab水果定位与分割,利用Matlab软件和BP神经网络快速识别水果实现分拣
  7. python 学堂在线_(3.7学堂在线python学习笔记)
  8. 通信专业 英语词汇大全(持续更新)
  9. java基于ssm的高校学生会日常事务管理信息系统
  10. 2019年下半年软件工程领域各大会议投稿时间(包含会议信息介绍及CCF推荐会议最新目录)