WRF / WPS > Fortran90 > metgrid.exeで読込む中間ファイルのReadプログラム

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2 
32GB RAM 
CentOS Linux release 7.7.1908 (Core)
f95: GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
```

WRF (Weather Research and Forecasting Model)関連。
前処理のWPSについて。

## 背景

- 提供終了のSSTファイル(NCEP SST Analysisデータ)の代替としてOI SSTを使う
- OI SSTはGRIB1ファイルでないため、ungrib.exeは使えない
    - metgridで使うファイルを自分で用意することになる

NCEP SST Analysisデータファイルに対してungrib.exe実行した中間ファイルを読むプログラムを作成した。
この結果を見ながら、OI SSTファイルを同じ形式の中間ファイルにする予定。

## metgrid.exeで読込む中間ファイルのReadプログラム

- 参考: [OISSTにSSTデータを差し替える](https://sites.google.com/site/afcwrf/home/preproc/oisst)

情報感謝です。

上記で掲載されている`oisst_wps.f90`はmetgrid.exeで読込む中間ファイルを作成している。
そのコードを参考に、読込むプログラムを作成した。

### 実装

```intmed_read_200116.f90
program intmed_read_200116

  integer,parameter :: ounit = 100
  integer :: version
  !                           123456789012345678901
  character(len=21) :: ofile='../SST:2019-11-01_00'
  character(len=24) :: hdate
  real :: xfcst ! Forecast hour
  character(len=32) :: map_source ! Source model
  character(len=9) :: field ! Name of the field
  character(len=25) :: units ! Units of data
  character(len=46) :: desc ! Short description of data
  real :: xlvl ! Vertical level of data in 2-d array (200100 for surface, 201300 for SLP)
  integer :: nx, ny  ! dimensions of 2-d array
  integer :: iproj ! projection of data 
  character(len=8) :: startloc
  real :: startlat, startlon, deltalat, deltalon ! for latitude and longitude
  real :: earth_radius_km
  real :: ssts(4320, 2160) ! sst data

  open(ounit, file=ofile, form='unformatted', access='sequential', convert='big_endian')

  read(unit=ounit) version
  print *, 'version=',version

  read(unit=ounit) hdate, xfcst, map_source, field, &
                   units, desc, xlvl, nx, ny, iproj 
  print *, 'hdate=', hdate
  print *, 'xfcst=', xfcst
  print *, 'map_source=', map_source
  print *, 'field=', field
  print *, 'units=', units
  print *, 'desc=', desc
  print *, 'xlvl=', xlvl
  print *, 'nx, nx=', nx, ny
  print *, 'iproj=', iproj  ! 0 for Cylindrical equidistant

  read(unit=ounit) startloc, startlat, startlon, & 
                   deltalat, deltalon, earth_radius_km
  print *, 'startloc=', startloc
  print *, 'startlat=', startlat
  print *, 'startlon=', startlon
  print *, 'deltalat=', deltalat
  print *, 'deltalon=', deltalon
  print *, 'earth radius(km)=', earth_radius_km

  read(unit=ounit) is_wind_grid_rel
  print *, 'is_wind_grid_rel=', is_wind_grid_rel

  read(unit=ounit) ssts
  print *, 'SST(10,10)=', ssts(10,10)

  close(ounit)


end program intmed_read_200116
```

### ungrib.exe実行したファイル

ungrib.exe実行で生成した以下のファイルを読み込む。

`../SST:2019-11-01_00`


### 実行

```
$ f95 intmed_read_200116.f90 && ./a.out 
 version=           5
 hdate=2019-11-01_00:00:00     
 xfcst=   0.00000000    
 map_source=NCEP SST Analysis       GRID 173
 field=SST      
 units=K                        
 desc=Sea Surface Temperature                       
 xlvl=   200100.000    
 nx, nx=        4320        2160
 iproj=           0
 startloc=SWCORNER
 startlat=   89.9583359    
 startlon=   4.16669995E-02
 deltalat=  -8.33333358E-02
 deltalon=   8.33333358E-02
 earth radius(km)=   6371.22900    
 is_wind_grid_rel=           0
 SST(10,10)=   271.380005    
```

読めた。

### 留意事項

- big endianで読むこと

### 備考

Fortran90プログラムはおそらく10年前を最後に実装はしていないため色々忘れている。
上記の実装はきれいなものではない。