IRI 2016模型計算二維全球電離層TEC分佈網格(Fortran離線版)

本文介紹如何利用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章