C 配列の大きさ: IHXは1日の時間数(=24)、IDXは1月の日数(=31)、 C NXは地点数である。 C NXには、観測地点リストindex.txtに載っている C 観測地点数と等しい値を指定する。 PARAMETER (IHX=24,IDX=31,NX=146) C 配列(入力データ)の宣言: C ISTA (NX): 観測地点番号。東京(大手町)は44132など。 C ITYPE (IDX,NX): 観測地点の種類。 C 降水量のみの場合は1、4要素の場合は4。 C データが存在しない場合は0。 C XX (NX): 観測地点の経度 [度]。 C YY (NX): 観測地点の緯度 [度]。 C IR (IHX,IDX,NX): 降水量 [時間]。 C ID (IHX,IDX,NX): 風向 [16方位、北北東=1、東=4]。 C IW (IHX,IDX,NX): 風速 [m/s]。 C S (IHX,IDX,NX): 日照時間 [時間]。 C T (IHX,IDX,NX): 気温 [℃]。 INTEGER ISTA(NX),ITYPE(IDX,NX), + IR(IHX,IDX,NX),ID(IHX,IDX,NX),IW(IHX,IDX,NX) REAL XX(NX),YY(NX),HH(NX), + S(IHX,IDX,NX),T(IHX,IDX,NX) C 配列(出力データ)の宣言: C IRD (NX): 指定した日の日降水量 [mm]。 INTEGER IRD(NX) C 欠損値: データが無効のとき、IMISS、RMISSで指定された値が格納される。 C 整数型の場合はIMISS、実数型の場合はRMISSである。 PARAMETER (IMISS=999,RMISS=999.9) C サブルーチンAMDIDによって、観測地点リストを読みこむ。 CALL AMDID (NX,ISTA,XX,YY,HH) C 年月日を指定する。 C 入力を求めるメッセージを標準出力に書き出す。 WRITE(6,*) 'Year, Month, Day ?' C READ文で入力値を読みこむ。 READ (5,*) IYY,IMM,IDD C サブルーチンAMDHRによって、 C 指定された年、月の観測データ(時別値)を読むこむ。 C ※サブルーチンAMDHRは、IYY、IMMで指定された年、月について C データを読みこむ。 CALL AMDHR + (IHX,IDX,NX,ISTA,IYY,IMM,IMISS,RMISS,ITYPE,IR,ID,IW,S,T) C ここからDOループ11が始まる。 C 各地点について、日降水量を計算する。 DO 11 N=1,NX C 出力データを格納する配列に、あらかじめ欠損値を入れておく。 IRD(N) = IMISS C データが存在する場合だけ、つまり、ITYPE(IDD,N)がゼロでない場合だけ、 C 計算を実行する。 IF (ITYPE(IDD,N).NE.0) THEN C 和の値にゼロを代入する。 ISUM = 0 C ここからDOループ21が始まる。 C 各地点について、1時から24時までの時間降水量を合計する。 DO 21 IHH=1,IHX C 欠損値を見つけたときはその地点の計算を中止する。 C GO TO文でDOループから出る。 IF (IR(IHH,IDD,N).EQ.IMISS) GO TO 29 ISUM = ISUM + IR(IHH,IDD,N) C ここでDOループ21が終了する。 21 CONTINUE C 合計値をIRDに代入する。 IRD(N) = ISUM 29 CONTINUE ENDIF C ここでDOループ11が終了する。 11 CONTINUE C 出力ファイルを開く。 C 機番は10以降の番号を指定する。 C STATUSは書き出しの場合は'UNKNOWN'を指定する。 C FORMはテキストファイルの場合は'FORMATTED'を指定する。 OPEN(10,FILE='output.txt',STATUS='UNKNOWN', + FORM='FORMATTED') C ここからDOループ31が始まる。 C 各地点について、結果を出力する。 DO 31 N=1,NX C データが存在する場合だけ、つまり、IRD(N)が欠損値でない場合だけ、 C 結果を出力する。 IF (IRD(N).NE.IMISS) THEN C 地点番号、緯度、経度、降水量を出力する。 WRITE(10,'(1X,I5,1X,F8.3,1X,F8.3,1X,I3)') + ISTA(N),YY(N),XX(N),IRD(N) ENDIF C ここでDOループ31が終了する。 31 CONTINUE C ファイルを閉じる。 CLOSE(10) STOP END