source: trunk/ToBeReviewed/GRILLE/u2t.pro @ 13

Last change on this file since 13 was 13, checked in by pinsard, 18 years ago

upgrade of GRILLE/Utilities according to cerbere.lodyc.jussieu.fr: /usr/home/smasson/SAXO_RD/ : files

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; NAME:u2t
6;
7; PURPOSE:permet de passer un champs se rapportant a la grille U sur
8; la grille T, grace a la moyenne: res = 0.5*(res + shift(res, 1, 0))
9;     
10;
11; CATEGORY:grille
12;
13; CALLING SEQUENCE:res=u2t(tab)
14;
15; INPUTS:tab, un tableau 2, 3 ou 4d
16;
17; KEYWORD PARAMETERS:
18;
19; OUTPUTS:res, un tableau 2, 3 ou 4d
20;
21; COMMON BLOCKS:common.pro
22;
23; SIDE EFFECTS:force les parametres du zoom sur la grille V a etre
24; les memes que ceux sur la grille T.
25;
26; RESTRICTIONS:les points qui ne peuvent etre calcules sont mis a la
27; valeur NaN consacree par IDL: !values.f_nan
28;
29; EXAMPLE:
30;
31; MODIFICATION HISTORY:a partir des programmes de Marina Levy
32;                      Sebastien Masson (smasson@lodyc.jussieu.fr):
33;                      inspection des traveuax finis. 5/6/2000
34;
35;-
36;------------------------------------------------------------
37;------------------------------------------------------------
38;------------------------------------------------------------
39FUNCTION u2t, temp
40;---------------------------------------------------------
41@cm_4mesh
42@cm_4data
43@cm_4cal
44  IF NOT keyword_set(key_forgetold) THEN BEGIN
45@updatenew
46  ENDIF
47;---------------------------------------------------------
48   res = temp
49;on force nxt=nxu, etc ...
50   firstxt = firstxu
51   lastxt = lastxu
52   firstyt = firstyu
53   lastyt = lastyu
54   nxt = nxu
55   nyt = nyu
56   vargrid = 'T'
57   if NOT keyword_set(valmask) then valmask = 1e20
58   lon1 = glamt[firstxt, 0]
59   lon2 = glamu[lastxu, 0]
60;
61; cas sur la taille du tableau et 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 nxu and taille[2] eq nyu:
68            taille[1] eq jpi and taille[2] eq jpj: $
69             res=res[firstxu:lastxu, firstyu:lastyu]
70            else: $
71             return, report('Probleme d''adequation entre les tailles du domaine et de la boite.')
72         endcase
73         mask = (umask())[firstxu:lastxu, firstyu:lastyu, 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, 1, 0))
77         if NOT (keyword_set(key_periodic) AND nxu EQ jpi) then res[0, *] = !values.f_nan
78         mask = tmask[firstxu:lastxu, firstyu:lastyu, 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 nxu and taille[2] eq nyu AND taille[3] EQ nzt:
85            taille[1] eq nxu and taille[2] eq nyu AND taille[3] EQ jpk: $
86             res=res[*, *, firstzt:lastzt]
87            taille[1] eq nxu and taille[2] eq nyu AND taille[3] EQ jpt:
88            taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpk: $
89             res=res[firstxu:lastxu, firstyu:lastyu, firstzt:lastzt]
90            taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpt: $
91             res=res[firstxu:lastxu, firstyu:lastyu, *]
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 = (umask())[firstxu:lastxu, firstyu:lastyu, lastzt*(nzt NE jpk)]
97            mask = temporary(mask[*])#replicate(1, jpt)
98            mask = reform(mask, nxu, nyu, jpt, /over)
99         ENDIF ELSE mask = (umask())[firstxu:lastxu, firstyu:lastyu, 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, 1, 0, 0))
103         if NOT (keyword_set(key_periodic) AND nxu EQ jpi) then res[0, *, *] = !values.f_nan
104         if taille[3] EQ jpt then BEGIN
105            mask = tmask[firstxu:lastxu, firstyu:lastyu, lastzt*(nzt NE jpk)]
106            mask = temporary(mask[*])#replicate(1, jpt)
107            mask = reform(mask, nxu, nyu, jpt, /over)
108         ENDIF ELSE mask = tmask[firstxu:lastxu, firstyu:lastyu, 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 nxu and taille[2] eq nyu AND taille[3] EQ nzt AND taille[4] EQ jpt:
115            taille[1] eq nxu and taille[2] eq nyu 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[firstxu:lastxu, firstyu:lastyu, firstzt:lastzt, *]
119            else: $
120             return, report('Probleme d''adequation entre les tailles du domaine et de la boite.')
121         ENDCASE
122         mask = (umask())[firstxu:lastxu, firstyu:lastyu, firstzt:lastzt]
123         mask = temporary(mask[*])#replicate(1, jpt)
124         mask = reform(mask, nxu, nyu, 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, 1, 0, 0, 0))
128         if NOT (keyword_set(key_periodic) AND nxu EQ jpi) then res[0, *, *, *] = !values.f_nan
129         mask = tmask[firstxu:lastxu, firstyu:lastyu, firstzt:lastzt]
130         mask = temporary(mask[*])#replicate(1, jpt)
131         mask = reform(mask, nxu, nyu, 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
143
Note: See TracBrowser for help on using the repository browser.