2017年7月29日土曜日

GDLSSW004, sswdbの導入とmake_mirror.pro

GDL (GNU Data Language) 上で SSW (Solar Soft Ware) を使うためのメモ書き

make_mirror.pro





sswdb_upgrade.proでは、PERL(MIRROR?)からftpを実行している。

make_mirror.proでは、その設定ファイルを作っている。

on_ioerrorの修正を行った後でsswdb_upgradeを実行すると、このプロシージャの終わりあたり、ファイルの書き込み部分でエラーが出た。

% STRING: Format parser: NoViableAlt
% Execution halted at: MAKE_MIRROR        197 /???/ssw/gen/idl/system/make_mirror.pro

197行目付近の内容は以下。

> form='(' + strtrim(npacks,2) + '(1h#,/,a,/,'+ strtrim(ntags-1,2) + '(3x,a,/)))'
> file_append,mirror_file,string(allpacks,format=form)    ;, /new

file_appendが書き込みプロシージャ、mirror_fileが設定ファイル、allpacks(構造体のアレイ)には、各データ(ydb, goes/x-ray, soho/genなど)のディレクトリ情報などが入っている。

構造体の内容をformできれいに整えて書き込んでいる訳だが、どうもここでエラーになる。

npacksが全データ数、ntagsは1データで必要とされる情報の要素数(構造体のタグ数)。


実際、GDL> print, string(allpacks,format=form) としてもエラーが出る。

ここではallpacksの全データをまとめて書いているが、どうもこれが良くないようで、1データずつなら表示できた。

全データ(例えば7データ)の場合のformatは、「form=(7(1h#,/,a,/,15(3x,a,/)))」となっていて、1h#以下が、1データの内容に相当する。

GDL> print, string(allpacks[0],format="(1h#,/,a,/,15(3x,a,/))") なら表示できた。

なので、1データずつ書き込むように書き換え。

< form='(1H#,/,a,/,'+ strtrim(ntags-1,2) + '(3x,a,/))'
<for i0=0,npacks-1 do begin
<   s1=string(allpacks[i0],format=form)
<   file_append,mirror_file,s1 ;, /new
<   if i0 eq npacks-1 then goto,L100
<endfor
<L100:

なお、for文がnpacks-1で終了しないため、強引にgoto文で脱出している。(なんだこれ?)

試しに、

GDL> sswdb_upgrade,/spawn,/loud

を実行すると、ファイル取得できていた。




追記


その後SSWDBのインストールをしようとすると、下記のメッセージが出てGDL自体が落ちる事が何度かあった。

gdl: /build/gnudatalanguage-yJFcE3/gnudatalanguage-0.9.6v2/src/gdlarray.hpp:210: T& GDLArray<T, IsPOD>::operator[](SizeT) [with T = std::__cxx11::basic_string<char>; bool IsPOD = false; SizeT = long long unsigned int]: Assertion `ix < sz' failed.
Magick: abort due to signal 6 (SIGABRT) "Abort"...
Abort (core dumped)

GDLはまだ不安定なのかも。


さらに追記


3度ほどやり直すと、実行できるようになった。(何だったのか)

データをダウンロードできているが、さすがにファイル数が多い。


さらにさらに追記

ssw_upgradeを実行すると、元ファイルが上書きされてしまうので、手動で修正が必要。

FTP転送の際、ファイルの容量の違いで判断している模様。

前回の記事のfile_stat.proも同じく修正が必要。

0 件のコメント:

コメントを投稿

注目の投稿

【貨幣循環】名目GDPと M=G+I と V=1/(1-β) の成長率

「 【貨幣循環】貨幣循環導入の3点セット 」では、貨幣循環の定式化である M=G+I と V=1/(1-β) を紹介した。「 【貨幣循環】歳出伸び率とGDP成長率の関係 」では、名目GDPの成長率と政府支出Gの成長率の関係を紹介した。本記事では、MとV、および名目GDPの成長率...

人気の投稿