
iq_Ŏw肷铊e@ (ϊԍ51) ̊TvƎgp@

 ֘ApbP[W

  GRPH1
    SGPACK   ꕔǉ
    STPACK   ꕔǉ
  MATH1
    GT2DLIB  V݁F 2iq̍Wϊ

 Tv@<!-- ݂GRPH1}jA1.4.21.4.3̊ԂɁAWuiq_
         Ŏw肷铊e@vƂđ}B-->

DCĹAU W V Wւ̓e@ƂāAe풼(Ȑ)Wn}e
ȂǂT|[gĂB{e@́ÄƂĒǉꂽAUI
iq_Ԃ̑ΉŒ`铊e@ł(A̕ϊ͉͓IȊ֐ɂ
)Bϊԍ 51 łBiq_̊Ԃ͑o` (bilinear
interpolation) ɂԂsB̂߁AV݂ꂽ MATH1  GT2DLIB 
pBϊ̐ݒ̓Tu[` G2SCTR ōsBۂ̕ϊ͉ʂ̃[
` G2FCTR Ăōs([U[͌ĂԕKvȂ)B

̕ϊƓlA{ϊ U WɂĘ_Iɋ`2̗̈Ώ
ƂBƗϐ, łƂUWnɂiq_ [_i, _j]
(i=1,..,Nx, j=1,..,Ny) AƂȂ钼Wn(Ɨϐx,y)ɂ
[x_ij, y_ij] (i=1,..,Nx, j=1,..,Ny) łꍇɁAO҂[U[ɂƂ
Ă̕`̈ƂA҂̍Wnŉʏɕ\BŁA, ł͂
i,ĵ݂Ɉˑ̂ɑ΂Ax, y ͗Ɉˑ邱ƂɒӂB
ÅiqUWɂāu`vłB

̕ΐAn̗͊wIɂ́Aiqꂽiqɂ闬̃V~[
V̌ʂƂȂǂɁALpłB܂An`ɉW
nł̌vZʂ̉ɂ𗧂B{ΐAʂȏꍇƂāÁx 
 Ły ̏ꍇɑΉł̂ŁAUWŃ́xƂĐƂA
łɒn`ɉWAyɍx΂悢B

{ϊł́AU W V W𒼐ڑΉ̂łȂAC WƌĂԒ
IȒWBC W Cartesian ꌹƂAV Wɐ`
Ή钼Włi_ړƏcEꂼ̐LkjBCẂA
ȐW`̊ƂȂ钼sW̂łBƂȂ钼
Wn(Lx,yWn)́AVWłȂCWɑΉAC WVW
ւ̕ΐASGPACK̑ϊp^[ CXMIN, CXMAX, CYMIN, CYMAX Ŏw
肷B, U W C Wւ̕ΐAGT2DLIB ōsB

W C W U[XY]PACK gďƂłB̏ꍇAϊ
1ɐ؂ւUWƂCWp΂悢B

݂̂ƂA{ϊł͐VWɂĐƂȂ悤ɈB
߁AႦ΍Wɉ{̐ƂďĂAiq̋Ȃ肪
fȂB]āAxׂȊԊuŐ`Ȃ邱ƂKv
łB́Aϊԍ2-7łlłBAn}eł͐͑
~ɉēKɋ؂ĕԂ邱ƂɂȂĂAႦΌo
ĕ`悵ĂAn}ɉȐ(܂)Ƃĕ\BIɂ́A
n}eȊO̕ϊɊւāAUWɂԂKXs悤ɂ邱
ĂB


 Kϊp^ <!-- GRPH1 1.4.3ɒǉp -->

Eϊp^  
  <!-- ȉ͂̕ (SIMFAC, VXOFF, VYOFF) ̉̑Oɑ} -->

  eϊ̊ƂȂ钼Wn V W̊Ԃ̑ϊw肷p
  ^[ɂ͉L2nBDCL 5.2 ܂ł2Ԗڂ݂̂̂A
  n}eȂǂɗpĂ邪A5.3 ł͂ʐ̂1Ԗڂ̂
  Aϊԍ51ȂǂŗpBn̐ݒ胋[`́A
  ꑼݒ肷悤ɂȂĂ̂ŁAۂɂ͂ǂݒ肵Ă
  悤ɂȂĂB

  ( CXMIN, CXMAX, CYMIN, CYMAX )

    eϊ (ϊԍ 5 ȏ. n}eiq_Ŏw肷ϊ܂) 
    ɂāAe̊ƂȂ钼Wn V WɑΉ邽߂̃p
    ^[BEBh[̎lCWw肷BCXMIN, CXMAX, CYMIN,
    CYMAX  VXMIN, VXMAX, VYMIN, VYMAX ɈvƂACWVW
    vBȂAϊp^[͎ɏqׂ SIMFAC, VXOFF,
    VYOFF ɂĂwłB͏cƉ̏kڂł邱
    Ƃ⏞B

    (CXMIN, CXMAX, CYMIN, CYMAX) ̓Tu[`SGSCWD / SGQCWD Őݒ 
    / QƂłBSGSCWD ́A (SIMFAC, VXOFF, VYOFF) 
    肷邪A̍ہASIMFAC ͉̃XP[Ɍ߂B

  ( SIMFAC, VXOFF, VYOFF )

    <!--Ɉȉ̕ǉ-->
    SGSSIM͓ (CXMIN, CXMAX, CYMIN, CYMAX) ݒ肷B

 UWn̐ݒ <!-- GRPH1 1.4.4ɒǉp-->

Eiq_Ŏw肷Wn (ϊԍ51)

      CALL SGSTRN(51)
      CALL SGSVPT(VXMIN, VXMAX, VYMIN, VYMAX)
      CALL SGSCWD(CXMIN, CXMAX, CYMIN, CYMAX)
      CALL SGSWND(UXMIN, UXMAX, UYMIN, UYMAX)
      CALL G2SCTR(NX, NY, UX, UY, CX, CY)
      CALL SGSTRF

    ŁAUX, UY ͂ꂼ꒷ NX, NY ̈ꎟzŁAUWɂ
    `ɋ؂ꂽiq_\(Tvɂ_i, _jɑΉ)B
    , CY, CY ͂ƂɃTCY (NX, NY) 2zƂ(Tv
     x_ij, y_ij ɑΉ)BUX, UY͒PPłȂ΂Ȃ
    BG2SCTR  MATH1GT2DLIBɂWϊ֐ G2FCTR ̏
    łBG2FCTR͕`掞ɎIɌĂ΂BȂAUX, UY̊iq҂
     U WƂɂ́AGRSWND

      CALL SGSWND(UX(1),UX(NX),UY(1),UY(NY))

    ȂǂƂ΂悢B

    <!--ȉ͏߂̃tHg-->
    Ȃ GRPH2 ł͏L̃Tu[`̐ړSG  GR ɕςTu[
    `pӂĂBGR* pĕϊݒ肷ꍇ́A(CXMIN,
    CXMAX, CYMIN, CYMAX) ̎w͏ȗłBȗꍇׂĂ̊iq
    _ŏ͈̔͂I΂BF

      CALL GRSTRN(51)
      CALL GRSVPT(VXMIN, VXMAX, VYMIN, VYMAX)
      CALL GRSWND(UXMIN, UXMAX, UYMIN, UYMAX)
      CALL G2SCTR(NX, NY, UX, UY, CX, CY)
      CALL GRSTRF

 SGPACKt@Xǉ

ESGpGET/SGpSET(SGpSTX)

  [ϊ֐Ɋւp^[]  

  'CXMIN', 'CXMAX', 'CYMIN', 'CYMAX'    ϊp^. l
                                        0.0, 1.0, 0.0, 1.0.

ESGSCWD

  1. @\

       ϊݒ肷B

  2. ďo@

             CALL SGSCWD(CXMIN,CXMAX,CYMIN,CYMAX)

  3. p^[̐

        CXMIN,CXMAX,CYMIN,CYMAX (R) CW̎l\ SGPACK 
        ϐB1.4߂QƂ̂ƁB

  4. l

     (a) 4p^[͒n}eŗp鑊ϊp^[ 
         SIMFAC, VXOFF, VYOFF ̈قȂ\@ƌBA
         Ƃ番悤ɁÂقʓIłB҂
         ́AcE̐Lkp^[ɓl(SIMFAC)邱ƂŁAp
         ^[̐Ă̂łB

     (b) ɕϊԍ 51 ŗp邽߂ɓꂽp^[ł邪A
         ۂɂ́ASGSCWDĂԂ SGSSIM ňp^[ݒ肳A
         ܂ SGSSIM ĂԂ SGSCWD ňp^[ݒ肳悤
         ɂȂĂB
         
 GRPACKt@Xǉ

EGRSCWD

  1. @\

       ϊݒ肷BGRPH1/SGPACKSGSCWDɈnČĂ
       łB

  2. ďo@

             CALL GRSCWD(CXMIN,CXMAX,CYMIN,CYMAX)

  3. p^[̐

       GRPH1/SGPACKSGSCWDQƂ̂.

  4. l

       GRPH1/SGPACKSGSCWDQƂ̂.

 `[gA
 @<!-- u炭炭vɁBẂuiq_Ŏw肷铊e@v -->

DCLł́AsȐW̕\n}eȂǁA̓eϊɂ`
s܂B͂͊֐w肳ϊłAȊO
Ɋiq_Ԃ̑Ήŕϊw肷铊e@Aϊԍ51ƂȂĂ
Bł͂̎g܂BȂAiq_̊Ԃ̓_̕\ɂ͑o
`(bilinear interpolation)p܂BԂ MATH1  GT2DLIB 
ɂs܂̂ŁAASY̏ڍׂɂẮÃ}jAQ
ƂĂB

EPF

L̃vOsƁA} g2pk01.png ܂B

<img src="g2pk01.png">
<a href="g2pk01.f">vOg2pk01.f</a>

--------------- vO g2pk01.f -------------------
 1: *--------------------------------------------------------------------
 2: *     Copyright (C) 2000-2004 GFD Dennou Club. All rights reserved.
 3: *--------------------------------------------------------------------
 4:       PROGRAM G2PK01
 5: 
 6:       PARAMETER(NX=15,NY=15)
 7: 
 8:       REAL UX(NX), UY(NY)
 9:       REAL UYW(NX), UXW(NY) 
10:       REAL CX(NX,NY), CY(NX,NY)
11:       REAL Z(NX,NY)
12: 
13: 
14: *     / SET PARAMETERS /
15: 
16:       DO 10 I=1,NX
17:         UX(I)=(I-1.0)/(NX-1.0)
18:    10 CONTINUE
19:       DO 15 J=1,NY
20:         UY(J)=(J-1.0)/(NY-1.0)
21:    15 CONTINUE
22: 
23:       DO 25 J=1,NY
24:         DO 20 I=1,NX
25:           CX(I,J) = UX(I) + 0.1*UY(J)
26:           CY(I,J) = 0.2*UX(I) + UY(J)
27:    20   CONTINUE
28:    25 CONTINUE
29: 
30:       CXMIN = 0.0
31:       CXMAX = 1.1
32:       CYMIN = 0.0
33:       CYMAX = 1.1
34: 
35: *     / GRAPHIC /
36: 
37:       WRITE(*,*) ' WORKSTATION ID (I) ? ;'
38:       CALL SGPWSN
39:       READ(*,*) IWS
40: 
41:       CALL GROPN(IWS)
42:       CALL GRFRM
43:       CALL GRSVPT(0.15,0.85,0.15,0.85)
44:       CALL GRSWND(UX(1),UX(NX),UY(1),UY(NY))
45:       CALL G2SCTR(NX,NY,UX,UY,CX,CY)
46:       CALL GRSTRN(51)
47:       CALL SGSCWD(CXMIN,CXMAX,CYMIN,CYMAX)
48:       CALL GRSTRF
49: 
50:       CALL SGLSET('LCLIP',.TRUE.)
51: 
52: *     / TONE /
53: 
54:       DO 35 J=1,NY
55:         DO 30 I=1,NX
56:           Z(I,J) = UX(I) + UY(J)
57:    30   CONTINUE
58:    35 CONTINUE
59: 
60:       CALL UELSET('LTONE',.TRUE.)
61:       CALL UWSGXA(UX,NX)
62:       CALL UWSGYA(UY,NY)
63:       CALL UETONE(Z, NX, NX, NY)
64: 
65: *     / GRID LINES /
66: 
67:       DO 45 J=1,NY
68:         DO 40 I=1,NX
69:           UYW(I) = UY(J)
70:    40   CONTINUE
71:         CALL SGPLU(NX,UX,UYW)
72:    45 CONTINUE
73: 
74:       DO 55 I=1,NX
75:         DO 50 J=1,NY
76:           UXW(J) = UX(I)
77:    50   CONTINUE
78:         CALL SGPLU(NY,UXW,UY)
79:    55 CONTINUE
80: 
81: *     / AXES (Switch to ITR==1) /
82: 
83:       CALL GRSWND(CXMIN,CXMAX,CYMIN,CYMAX)
84:       CALL GRSTRN(1)
85:       CALL GRSTRF
86:       CALL USDAXS
87:       CALL UXSTTL('T','BOTH X & Y TRANSFORMED',0.0)
88: 
89:       CALL GRCLS
90: 
91:       END
--------------- vO g2pk01.f -------------------


f̂߁Aiq_͂ȒPȉ͊֐pĒ`܂B U W
āu`vɕ񂾊iq_̍W [ UX(I), UY(J) ] (I=1..NX,
J=1..NY) Œ`AꂼꂪƂȂ钼Wɂ [ CX(I,J),
CY(I,J) ] ̍Wl܂B

42-48sڂŁAϊݒ肵Ă܂BUWɂ`͈͂, UX, UY 
Jo[̈҂ɂׂA

      CALL GRSWND(UX(1),UX(NX),UY(1),UY(NY)) 

Ɛݒ肵܂(44s)BAr[|[g̎lCWlw肷 
CXMIN,CXMAX,CYMIN,CYMAX ɂ͓KȒlݒ肵Ă܂(30-33 s)B
GRFRM, GRSTRAGRPH2GRPACKgďꍇAC[XY](MIN|MAX)
ݒ͏ȗł܂(GRFRMCXMINsɂ܂)Bȗɂ́Aiq҂
߂ׂACX, CY̍őlpēIɐݒ肵܂B

UWŐFh(54-63s)ƁAiq\܂(67-79s)B
̂ƂAVWł̂܂ܐƂď悤ɂȂĂ܂̂ŁA
̂悤Ɋeiq_Ԑ܂ƂďKv܂BɂAo
`ԂɂẮÂ悤ɂƌȊiq̕\ƂȂ܂B

W C Wŏ܂(83-87s)B萳mɌ΁Aϊ`
ȂāA܂CWłWnUWƂĒ`(ϊ
1)AW܂B̂ƂAϊԍ51ɂ钼ڂ̍\
`̓T|[gĂ܂B

EQF

L̃vOsƁA} g2pk02.png ܂B

<img src="g2pk02.png">
<a href="g2pk02.f">vOg2pk02.f</a>

--------------- vO g2pk02.f -------------------
 1: *--------------------------------------------------------------------
 2: *     Copyright (C) 2000-2004 GFD Dennou Club. All rights reserved.
 3: *--------------------------------------------------------------------
 4:       PROGRAM G2PK02
 5: 
 6:       PARAMETER(NX=15,NY=15)
 7: 
 8:       REAL UX(NX), UY(NY)
 9:       REAL UYW(NX), UXW(NY)
10:       REAL CX(NX,NY), CY(NX,NY)
11:       REAL Z(NX,NY)
12:       REAL TERRAIN(NX)
13: 
14: 
15: *     / SET PARAMETERS /
16: 
17:       CALL GLRGET('RUNDEF',RUNDEF)
18: 
19:       DO 10 I=1,NX
20:         UX(I)=(I-1.0)/(NX-1.0) - 0.5
21:         TERRAIN(I) = 0.1 * EXP(-24*UX(I)**2)
22:    10 CONTINUE
23:       DO 15 J=1,NY
24:         UY(J)=(J-1.0)/(NY-1.0)
25:    15 CONTINUE
26: 
27:       CX(1,1) = RUNDEF
28:       DO 25 J=1,NY
29:         DO 20 I=1,NX
30:           CY(I,J) = UY(J)*(1.0-TERRAIN(I)) + TERRAIN(I)
31:    20   CONTINUE
32:    25 CONTINUE
33: 
34: *     / GRAPHIC /
35: 
36:       WRITE(*,*) ' WORKSTATION ID (I) ? ;'
37:       CALL SGPWSN
38:       READ(*,*) IWS
39: 
40:       CALL GROPN(IWS)
41:       CALL GRFRM
42:       CALL GRSVPT(0.15,0.85,0.15,0.85)
43:       CALL GRSWND(UX(1),UX(NX),UY(1),UY(NY))
44:       CALL GRSTRN(51)
45:       CALL G2SCTR(NX, NY, UX,UY, CX,CY)
46:       CALL GRSTRF
47: 
48: *     / TONE /
49: 
50:       DO 35 J=1,NY
51:         DO 30 I=1,NX
52:           Z(I,J) = UX(I) * (1-UY(J))
53:    30   CONTINUE
54:    35 CONTINUE
55: 
56:       CALL UELSET('LTONE',.TRUE.)
57:       CALL UWSGXA(UX,NX)
58:       CALL UWSGYA(UY,NY)
59:       CALL UETONE(Z, NX, NX, NY)
60: 
61: *     / GRID LINES /
62: 
63:       DO 45 J=1,NY
64:         DO 40 I=1,NX
65:           UYW(I) = UY(J)
66:    40   CONTINUE
67:         CALL SGPLU(NX,UX,UYW)
68:    45 CONTINUE
69: 
70:       DO 55 I=1,NX
71:         DO 50 J=1,NY
72:           UXW(J) = UX(I)
73:    50   CONTINUE
74:         CALL SGPLU(NY,UXW,UY)
75:    55 CONTINUE
76: 
77: *     / AXES  (Switch to ITR==1) /
78: 
79:       CALL G2QCTM(CXMIN, CXMAX, CYMIN, CYMAX)
80:       CALL GRSWND(CXMIN,CXMAX,CYMIN,CYMAX)
81:       CALL GRSTRN(1)
82:       CALL GRSTRF
83:       CALL USDAXS
84:       CALL UXSTTL('T','TERRAIN FOLLOWING',0.0)
85: 
86:       CALL GRCLS
87: 
88:       END
--------------- vO g2pk02.f -------------------

̗ł, CXUXƂAYɉĂ̂ݍWϊĂ܂BUX1z
Ȃ̂ɑ΂CX2łÂ悤ȔzʓrpӂȂ΂Ȃ
ȂƂȂƏʓ|łBŁACX̍ŏ̗vf̒l GLPACK ̃p
^[ 'RUNDEF' ̒lɓꍇ́ACXUXłƉ߂邱ƂɂȂ
܂Bȍ~̒l͓ǂݍ݂܂̂ŁACX̂߂2zpӂ
Kv܂ił͗pӂĂ܂jBlȂƂ Y ɉ
Ăo܂BACXUXCYUYȂ炱̕ϊ̈ӖȂ̂ŁAG
[ɂȂ悤ɂȂĂ܂B

Wϊ̐ݒ(41-46s)ɂėPƈႤ̂́AC[XY](MIN|MAX) ݒ
ĂȂƂłBƁAIɊiq_҂܂悤ȗ
悪mۂ܂̂ŁA}̂悤ȌʂƂȂ܂B̂߂ɂ 
̂悤Ɂ@GRPH2 ̐ݒ胋[` GRFRM pKv܂BȂA
Iɐݒ肳ꂽ̃p^[QƂ邱ƂŁACWւ̐؂
Ǝ`ł܂i79-84s)B
