source: trunk/SRC/ToBeReviewed/GRILLE/t2v.pro @ 370

Last change on this file since 370 was 370, checked in by pinsard, 16 years ago

improvemnts of headers (typo, links)

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