source: CPL/oasis3/trunk/src/lib/anaisg/src/qgrhal.f @ 1677

Last change on this file since 1677 was 1677, checked in by aclsce, 13 years ago

Imported oasis3 (tag ipslcm5a) from cvs server to svn server (igcmg project).

File size: 4.2 KB
Line 
1      SUBROUTINE qgrhal (prho2, k1to2, kwg2,
2     $                   px2, py2, kmsk2, kngx2, kngy2,
3     $                   px1, py1, kmsk1, kngx1, kngy1,
4     $                   ps12, kvma1, kvma2)
5C****
6C               *****************************
7C               * OASIS ROUTINE  -  LEVEL 3 *
8C               * -------------     ------- *
9C               *****************************
10C
11C**** *qgrhal* - Calculate weights and adresses for all the target grid
12C
13C     Purpose:
14C     -------
15C     For each point of a target grid 2 give the lpwg2 nearest neighbours 
16C     adresses k1to2 in source grid 1 and their weight which is function of
17C     the distance and maybe other grid dependant considerations. 
18C 
19C     N.B : the calculation is done only over unmasked points
20C
21C**   Interface:
22C     ---------
23C       *CALL*  *qgrhal (prho2, k1to2, kwg2,
24C                        px2, py2, kmsk2, kngx2, kngy2,
25C                        px1, py1, kmsk1, kngx1, kngy1,
26C                        ps12, kvma1, kvma2)*   
27C
28C     Input:
29C     -----
30C                kwg2    : maximum number of nearest neighbors
31C                px1     : longitudes for source grid (real 2D)
32C                py1     : latitudes for source grid (real 2D)
33C                kmsk1   : the mask for source grid (integer 2D)
34C                kngx1   : number of longitudes for source grid
35C                kngy1   : number of latitudes for source grid
36C                px2     : longitudes for target grid (real 2D)
37C                py2     : latitudes for target grid (real 2D)
38C                kmsk2   : the mask of target grid (integer 2D)
39C                kngx2   : number of longitudes for target grid
40C                kngy2   : number of latitudes for target grid
41C                ps12    : gaussian variance
42C                kvma1   : the value of the mask for source grid
43C                kvma2   : the value of the mask for target grid 
44C
45C     Output:
46C     ------
47C                prho2   : weights for Anaism interpolation (real 3D)
48C                k1to2   : source grid neighbors adresses (integer 3D)
49C
50C     Workspace:
51C     ---------
52C     None
53C
54C     External:
55C     --------
56C     qgrho: to calculate the weights and adresses at one point
57C 
58C     References:
59C     ----------
60C     O. Thual, Simple ocean-atmosphere interpolation. 
61C               Part A: The method, Epicoa 0629 (1992)
62C               Part B: Software implementation, Epicoa 0630 (1992)
63C     See also OASIS manual (1995)
64C
65C     History:
66C     -------
67C       Version   Programmer     Date      Description
68C       -------   ----------     ----      ----------- 
69C       1.0       O. Thual       93/04/15  created 
70C       1.1       E. Guilyardi   93/11/23  modified
71C       2.0       L. Terray      95/10/01  modified: new structure
72C
73C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
74C
75C* ---------------------------- Include files ---------------------------
76C
77      USE mod_kinds_oasis
78      USE mod_unit
79C
80C* ---------------------------- Argument declarations -------------------
81C
82      REAL (kind=ip_realwp_p) prho2(kwg2,kngx2,kngy2)
83      REAL (kind=ip_realwp_p) px1(kngx1,kngy1), py1(kngx1,kngy1)
84      REAL (kind=ip_realwp_p) px2(kngx2,kngy2), py2(kngx2,kngy2)
85      INTEGER (kind=ip_intwp_p) kmsk1(kngx1,kngy1), kmsk2(kngx2,kngy2)
86      INTEGER (kind=ip_intwp_p) k1to2(kwg2,kngx2,kngy2)
87C
88C* ---------------------------- Poema verses ----------------------------
89C
90C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
91C
92C*    1. Neighbours determination
93C        ------------------------
94C
95      DO 110 j2 = 1, kngy2
96        DO 120 j1 = 1, kngx2
97C
98C* For all target grid points:  zero all weights and set adresses to one
99C 
100          DO 130 jwg = 1, kwg2
101            prho2(jwg,j1,j2) = 0.
102            k1to2(jwg,j1,j2) = 1 
103 130      CONTINUE
104C
105C* Calculate weights for unmasked points
106C
107          IF (kmsk2(j1,j2) .NE. kvma2) THEN
108              CALL qgrho (prho2(1,j1,j2), k1to2(1,j1,j2), kwg2,
109     $                    px2(j1,j2), py2(j1,j2),
110     $                    px1, py1, kmsk1, kngx1, kngy1,
111     $                    ps12, kvma1)
112          ENDIF
113 120    CONTINUE
114 110  CONTINUE
115C
116C* End of routine
117C
118      RETURN
119      END
Note: See TracBrowser for help on using the repository browser.