NCL > 行列形式で出力する > write_matrix() / 実行時引数の指定

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
```

NCL(NCAR Command Language)関連。
WRF(Weather Research and Forecasting Model)関連。

処理結果で作成されたNetCDFファイルの情報を読むためNCLを実装。

- LN-test_nc: 値が入ったncファイルへのsymbolic link
- LN-latlon_nc: 緯度経度情報が入ったファイルへのsymbolic link

## v0.1

### code

```ncl
; v0.1 Mar.15, 2017
;   - write values in matrix
;   - format: 9 columns (related to ncdump -v <variable> output)

begin

  time_steps = (/2,5,8,11,14,17,20,23/)

  ; NetCDF files
  vfile = addfile("LN-test_nc", "r")
  cnc = vfile->CONC

  do ti=0,dimsizes(time_steps)-1
      val = cnc(time_steps(ti),0,0,0,:,:)
      write_matrix(val, "9f7.2", False)
      exit ; for debug
  end do
end
```

```txt:実行
$ ncl -Q read_lat_lon.ncl 
```

```txt:結果
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
(後略)
```

サイズは(65,82)。

### 緯度経度取得コマンド (ncdump)

別途、緯度経度情報は以下で取得する。

```
$ ncdump -v XLONG LN-latlon_nc  | less
と
$ ncdump -v XLAT LN-latlon_nc  | less
```

```txt:結果
(前略)
 XLONG =
  111.17, 111.29, 111.41, 111.53, 111.65, 111.77, 111.89, 112.01, 112.13, 
    112.25, 112.37, 112.49, 112.61, 112.73, 112.85, 112.97, 113.09, 113.21, 
    113.33, 113.45, 113.57, 113.69, 113.81, 113.93, 114.05, 114.17, 114.29, 
    114.41, 114.53, 114.65, 114.77, 114.89, 115.01, 115.13, 115.25, 115.37, 
    115.49, 115.61, 115.73, 115.85, 115.97, 116.09, 116.21, 116.33, 116.45, 
    116.57, 116.69, 116.81, 116.93, 117.05, 117.17, 117.29, 117.41, 117.53, 
    117.65, 117.77, 117.89, 118.01, 118.13, 118.25, 118.37, 118.49, 118.61, 
    118.73, 118.85, 118.97, 119.09, 119.21, 119.33, 119.45, 119.57, 119.69, 
    119.81, 119.93, 120.05, 120.17, 120.29, 120.41, 120.53, 120.65, 120.77, 
    120.89,
  111.17, 111.29, 111.41, 111.53, 111.65, 111.77, 111.89, 112.01, 112.13, 
    112.25, 112.37, 112.49, 112.61, 112.73, 112.85, 112.97, 113.09, 113.21, 
    113.33, 113.45, 113.57, 113.69, 113.81, 113.93, 114.05, 114.17, 114.29, 
    114.41, 114.53, 114.65, 114.77, 114.89, 115.01, 115.13, 115.25, 115.37, 
    115.49, 115.61, 115.73, 115.85, 115.97, 116.09, 116.21, 116.33, 116.45, 
(後略)
```

3つの結果から、緯度経度情報付きのデータを得ることができる。

これをNCLで実装するには理解不足のため、pythonかbashで処理する方が良さそう。

## v0.2 > timestep indexを実行時引数で指定

外部scriptから実行することを考えて、timestep indexは実行時引数で渡すようにした

### code

```read_lat_lon.ncl
;
; runtimer parameter example
;   [cmd] ti=[0..7]
; where [ti] is timestep index

;----------------------------------
; v0.2 Mar.15, 2017
;   - use [runtime parameter (ti)]

; v0.1 Mar.15, 2017
;   - write values in matrix
;   - format: 9 columns (related to ncdump -var output)

begin

  time_steps = (/2,5,8,11,14,17,20,23/)

  ; NetCDF files
  vfile = addfile("LN-test_nc", "r")
  cnc = vfile->CONC

  val = cnc(time_steps(ti),0,0,0,:,:)
  write_matrix(val, "9f7.2", False)
end
```

```txt:実行例
$ ncl -Q read_lat_lon.ncl ti=0 
```

関連: [NetCDF / NCL > ncl実行時にcopyrightなどを表示しない > -Qオプション](https://qiita.com/7of9/items/c5ff2bed8e5b3597eba2)

## v0.3 > 書式間違い訂正

初期式の桁指定間違いにより、複数の項目がくっついて１つになっていた。

```read_lat_lon.ncl
;
; runtimer parameter example
;   [cmd] ti=[0..7]
; where [ti] is timestep index

;----------------------------------
; v0.3 Mar.15, 2017
;   - fix bug in format > 9f8.2 not 9f7.2
;
; v0.2 Mar.15, 2017
;   - use [runtime parameter (ti)]
;
; v0.1 Mar.15, 2017
;   - write values in matrix
;   - format: 9 columns (related to ncdump -var output)

begin

  time_steps = (/2,5,8,11,14,17,20,23/)

  ; NetCDF files
  vfile = addfile("LN-test_nc", "r")
  cnc = vfile->CONC

  val = cnc(time_steps(ti),0,0,0,:,:)
  write_matrix(val, "9f8.2", False)
end
```