#########################################################
#
#   GT2DLIB  2-Dimensional Grid Transformation LIBrary
#            2iq̍Wϊ
#
#########################################################

 Tv

{Cu[2̕ԁAтɂp2̍WϊB
WԂ̑Ή͗UIȊiq_Ŏw肵AԂ͕ԂBԃASY
o`ԂpB̂ߋtϊ͉͓IɌvZBIɂ͑o3
ԂT|[g\邪Ȁꍇtϊ͔@ɂ邱Ƃ
ȂB

Ԃ̃Tu[`́AWϊ݂̂Ȃ炸ʂ̗prɓK悤ĂB

WΐA(,) -> (x,y) ɂāAUIȓ_ _i (i=0,1,2,..),
_j (j=0,1,2,..) ɂ

      x_i,j = x(_i,_i)
      y_i,j = y(_i,_i)

Ƃ`ŕ\iq_ł̑Ή֌Wɂ`B]āuϊv
ɂẮAϊ̍W̃f[^21zAϊ̍W̃f[^
22zƂȂBtῗ̋tłBȂA22z񂩂
22zւƑΉÂWΐAԓI1zx[X
u`viqݒ肷΁AtϊAϊ2iKōsƂoB
́A􉽓Iɂ́AƂȂfJgWnp邱ƂɑB

 Tu[`̃Xg

* o` (BLI: bilinear interpolation)

  G2FBLI   o`Ԃs

* 2ϐ̑o` (BL2)

  G2FBL2  2ϐ̑o`Ԃs
  G2IBL2  2ϐ̑o`(G2FBL2)̋tZ

  F 2ϐ --> 2ϐʂɋtZ݂

* Wϊ (CTR: coordinate transform) 
  iq_Ԃ̑ΉɊÂWϊ. BL2𗘗p.

  G2SCTR  ϊݒ ()
  G2FCTR  ϊ
  G2ICTR  tϊ
  G2QCTR  ςۂ̖⍇킹. 

* O

  LG2INQ  lӌ`̓O

* 

  G2SGRD  iqf[^̒~
  G2QGRD  w肵ʒũObh{bNXilӌ`j̖⍇킹
          ig2sgrd, g2qgrd  C ŏĂj

----------------------------------------------------------------------
* o`
----------------------------------------------------------------------

 SUBROUTINE G2FBLI

1. @\

  o`. ͍W (P, Q) ͂Ƃ [0, 1] ̋ԂɐKꂽ̂Ƃ.

2. ďo@

      CALL G2FBLI(P, Q, Z00, Z10, Z01, Z11, Z)

3. p^[̐

      P, Q (R)  Ԃׂ_̍W. S (0,0), (1,0), (1,1), (0,1) 
         ƂȂ悤KĂ̂Ƃ. ()

      Z00, Z10, Z01, Z11 (R)  P,Q ̂S(q)AAꂼ (P,Q) =
         (0,0), (1,0), (1,1), (0,1) ɂϐ̒l () 

      Z (R) Ԍ (o)

4. l

  (a) g

         Z = (1-P)*(1-Q)*Z00 + P*(1-Q)*Z10 + (1-P)*Q*Z01 + P*Q*Z11

      ł(ŝ).

  (b) P, Q Ƃ [0,1] ̋ԓɂꍇ͕, łȂΊO}
      ƂȂB

  (c) p^[̐疾炩ł낤, (P,Q) =
      (0,0), (1,0), (1,1), (0,1) ̏ꍇAo͂͂ꂼ
      Z00, Z10, Z01, Z11 ɓȂB

----------------------------------------------------------------------
* 2ϐ̑o`
----------------------------------------------------------------------

 SUBROUTINE G2FBL2

1. @\

  2ϐ̑o`. ͍W (P, Q) ͂Ƃ [0, 1] ̋ԂɐK
  ꂽ̂Ƃ.

2. ďo@

      CALL G2FBL2(P,Q, X00,X10,X01,X11, Y00,Y10,Y01,Y11, X,Y)

3. p^[̐

      P, Q (R)  Ԃׂ_̍W. S (0,0), (1,0), (1,1), (0,1) 
         ƂȂ悤KĂ̂Ƃ. ()

      X00, X10, X01, X11 (R)  P,Q ̂S(q)AAꂼ (P,Q) =
         (0,0), (1,0), (1,1), (0,1) ɂ߂̕ϐ̒l () 

      Y00, Y10, Y01, Y11 (R)  P,Q ̂S(q)AAꂼ (P,Q) =
         (0,0), (1,0), (1,1), (0,1) ɂ߂̕ϐ̒l () 

      X (R) X00, X10, X01, X11 ɊւԌ (o)

      Y (R) Y00, Y10, Y01, Y11 ɊւԌ (o)

4. l

  (a) G2FBLI 2Ăł邾łB

         X = (1-P)*(1-Q)*X00 + P*(1-Q)*X10 + (1-P)*Q*X01 + P*Q*X11
         Y = (1-P)*(1-Q)*Y00 + P*(1-Q)*Y10 + (1-P)*Q*Y01 + P*Q*Y11

  (b) 2ϐ2ϐւ̕ϊł邩tϊ݂B
      tϊsTu[` G2IBL2 łB

 SUBROUTINE G2IBL2

1. @\

  G2FBL2 (2ϐ̑o`) ̋tϊ. ͉ł.

2. ďo@

      CALL G2IBL2(X,Y, X00,X10,X01,X11, Y00,Y10,Y01,Y11, P,Q)

3. p^[̐

      X,Y, X00,X10,X01,X11, Y00,Y10,Y01,Y11 (R) ()

      P, Q (R) (o)

      ꂼ̐ G2FBL2 QƂ̂.

4. l

   (a) AQ͓Iɉ. (IɂPɂȂꍇA
       ̏ꍇ܂)

----------------------------------------------------------------------
* Wϊ
----------------------------------------------------------------------

 SUBROUTINE G2SCTR

1. @\

  2̍Wϊ̐ݒ(). iq_Ԃ̑ΉŒ`.

2. ďo@

      CALL G2SCTR(NX, NY, UXA,UYA, TXA,TYA)

3. p^[̐

      NX, NY (R) z̒ ()

      UXA (R) ϊ̍W (Ɨϐ1).  NX 1z ().

      UYA (R) ϊ̍W (Ɨϐ2).  NY 1z ().

      TXA (R) ϊ̍W (Ɨϐ1).  NX*NY2z ().
              1vf(TX(1,1)) RUNDEF Ƃ邱Ƃŏȗł. ȗ̏ꍇ, 
              TX(I,J)=UX(I) p.
      TYA (R) ϊ̍W (Ɨϐ2).  NX*NY2z ().
              1vf(TY(1,1)) RUNDEF Ƃ邱Ƃŏȗł. ȗ̏ꍇ, 
              TY(I,J)=UY(J) p.

4. l

  (a) 2z (TXA,TYA) ̃Z[úAC ŏꂽ̊֐sB
      I蓖Ăɂ邽߁ATCYɐȂBAꎟ UXA,
      UYA ͐ÓIɊmۂꂽTu[`̔zɃZ[uBő
       GRPH2  UWPACK ƓlARpCɕύX\Ȓ萔 
      MAXNGRID łBftHg 4000B

 SUBROUTINE G2FCTR  

1. @\

  2̍Wϊs.


2. ďo@

      CALL G2FCTR(UX, UY, TX, TY)

3. p^[̐

      UX (R) ϊO̍Wi1j ()
      UY (R) ϊO̍Wi2j ()
      TX (R) ϊ̍Wi1j (o)
      TY (R) ϊ̍Wi2j (o)

4. l

  (a) \ G2SCTR ŏĂȂƃG[𔭐B

  (b) G2SCTR Őݒ肵 UXA, UYA ͈̔͊O̓͂ɑ΂ẮA
      xoAO}sB

 SUBROUTINE G2ICTR  

1. @\

  G2FCTR (2̍Wϊ) ̋tϊs.

2. ďo@

      CALL G2ICTR(TX, TY, UX, UY)

3. p^[̐

      TX (R) tϊO̍Wi1j ()
      TY (R) tϊO̍Wi2j ()
      UX (R) tϊ̍Wi1j (o)
      UY (R) tϊ̍Wi2j (o)

4. l

  (a) \ G2SCTR ŏĂȂƃG[𔭐B

  (b) G2SCTR Őݒ肵 TXA, TYA ͈̔͊O̓͂ɑ΂ẮA
      G[𔭐B

 SUBROUTINE G2QCTR  

1. @\

  ςۂ̖⍇킹.
  ȂA G2FCTR, G2ICTR Ăׂ΃G[ł悤ɂȂĂ
  ŁA⍇킹͕K{ł͂ȂB

2. ďo@

      CALL G2QCTR(LINIT)

3. p^[̐

      LINIT (L) ςȂ .TRUE. ܂Ȃ .FALSE. ԂB(o)

4. l

  (a) G2SCTR ɌĂ΂Ă .TRUE. 

----------------------------------------------------------------------
* O
----------------------------------------------------------------------

 FUNCTION LG2INQ

1. @\

  _lӌ`̓ɂ邩肷Bʎlӌ`B

2. ďo@

      LIN = LG2INQ(TX,TY, TX00,TX10,TX01,TX11, TY00,TY10,TY01,TY11)

3. p^[̐

      TX,TY (R) 肷ׂ_̍W ()

      TX00,TX10,TX01,TX11, TY00,TY10,TY01,TY11 (R) lӌ`4̍W ()

      ߂l (L) ܂͋Eɂ .TRUE. OȂ .FALSE. Ԃ.

4. l

  (a) G2ICTR ƂėpB

  (b) lӌ`ɂ͑ΉĂȂBWϊɂẮA
      lӌ`͑̂ϊɂȂB̏ꍇ́A
      tῗӂɌ܂Ȃ̂ŁAplႢB
      Iɂ́Alӌ`ɑΉĂ悢B

----------------------------------------------------------------------
* 
----------------------------------------------------------------------

 FUNCTION G2SGRD, FUNCTION G2QGRD

G2SCTR ̉łAIȔzmۂ̂ C ŏĂBȊO
ƗȊ֐ƂׂR͂Ȃ̂Ő͊B

