修改6S Fortran77 代碼,建立查找表

?

逐像元大氣校正,常預先計算查找表(LUT,LookUp Tabel),6S大氣輻射傳輸模式也可以用來計算LUT。但6S源程序輸出信息多,且浮點數輸出精度低,不利于提取關鍵信息生成LUT,本文描述了怎樣修改6S源碼以生成LUT。

首先確定LUT內容要素。

?????? 閱讀MODIS M?D04 氣溶膠產品生成算法文檔(NASA相關網頁),歸納了以下查找表要素:

  • 1)?????? 太陽天頂角觀測天頂角太陽方位角觀測方位角之差(相對方位角)散射角
  • 2)?????? 大氣模式
  • 3)?????? 氣溶膠模式
  • 4)?????? 550nm氣溶膠光學厚度
  • 5)?????? 波段號
  • 6)?????? 大氣透過率
  • 7)?????? atm. intrin. ref.(個人理解,這是大氣程輻射換算后的反射率,用于校正計算)
  • 8)?????? total? sca. (總散射,包括rayleigh散射和氣溶膠散射,用于校正計算)
  • 9)?????? 表觀反射率
  • 10)??? 校正后的地表反射率
  • 11)??? xa xb xc參數(物理意義不明,用于校正計算)

其次,閱讀源碼,明確LUT各要素在6S源碼中的變量名。

6S大氣校正計算源碼(Excel驗證中采用此公式)

???????? rog=rapp/tgasm
???????? rog=(rog-ainr(1,1)/tgasm)/sutott/sdtott
???????? rog=rog/(1.+rog*sast)
???? xa=pi*sb/xmus/seb/tgasm/sutott/sdtott
???? xb=srotot/sutott/sdtott/tgasm
???? xc=sast

?????? 由計算源碼確定需輸出的變量。下面是輸出LUT要素的Fortran77代碼示例,建議放在源碼main.f中stop一句之前。

????? write(*,*) asol,phi0,avis,phiv,adif,phi,idatm,iaer,v,taer55,
???? 1? iwave,tgasm,ainr(1,1),sutott*sdtott,rapp,rog,xa,xb,xc

  • 其中,asol是太陽天頂角,
  • phi0是太陽方位角,
  • avis是觀測天頂角,
  • phiv是觀測方位角,
  • adif是散射角,
  • phi是相對方位角,
  • idatm是大氣模式號,
  • iaer是氣溶膠模式號,
  • v是水平能見度,
  • taer55是550nm氣溶膠光學厚度,
  • iwave表示波段號,
  • tgasm表示大氣透過率,
  • ainr(1,1)是大氣本身的反射率(姑且這么理解),
  • sutott*sdtott表示總散射,
  • rapp是表觀反射率,
  • rog是校正后的地表反射率,
  • xa,xb,xc是校正計算參數。

Fortran77每行長度不能超過80個字符,續前行需在特定位置指明(示例中的iwave前的1即表示續行)。

該示例源碼沒有指定任何輸出樣式。浮點數會按默認樣式輸出,小數點后的位數比較多,精度較好。

挑選一個查找表文件用Excel驗證后表明,excel公式計算值與6S輸出值之間最大誤差小于1E-7。說明方法是可行的。

再次,編譯源碼,編寫Shell腳本:

編譯環境:OpenSUSE操作系統 g95編譯器,版本未知。

編譯命令:g95 *.f -o sixs(在BRDF相關代碼處可能有幾個warning,本文不涉及BRDF,故暫不修改調試。在Windows下用f77編譯,無warning,編譯通過)

生成LUT的bash腳本getLUT.sh:

   1:  function LUTCalc(){ 
   2:  #{42,44,48,25,27,30} 
   3:  IBand=$1 
   4:  echo "Band ${IBand} is running" 
   5:  for Iref in {0.1,0.5} 
   6:  do 
   7:  fstat=${IBand}"_"${Iref}.res       
   8:  echo "asol,phi0,avis,phiv,adif,phi,idatm,iaer,v,taer55, iwave,tgasm,ainr,tott,rapp,rog,xa,xb,xc" >> ${fstat} 
   9:  for SolarZ in {0,15,30,45,75} 
  10:  do 
  11:    for SolarAz in {0,45,90,135} 
  12:    do 
  13:     for ViewZ in {0,15,30,45,75} 
  14:     do 
  15:      for Iaer in {1,2,3,5,6,7} 
  16:      do 
  17:       for Idatm in {1,2,3,4,5,6} 
  18:       do 
  19:        for IAod in {0.1,0.2,0.5,1.0}; 
  20:        do 
  21:  #   Run sixs and output 
  22:  ./sixs <<EOF | tail -n 1 >> ${fstat} 
  23:  0 
  24:  $SolarZ $SolarAz $ViewZ 0 3 15 
  25:  $Idatm 
  26:  $Iaer 
  27:  0 
  28:  $IAod 
  29:  -0 
  30:  -1000 
  31:  ${IBand} 
  32:  0 
  33:  0 
  34:  0 
  35:  0.0 
  36:  -$Iref 
  37:  EOF 
  38:         done 
  39:        done 
  40:       done 
  41:      done 
  42:     done 
  43:    done 
  44:    done 
  45:  } 
  46:  function getLUT() 
  47:  { 
  48:  echo "LUT is Calcing" 
  49:  for iwave in {42,44,48,25,27,30} 
  50:  { 
  51:    LUTCalc ${iwave} 
  52:  } & 
  53:  } 
最后調用該腳本

>source getLUT.sh

>getLUT

最好晚上計算早晨看結果,如果CPU給力的話,幾個小時后就可以得到結果。

下面是生成的LUT示例:

  • asol,phi0,avis,phiv,adif,phi,idatm,iaer,v,taer55, iwave,tgasm,ainr,tott,rapp,rog,xa,xb,xc
  • ?? 0.0000000?????? 0.0000000?????? 0.0000000?????? 0.0000000?????? 180.00000?????? 0.0000000??? 1?? 1?? 63.664398????? 0.10000000??? 25? 0.98984975????? 6.89081103E-02? 0.80637234????? 0.10000000????? 3.87301818E-02? 1.98730151E-03? 8.71319696E-02? 0.14777245???
  • ?? 0.0000000?????? 0.0000000?????? 0.0000000?????? 0.0000000?????? 180.00000?????? 0.0000000??? 1?? 1?? 26.739149????? 0.20000000??? 25? 0.98984975????? 7.75793791E-02? 0.76532620????? 0.10000000????? 2.94530466E-02? 2.09388486E-03? 0.10336593????? 0.16389242???
  • ?? 0.0000000?????? 0.0000000?????? 0.0000000?????? 0.0000000?????? 180.00000?????? 0.0000000??? 1?? 1?? 8.4940033????? 0.50000000??? 25? 0.98984975????? 0.10173188????? 0.64870018????? 0.10000000???? -2.69861287E-03? 2.47033220E-03? 0.15994170????? 0.20088956???
  • ?? 0.0000000?????? 0.0000000?????? 0.0000000?????? 0.0000000?????? 180.00000?????? 0.0000000??? 1?? 1?? 3.5674956?????? 1.0000000??? 25? 0.98984975????? 0.13688390????? 0.48083964????? 0.10000000???? -7.89646432E-02? 3.33272247E-03? 0.29038188????? 0.24035060???
  • ?????? ……

轉載于:https://www.cnblogs.com/wishmo/p/3429484.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273939.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273939.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273939.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++ 實例

#include "stdafx.h" #include <iostream> using namespace std; int main() { int a; a 4; cout<<a<<endl; return 0; }

VMware虛擬機與宿主無法復制的解決辦法

由于工作需要&#xff0c;上網機器使用虛擬機&#xff0c;因此需要經常來回的拷貝文件&#xff0c;而vmware從6.5一直走來到10.0.1&#xff0c;總是有一個問題很讓人苦惱---共享粘貼板總是會無故失效。經常實驗&#xff0c;發現可以經過以下方法臨時解決一下&#xff0c;雖然不…

c++ pat 乙級 --1001?害死人不償命的(3n+1)猜想

1001 害死人不償命的(3n1)猜想 &#xff08;15 分&#xff09; 卡拉茲(Callatz)猜想&#xff1a; 對任何一個正整數 n&#xff0c;如果它是偶數&#xff0c;那么把它砍掉一半&#xff1b;如果它是奇數&#xff0c;那么把 (3n1) 砍掉一半。這樣一直反復砍下去&#xff0c;最后…

【開源項目之路】jquery的build問題

在剛開始clone了jquery到本地build的時候&#xff0c;就遇到了問題。 “ENORESTARGET No tag found that was able to satisfy ...” 提示為bower install失敗&#xff0c;反復查找原因&#xff0c;最后在這兒看到同樣類似的問題&#xff0c;貌似是git協議的連接問題&#xff0…

適配ios7

if ([self respondsToSelector:selector(edgesForExtendedLayout)]){self.edgesForExtendedLayout UIRectEdgeNone;self.extendedLayoutIncludesOpaqueBars NO;self.modalPresentationCapturesStatusBarAppearance NO;} 轉載于:https://www.cnblogs.com/jiackyan/p/3441378.…

c++ pat 乙級 -------1002 讀入一個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。

1002 寫出這個數 &#xff08;20 分&#xff09; 讀入一個正整數 n&#xff0c;計算其各位數字之和&#xff0c;用漢語拼音寫出和的每一位數字。 輸入格式&#xff1a; 每個測試輸入包含 1 個測試用例&#xff0c;即給出自然數 n 的值。這里保證 n 小于 10?100??。 輸出…

USACO SEC.1.3 No.1 Mixing Milk

題意&#xff1a;需要收購總數為N的牛奶&#xff0c;現在有M個牛奶供應商&#xff08;總量足夠&#xff09;&#xff0c;給出總數和單價&#xff0c;求最小的花銷。 核心&#xff1a;基本的貪心解法&#xff0c;按單價排序逐個選取。 目的在于熟悉基本的貪心法的基本方法和思路…

c++ 獲取數組的長度

//獲得數組的長度 template<typename T> int count(T& x) { int s1 sizeof(x); int s2 sizeof(x[0]); int result s1 / s2; return result; }

[WPF疑難] 繼承自定義窗口

[WPF疑難] 繼承自定義窗口 原文 [WPF疑難] 繼承自定義窗口 [WPF疑難] 繼承自定義窗口 周銀輝 項目中有不少的彈出窗口&#xff0c;按照美工的設計其外邊框&#xff08;包括最大化&#xff0c;最小化&#xff0c;關閉等按鈕&#xff09;自然不同于Window自身的&#xff0c;但每個…

c++ #includecstring

其中包含了眾多的函數調用。

單獨使用modelsim進行仿真

以例子來說明 我要用testbench lpf_direct_tb.v 來測試文件lpf_direct.v 命令行方式和圖形界面兩種方式都可以 1 映射庫 .在編譯源文件之前,創建一個庫存放編譯的結果. vlib lpf_direct_tb 把庫映射到工作目錄 vmap work lpf_direct_tb 2編譯設計文件 vlog lpf_direct.v lpf_di…

c++ pat 乙級 ---1004 成績排名

1004 成績排名 &#xff08;20 分&#xff09; 讀入 n&#xff08;>0&#xff09;名學生的姓名、學號、成績&#xff0c;分別輸出成績最高和成績最低學生的姓名和學號。 輸入格式&#xff1a; 每個測試輸入包含 1 個測試用例&#xff0c;格式為 第 1 行&#xff1a;正整…

richTextBoxFontClass

使用 private void button1_Click(object sender, EventArgs e) {RichTextBoxCtrl.richTextBoxFontClass r new RichTextBoxCtrl.richTextBoxFontClass();r.richTextBox richTextBox1;r.ToggleBold(); } using System; using System.Collections.Generic; using System.Linq;…

我感覺我恰似一個呆逼

TicTacToe V2.0。 非要用1-9來輸入的結果就是使用二維數組這件事的意義變得非常難找。 留個遺體&#xff0c;我要改回坐標輸入了。 1 public class Game {2 String chessBoard;3 String[][] pieces new String[3][3];4 5 /** 初始化棋盤樣式和棋子數組。*/6 …

輔助工具欄目

1、推薦一款錄像軟件: 《EVCapture》 2、圖像處理軟件&#xff1a;打馬賽克&#xff0c;添加水印&#xff0c;《快剪輯》軟件

Android啟動initlogo.rle制作

步驟如下&#xff1a; rgb2565為out/host/linux-x86/bin/rgb2565 #!/bin/sh convert -depth 8 initlogo.bmp rgb:initlogo.raw ./rgb2565 -rle <initlogo.raw> initlogo.rle 拷貝initlogo.rle至/root目錄 轉載于:https://www.cnblogs.com/easynote/p/3454088.html

爬蟲:提取網頁數據的幾種方法

爬蟲&#xff1a;提取網頁數據的幾種方法 1、Beautiful Soup 2、Pyquery 3、正則表達式 4、scrapy 自己的數據提取方法 Selector(選擇器) Selector 是基于lxml來構建的&#xff0c;支持XPath選擇器&#xff0c;CSS選擇器&#xff0c;以及正則表達式

[企業化NET]Window Server 2008 R2[3]-SVN 服務端 和 客戶端 基本使用

1. 服務器基本安裝即問題解決記錄 √ 2. SVN環境搭建和客戶端使用 2.1 服務端 和 客戶端 安裝 √ 2.2 項目建立與基本使用 √ 2.3 基本沖突解決,并版&#xff0c;tags 3. 數據庫安裝 4. 郵件服務器搭建 5. JIRA環境搭建和使用 6. CC.NET項目持續發布工具…

關于爬蟲中遇到的問題

1、 ModuleNotFoundError: No module named win32api 在setting中選擇安裝

關于 mysql.test 數據庫

國內私募機構九鼎控股打造APP&#xff0c;來就送 20元現金領取地址&#xff1a;http://jdb.jiudingcapital.com/phone.html內部邀請碼&#xff1a;C8E245J &#xff08;不寫邀請碼&#xff0c;沒有現金送&#xff09;國內私募機構九鼎控股打造&#xff0c;九鼎投資是在全國股份…