配列の一部分だけを作画するにはどうしたらよいのでしょう? これまでと同じ
データで, その一部分だけを描くことを考えてみましょう(U2D4).
経度80から320,
緯度
-60から60の
部分だけを描くことにします. 6行めのパラメータ文で与えているように, 格
子点の範囲はx方向に9 ≦ i ≦ 33,
y方向に7 ≦ j ≦ 31 となります. ウインドウの設定をこの範囲とし, 36行めのUDCNTR ルーチ
ンで等高線図を描くのですが, ここで一工夫が必要です. 最初の引数としては,
この矩形領域の左下に対応する配列要素 P(KXMN,KYMN) を陽に与え, 2
番めには実際に宣言した配列の第1次元寸法 NX, 3, 4番めには実際の作
画に使う配列の第1次元および第2次元寸法 (KXMX-KXMN+1,KYMX-KYMN+1)
を与えることによって配列の一部分だけを作画することができます.
この辺の事情を正しく理解するためには, FORTRAN において, 2次元の配列要 素が記憶領域上でどのように順序づけられ, サブルーチンの引数にある配列が どのように扱われているかを知る必要があります. FORTRAN マニュアルなどを 参照してください.
PROGRAM U2D4 PARAMETER( NX=37, NY=37 ) PARAMETER( XMIN=0, XMAX=360, YMIN=-90, YMAX=90 ) PARAMETER( PI=3.14159, DRAD=PI/180 ) PARAMETER( KXMN=9, KXMX=33, KYMN=7, KYMX=31 ) REAL P(NX,NY), ALON(NX), ALAT(NY) DO 10 I=1,NX ALON(I) = XMIN + (XMAX-XMIN)*(I-1)/(NX-1) 10 CONTINUE DO 20 J=1,NY ALAT(J) = YMIN + (YMAX-YMIN)*(J-1)/(NY-1) 20 CONTINUE DO 30 J=1,NY SLAT = SIN(ALAT(J)*DRAD) DO 30 I=1,NX P(I,J) = 3*SQRT(1-SLAT**2)*SLAT*COS(ALON(I)*DRAD) + - 0.5*(3*SLAT**2-1) 30 CONTINUE WRITE(*,*) ' WORKSTATION ID (I) ? ;' CALL SGPWSN READ (*,*) IWS CALL GROPN( IWS ) CALL GRFRM CALL GRSWND( ALON(KXMN), ALON(KXMX), ALAT(KYMN), ALAT(KYMX) ) CALL GRSVPT( 0.2, 0.8, 0.2, 0.8 ) CALL GRSTRN( 1 ) CALL GRSTRF CALL USDAXS CALL UDCNTR( P(KXMN,KYMN), NX, KXMX-KXMN+1, KYMX-KYMN+1 ) CALL GRCLS ENDPROGRAM U2D4
FORTRANのひけつ 2
|