source: trunk/SRC/ToBeReviewed/GRILLE/v2t.pro @ 163

Last change on this file since 163 was 163, checked in by navarro, 18 years ago

header improvements : type of parameters and keywords, default values, spell checking + idldoc assistant (IDL online_help)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 5.3 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5;
6; @file_comments
7; Allows to pass a field referring to the grid V on the grid T,
8; thanks to the average:
9; res = 0.5*(res + shift(res, 1, 0))   
10;
11; @categories
12; Grid
13;
14; @param TEMP {in}{required}
15; A 2, 3 or 4d array
16;
17; @returns
18; res, a 2, 3 or 4d array
19;
20; @uses
21; common.pro
22;
23; @restrictions
24; Force parameters of the zoom on the grid V to be the same as
25; those on the grid T.
26;
27; @restrictions
28; Points which can not be calculated are put at the value NaN
29; consecrated by IDL: !values.f_nan
30;
31; @history
32; From Marina Levy's programs
33; Sebastien Masson (smasson\@lodyc.jussieu.fr):
34; Validation. 5/6/2000
35;
36; @version
37; $Id$
38;
39; @todo seb: nom du input?
40;
41;-
42;------------------------------------------------------------
43;------------------------------------------------------------
44;------------------------------------------------------------
45FUNCTION v2t, temp
46;---------------------------------------------------------
47;
48  compile_opt idl2, strictarrsubs
49;
50@cm_4mesh
51@cm_4data
52@cm_4cal
53  IF NOT keyword_set(key_forgetold) THEN BEGIN
54@updatenew
55  ENDIF
56;---------------------------------------------------------
57   res = temp
58;We force nxt=nxv, etc ...
59   firstxt = firstxv
60   lastxt = lastxv
61   firstyt = firstyv
62   lastyt = lastyv
63   nxt = nxv
64   nyt = nyv
65   vargrid = 'T'
66   if NOT keyword_set(valmask) then valmask = 1e20
67   lat1 = gphit[0, firstyt]
68   lat2 = gphiv[0, lastyv]
69
70; case on tha array's size and application
71   taille = size(temp)
72   CASE taille[0] OF
73      1: res = -1
74      2: BEGIN
75         case 1 of
76            taille[1] eq nxv and taille[2] eq nyv:
77            taille[1] eq jpi and taille[2] eq jpj: $
78             res=res[firstxv:lastxv, firstyv:lastyv]
79            else: $
80             return, report('Probleme d''adequation entre les tailles du domaine et de la boite.')
81         endcase
82         mask = (vmask())[firstxv:lastxv, firstyv:lastyv, 0]
83         terre = where(mask EQ 0)
84         IF terre[0] NE -1 THEN res[terre] = !values.f_nan
85         res = 0.5*(res + shift(res, 0, +1))
86         res[*, 0] = !values.f_nan
87         mask = tmask[firstxv:lastxv, firstyv:lastyv, 0]
88         terre = where(mask EQ 0)
89         IF terre[0] NE -1 THEN res[terre] = valmask
90      END
91      3: BEGIN
92         case 1 of
93            taille[1] eq nxv and taille[2] eq nyv AND taille[3] EQ nzt:
94            taille[1] eq nxv and taille[2] eq nyv AND taille[3] EQ jpk: $
95             res=res[*, *, firstzt:lastzt]
96            taille[1] eq nxv and taille[2] eq nyv AND taille[3] EQ jpt:
97            taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpk: $
98             res=res[firstxv:lastxv, firstyv:lastyv, firstzt:lastzt]
99            taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpt: $
100             res=res[firstxv:lastxv, firstyv:lastyv, *]
101            else: $
102             return, report('Probleme d''adequation entre les tailles du domaine et de la boite.')
103         ENDCASE
104         if taille[3] EQ jpt then begin
105            mask = (vmask())[firstxv:lastxv, firstyv:lastyv, lastzt*(nzt NE jpk)]
106            mask = temporary(mask[*])#replicate(1, jpt)
107            mask = reform(mask, nxv, nyv, jpt, /over)
108         ENDIF ELSE mask = (vmask())[firstxv:lastxv, firstyv:lastyv, firstzt:lastzt]
109         terre = where(temporary(mask) EQ 0)
110         IF terre[0] NE -1 THEN res[temporary(terre)] = !values.f_nan
111         res = 0.5*(res + shift(res, 0, +1, 0))
112         res[*, 0, *] = !values.f_nan
113         if taille[3] EQ jpt then BEGIN
114            mask = tmask[firstxv:lastxv, firstyv:lastyv, lastzt*(nzt NE jpk)]
115            mask = temporary(mask[*])#replicate(1, jpt)
116            mask = reform(mask, nxv, nyv, jpt, /over)
117         ENDIF ELSE mask = tmask[firstxv:lastxv, firstyv:lastyv, firstzt:lastzt]
118         terre = where(temporary(mask) EQ 0)
119         IF terre[0] NE -1 THEN res[temporary(terre)] = valmask
120      END
121      4: BEGIN
122         case 1 of
123            taille[1] eq nxv and taille[2] eq nyv AND taille[3] EQ nzt AND taille[4] EQ jpt:
124            taille[1] eq nxv and taille[2] eq nyv AND taille[3] EQ jpk AND taille[4] EQ jpt: $
125             res=res[*, *, firstzt:lastzt, *]
126            taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpk AND taille[4] EQ jpt: $
127             res=res[firstxv:lastxv, firstyv:lastyv, firstzt:lastzt, *]
128            else: $
129             return, report('Probleme d''adequation entre les tailles du domaine et de la boite.')
130         ENDCASE
131         mask = (vmask())[firstxv:lastxv, firstyv:lastyv, firstzt:lastzt]
132         mask = temporary(mask[*])#replicate(1, jpt)
133         mask = reform(mask, nxv, nyv, nzt, jpt, /over)
134         terre = where(temporary(mask) EQ 0)
135         IF terre[0] NE -1 THEN res[temporary(terre)] = !values.f_nan
136         res = 0.5*(res + shift(res, 0, +1, 0, 0))
137         res[*, 0, *, *] = !values.f_nan
138         mask = tmask[firstxv:lastxv, firstyv:lastyv, firstzt:lastzt]
139         mask = temporary(mask[*])#replicate(1, jpt)
140         mask = reform(mask, nxv, nyv, nzt, jpt, /over)
141         terre = where(temporary(mask) EQ 0)
142         IF terre[0] NE -1 THEN res[temporary(terre)] = valmask
143      END
144   endcase
145
146   IF NOT keyword_set(key_forgetold) THEN BEGIN
147   @updateold
148   ENDIF
149
150    return, res
151END
152
Note: See TracBrowser for help on using the repository browser.