配列の一部分だけを作画するにはどうしたらよいのでしょう? これまでと同じ
データで, その一部分だけを描くことを考えてみましょう(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
END
PROGRAM U2D4
|
FORTRANのひけつ 2
|